問題タブ [usbserial]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
39 参照

networking - USB コントローラをブリッジ接続にすることは可能ですか?

同じPCに接続されている2つのUSBデバイスを一緒に接続できるかどうか疑問に思っていました。PCを接続する代わりに、ケーブルで直接接続しているかのようにデバイスを接続したい。AndroidをPS3コントローラーに接続するためのケーブルコンバーターを実際に持っていないので、これを尋ねますが、突然、このようにするという考えに至りました。ネットワークブリッジのようなものです。

0 投票する
1 に答える
850 参照

c# - USB UART の速度が間違っている

PC 上の GUI は、一連のバイトを組み込みシステムに送信します。

  • Bluetooth アダプター、すべて問題ありません
  • USBケーブル、すべて間違っています。

デバイスは FTDI USB TTL シリアル ケーブルです

メーカーの商品ページはこちら

予測可能な速度が必要です。PC から何かを送信しますが、組み込みシステムの UART (受信バッファ) に0x00またはバイトが表示されます。0x80

これは、バイトを送信する C# ステートメントです...

115200 は機能しましたが、十分に高速ではありません。

これを 921600 bps 信号のように見せる必要があります。460800 bps で十分でしょう。多分。組み込みシステムのこのポートでフロー制御 (CTS/RTS) を使用しています。

これらの速度のいずれかを実行するために、C# を使用して UART を取得する方法はありますか? どのように ?

0 投票する
3 に答える
9738 参照

c - ユーザー空間 Linux C コードでの USB シリアル書き込み転送のバッファー/パケット/ペイロード サイズの取得

事前にお詫び申し上げます。ここですぐに回答を受け入れることはできません。問題が発生している間に、これを書き留めておきたいと思いました...

簡単に言うと、Linuxでユーザー空間Cコードを使用してUSBシリアルポートへの書き込みを開始すると、3つの異なるバッファーサイズを観察できます-問題は、ユーザー空間Cからこれらすべてのサイズを取得したいということですコード自体。


たとえば、私は FTDI FT232 チップを搭載した Arduino Duemillanove を持っているとしましょう - PC からの USB/シリアル接続からの受信バイトを読み取り、それらを破棄するようにプログラムされています。このデバイスをシステムに接続すると (Ubunty 11.04 Natty でこれを行いました)、次のことを確認できますtail -f /var/log/syslog

これにより、最初に、デバイスを処理するためにドライバー (カーネル モジュール)がフック/ロードされていることがわかりますusbserial。これらは、本質的にOSの観点からシリアルポートftdi_sioと呼ばれるファイル(デバイスノード)を作成します。また、デバイスのエンドポイントに起因する 64 バイト/dev/ttyUSB0があることもわかります。MaxPacketSizeMaxPacketSize を介してクエリを実行することでも取得できますlsusb

/dev/ttyUSB0ここで、次の C プログラムを使用してデバイス ノードに書き込みたいとしますtestusw.c

このプログラムは、意図的に 1 回の呼び出しで大量のデータを書き込みます。何が起こっているのかを確認するために、まず Linux の機能を介して USB URB リクエストをキャプチャしましょう。つまりusbmon、1 つのターミナルで次のコマンドを実行します。

...そして、testusw をコンパイルして実行した後、別のターミナルで次の情報を取得します。

(testusw上記の呼び出しは Arduino をリセットする可能性があることに注意してください)。の後testusw、最初のターミナルに戻り、+でcatプロセスを中断できます。ログファイルが残っています。このログファイルはVirtual USB Analyzerで開くことができます:CTRLCtestusw.2u.mon

...そして、次の視覚化を取得します。

vusb-analyzer.png

「EP2 OUT」に示されている 2*9 = 18 個の URB 要求が書き込みを実行し、それぞれ 0x0100 = 256 バイトを運ぶことに注意してください。上記の「書き込まれたバイト数」で報告されているように、合計で 18*256 = 4608 バイトが書き込まれましたtestusw。また、EP1 IN のデータを無視します (これは、私の Arduino コードが送信しているジャンクであり、「ステータス: -2」エラーで終了します)。


したがって、次のことを確認できます。

  • C プログラムから、100000 バイトの書き込みを開始します
  • その結果、4608バイトのみが書き込まれ、事実上、最初のバッファー サイズとして機能します。
  • usbmon256次に、このチャンクがそれぞれバイトの 18 個の URB 要求にシーケンス化されていることを報告します
  • 最後に、MaxPacketSize は、各 URB 要求が (おそらく) 64USB ワイヤ上のバイトの (4) パケットに順序付けられていることを示しています

実際には、3 つのバッファー サイズ4608256あり64ます。Serial HOWTO: Serial Port Basics: 4.7 Data Flow Pathに記載されている内容と同様です。バッファ:

それで、私の質問は次のとおりです。これらのバッファ サイズは、ユーザー空間の C コード自体からどのように取得できますか?ただし、/dev/ttyUSB0唯一の入力パラメータとしてデバイス ノード パスからのみ取得できますか?

popenシステムコマンドを介して外部プログラムを実行し、出力を解析しても問題ありません。たとえば、 MaxPacketSize を介して取得できますlsusb -v -d 0403:6001 | grep MaxPacketSizeが、それにはベンダー/製品 ID が必要であり、情報の一部のみが device node path である場合、それを取得する方法がわかりません/dev/ttyUSB0

それ/dev/ttyUSB0が本質的にシリアルポートとして扱われることを考えると、経由でクエリをstty実行すると何かが提供されると思いましたが、バッファサイズに関連するものは何も表示されません:

