1

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について、とても勉強になりました!

4

3 に答える 3

1

USBデバイスがどのモードで動作するかを実際に確認する必要があります。これを行うには、デバイスマネージャを開き、[表示]->[接続によるデバイス]に移動します。

次に、デバイスツリーをUSBデバイスに折りたたむ必要があります。これは、「標準XYZUSBホストコントローラー」の1つの背後にあります。

XYZを使用すると、高速かフル/低速かを判断できます。XYZが「EnhancedPCI to USB」の場合、デバイスは実際に高速480 MBit/sで動作します。ただし、上位レベルのホストコントローラーが「OpenHCDUSB」またはその他のもの(UHCIを使用している可能性があり、ここにはIntelボードはありません)の場合、デバイスは最大12 MBit/sのフルスピードで動作します。多くの「USB2.0」マイクロコントローラはフルスピードのみをサポートし、ハイスピードはサポートしていません。

アップデート

次の場合、デバイスはフルスピードで動作します。

  • 間にUSB1.1ハブがあり、高速で話すことができません
  • デバイスは、それ自体がフルスピードでしか通信できません。
于 2011-05-01T22:33:28.770 に答える
1

Microsoft の公式ドライバーである WinUSB を使用してみてください。役立つと思います。また、 Jan Axelson の Web サイトで使用方法の例を見つけることができます。特に、このページでは WinUSB を扱っています。補足説明として、LibUSB でさえ WinUSB に依存しています。

HID、CDC など、あなたのラボ デバイスはどのタイプですか? バックエンド デバイスにも依存するためです。超高速は期待できないHID(マウス、キーボード)です。

于 2011-04-24T08:25:09.693 に答える
0

データ転送速度はどのように計算しますか?

  1. データ転送速度の計算が正しくないか、
  2. データ転送を処理するスレッドの数は少なくなります。その結果、速度が遅くなります。

私は libusb-win32 ライブラリを使用しておらず、USB で詳細に作業したこともありませんが、これらのポイントは、本当の根本原因または問題がある場合にそれを見つけるのに役立つ可能性があります。

于 2011-04-21T07:39:33.870 に答える