1

HID として構成された SiLabs C8051F320 を使用して、ADC データ (64B または 32B レポート) を PC にストリーミングしています。私は HID を SiLabs のサンプル コードに基づいており、bInterval = 1 で、エンドポイント 1 (EP1) とエンドポイント 2 (EP2) を比較しています。

C8051F320 のデータシートによると、エンドポイントが分割モードの場合、EP1 は 64B で、ダブル バッファリングされていない場合、EP2 は 128B です。EP1 は、ダブル バッファーでない場合は 64B、ダブル バッファーの場合は 32B です。EP2 は、ダブル バッファリングの有無にかかわらず 64B です。ADC データはサンプルあたり 2 バイトであるため、64B レポートでは 31 サンプル、32B レポートでは 15 サンプルがレポートごとに転送されます。

1) 非ダブルバッファ EP1 (レポートあたり 64B) は 22.5kSps ADC データを適切にストリーミング 2) ダブルバッファ EP1 (レポートあたり 32B) は 11.5kSps ADC データを適切にストリーム 3) 非ダブルバッファ EP2 (レポートあたり 64B) は22.5kSps ADC データを適切にストリーミングしない (最大サンプル レートを確認していませんでした) 4) ダブル バッファ EP2 (レポートあたり 64B) は 22.5kSps ADC データを適切にサンプリングします 5) サンプルでレポートを埋める時間は、 bInterval より長くなります。たとえば、bInterval が 1 ではなく 10 の場合、ダブル バッファリングされていない EP1 は 3kSps を適切にストリーミングします。

上記のシナリオは正しく見えますか? EP1 が EP2 より高速な転送を可能にするのはなぜですか? レポートの入力時間を bInterval よりも長くする必要があるのはなぜですか?

4

1 に答える 1

1

レポートをサンプルで埋める時間は、bInterval よりも長くなければならないようです。

正しい: HID は割り込みタイプのエンドポイントを使用し、bInterval ミリ秒ごとに 1 つのレポートを転送できます。これにより、1 秒あたり 64 バイト * 1000 Hz = 64000 バイトで最大データ レートを計算できます。サンプルが 2 バイトの場合、最大サンプリング レートは 32kHz になります。

EP1 が EP2 より高速な転送を可能にするのはなぜですか?

プログラミング エラー以外に、この動作の理由はわかりません。

注: HID プロトコルは、ストリーミング データには適していません。バルク タイプのエンドポイントを使用すると、はるかに高いデータ スループットが可能になります。

于 2013-03-01T18:32:32.213 に答える