udevadmまた、デバイス ノード パスに関連するデータのクエリに使用できることもわかってい/dev/ttyUSB0ます。

...しかし、やはり、遭遇したバッファサイズに関連するものはあまり見られません。

これをまとめるために、もう一度質問します。ユーザー空間の C アプリケーションからの USB シリアル書き込み転送に関連する、遭遇したバッファー サイズを取得できますか? もしそうなら - どのように?

ご回答ありがとうございます。
乾杯!

0 投票する
2 に答える
1512 参照

java - シリアルポート USB への Java 書き込みバイト

以下に、シリアル USB ポートに送信するコードを示します...動作していましたが、動作しません! 間違った文字列が送信された場合、akber()関数は終了します...

私が送信した場合akber("1.0.0.0.1.5")- それは完全に動作します,

送信akber("23.0.128.0.0.5")しても機能しません...

以下のコードを参照してください


関数から呼び出されます:

「データ」文字列の数字の任意の組み合わせで動作する必要があるため、それらを正しいタイプのバイトに変換し、ポートに書き込みます...それは私のコードではなく、よくわかりませんが、まだ修正する必要があります:-)

0 投票する
1 に答える
916 参照

c# - 例外の後、SerialPort が存在しない

USB COM ポート経由で通信するために C# の SerialPort クラスを使用しています。SerialPort は正常に開き、例外が発生するまで正常に動作します。アプリケーションからポートを使用しようとすると例外が発生した後、「ポート 'COM6' が存在しません」という別の例外が発生します。アプリケーションを閉じたり、Visual Studio を再起動したりした後も例外が発生し続けます。ポートを元に戻す唯一の方法は、コンピューターを再起動することです。

誰かがこの問題を見て、それを回避する方法を知っていますか? これをもっと丈夫にする必要があります。

0 投票する
1 に答える
3627 参照

linux - 全二重通信用の USB - シリアル アダプタ

シリアル ポート付きのモデムを持っていますが、PC にはシリアル ポートがありません。そこで、下の写真のようなアダプターを購入しました。モデムが送信モードに切り替わると、何かを送信できますが、受信モードに戻ることはできず、データ ライトが赤くなります。そのようなアダプターはこの障害を引き起こす可能性がありますか? 私は全二重などのこれらの通信に精通していません。

ここに画像の説明を入力

0 投票する
2 に答える
1479 参照

c++ - USB to RS422 コネクタが接続されている COM ポートの名前を認識するロジック (Windows アプリケーション用)

USB から RS422 へのコンバーターを介してシリアル ポートにデータを書き込むアプリケーションがあります。この変換ケーブルは、USB ハブを介して PC に接続します。私が直面している問題は、アプリケーションを実行している PC を変更するたびに、COM ポートの名前が変わることです。そのため、コードでこれを変更し、コードを再コンパイルしてアプリケーションを実行する必要があります。現在、シリアルポートを初期化するために使用しているコードは次のとおりです。

ここでは、COM ポートの名前だけに言及しています。COM ポートの状態を知り、コンバーターが接続されている COM ポートをオンザフライで認識する API があるかどうかを知りたいですか?

0 投票する
2 に答える
1840 参照

c++ - C++ で Arduino を自動検出 (Windows)

接続されているすべての arduino の COM ポート番号を自動的に検出する C++ プログラムを作成しようとしています。

利用可能なすべての COM ポート デバイスのリストを取得できることは既にわかっていますがHKLM/HARDWARE/DEVICEMAP/SERIALCOMM、そこでリッスンしているデバイスに関する情報はありません。たとえば、GUID またはデバイスの説明を取得して、どちらが Arduino であるかを検出する方法はありますか? 私が見る唯一の他の方法は、すべてのポートに何かを送信して、以前に定義された応答をリッスンすることです。回答ありがとうございます:)

編集: コンパイラと MinGW として g++ を使用していることに言及する必要があると思います。syam は、Arduino COM ポートを自動検出する方法を教えてくれました。これは私が望むものを達成しているようですが、C#で書かれており、純粋なWin32が必要な場合は.Net固有のAPIを使用しています.

0 投票する
1 に答える
898 参照

linux-device-driver - 純粋なデータでのマルチチャネルシリアル USB の読み取り

シリアル USB ケーブルを介してコンピュータに接続している 8 チャネル ADC チップからのマルチチャネル シリアル データがあります。これらの個別のチャネルを Pure Data で使用したいのですが、pd_comport オブジェクトがマルチチャネル シリアル データを読み取れません。Pd のディスカッション フォーラムを精査しましたが、これを行う方法については言及されていません。どうすればそれについて行くことができるかについて何か考えはありますか?

0 投票する
1 に答える
596 参照

android - 警告: UsbSerialLibrary.apk が見つかりませんでした

私はUSBシリアルに取り組んでいます。USBからデータを読み取るNexusを作りたいです。

それを行うためのサンプルプロジェクトが見つかりました。ここ

それで、私はプロジェクトを複製し、Eclipseに準拠しました。すべて正常に動作しますが、この警告が表示されたので、USB をシリアル ポートで Nexus に接続しようとしました。しかし、それは私のUSBを見つけることができません。多分それは警告のためかわかりません。

検索していくつかの推奨事項を見つけましたが、うまくいきません。

さらに、USB の製品 ID とベンダー ID を xml ファイルに追加しました。

それを見つけるのを手伝ってくれませんか?

ここに画像の説明を入力

少し早いですがお礼を!