2012-04-19 17 views
1

私はC8051F320を使用しており、HIDサンプルファームウェア(BlinkyExampleなど)でファームウェアをベースにしています。ダブルバッファの理解

INレポートとOUTレポートはそれぞれ64Bの長さです(1つの64Bパケット)。

ADCを有効にして、10kSpsに設定しました。 ADCが割り込みするたびに、サンプルがアレイに格納されます。パケットを満たすのに十分なサンプルが取られると、INパケットが送信されます。

ソフトウェアは、返されるレポートの数をファームウェアに通知するレポートを送信します。

1)ファームウェアの例では、128BのEP1を使用しています。 EPをそれぞれINとOUT、64Bに分割します。

ファームウェアは、各INレポートの最初のサンプルを10kSpsでドロップします。 5kSpsでは正常に動作します。

2)EP1をダブルバッファーに変更しましたが、現在はわずか32Bです。それにもかかわらず、10kSpsデータのINレポートのストリーミング1000sは素晴らしいです(ソフトウェアでサンプリングされた正弦波のFFTによって確認されます)。

3)EP2を使用するようにファームウェアを変更しました。これは256Bの合計を持つため、分割とダブルバッファリングの場合は64Bになります。

a)ここでも、10kSpsで、各パケットの最初のサンプルが廃棄されます。どうして?それは5kSpsで正常に動作します。

実際には、ダブルバッファリングの仕組みを視覚化することはできません。サンプルレートがHID転送レートより速い場合、FIFOは関係なくオーバーフローします。ダブルバッファリングはどのように役立ちますか?しかし、ダブルバッファリングを有効にするためには、パケットサイズを半減する必要があります。

b)EP1からEP2への参照を切り替えながら、F3xx_USB0_Standard_Requests.cにこのコードがあります。DATAPTR =(符号なしchar *)& ONES_PACKET ;. char *のchar * =アドレスの設定は、私にとっては正しいとは思われません。私はそれをDATAPTR =(unsigned char *)ONES_PACKETに変更しました。いずれにせよ、違いはないようです。 0と1の配列は何をしますか?あなたのHID記述子に応じて、それははるかに遅くすることができます -

答えて

0

HID例のファームウェア

HIDは、フレームごとに一回、または1ミリ秒ごとに一度、最もでデータにを転送します割り込み型endpintsを、使用しています。これにより、約64000バイト/秒の正味データ転送速度が得られる。

さらにデータを転送する必要がある場合は、バルクまたはアイソクロナスのエンドポイントを使用してください。