USB接続を介してカスタムメイドのラボデバイス(小さなハードウェアのもの)と話しています。ラボ デバイスから最大速度でデータを取得するにはどうすればよいですか?
ホストは Windows XP マシンで、Visual Studio で libsub-win32 を使用して C コードを実行しています。小さなハードウェアが大量のデータを収集します。ホストはこのデータを要求してから読み取ることができます。すべてがうまく機能しています。気になるのは速度です。大まかな見積もりは 1Mbit/s であり、これは USB2 がサポートする 480 Mbit/s にはほど遠いものです。デバイスは、少なくともその速度でデータを送信できる必要があります。私は USB も libusb-win32 もほとんどまたはまったく経験していませんが、それらについて読んでみました。USB通信設定をどこでどのように変更するかわかりませんが。仕様では、高速バスにマイクロフレームと呼ばれるものがあるようです。それらをどのように使用できますか?
必ずしも libusb-win32 ライブラリを使用する必要はありません。他におすすめはありますか?
現在の実装に関する詳細: 上記のように、通信には libusb-win32 を使用します。すべての初期化は、ダウンロードに含まれる小さな例からコピーされます。
usb_init();
...
usb_open();
usb_set_configuration(...);
usb_claim_interface(...);
次に、(usb_bulk_write(...) と usb_bulk_read(...) を使用して) ラボ デバイスに話しかけ、そのデータを私と共有するよう説得します。512バイトのチャンクでデータを提供します。このような各チャンクは、usb_bulk_read(...) を使用して読み取られます。
2011 年 4 月 27 日編集: Full Speed を使用しているように見えますが、High Speed は使用していません。どうすれば高速に乗れますか?USB 記述子ファイルのパラメーターが間違っていませんか? (はい、USB2.0 を使用しており、デバイスは高速をサポートする必要があります。)
編集 2011 年 5 月 17 日: winUSB を使用して通信を実装しました (.inf ファイルと c++ プログラムを作成しました)。WinUSB を使用する利点は、高速を使用しようとしているかどうかを教えてくれることです。それはありますが、まだ約 11+-2 Mbit/s を超える速度は得られません。なんで?
USB2.0 プロトコルによれば、コンピュータはフレーム マーカーの開始 (ミリ秒ごとに送信) を送信する必要があります。しかし、高速を使用する場合、「高速では 125us の長さ (1 ミリ秒あたり 8 マイクロフレーム) の「マイクロフレーム」を使用する」と表示されます。1 ミリ秒のフレーム番号付けとの対応は、各フレーム番号を 8 連続で繰り返すことにより、高速 SOF パケットで維持されます。マイクロフレーム。」私はこれをよく理解していませんが、マイクロフレームを十分に頻繁に送信しないことが問題になる可能性がありますか? プロトコルを理解している人は、私に教えてください! 自分のコンピューターで動作するかどうかに関係なく、その動作を理解したいです。
6月15日編集
問題解決: コンピューター側に変更を加えても、必要以上に通信が高速になることはありません (エンドポイントの数を変更せず、実際に USB2.0 接続を使用している場合)。ここでの問題は、非常に時間のかかる方法でメモリ領域を使用するプロセッサ コードにありました。これにより、この質問は一種の非質問になります。すべてのポインタと情報をありがとう。USBについて、とても勉強になりました!