USBを介したホストからのデータ送信はFX3のスレーブFIFOとして構成されたGPIFでコミットされない - KBA223338 - Community Translated (JA)
- RSS フィードを購読する
- 新着としてマーク
- 既読としてマーク
- ブックマーク
- 購読
- 印刷用ページ
- 不適切なコンテンツを報告
Community Translated by keni_4440091 Version: **
Translation - English: Data sent from Host over USB is not Committed to GPIF configured as Slave FIFO in FX3 – KBA223338
質問:
サイプレスコントロールセンター/ カスタムホストアプリケーションから送信されたデータパケットは何故GPIFインターフェースでコミットされませんか?
回答:
USB 3.0の下記のシナリオを考えてみましょう:
- 下記のように構成されている車載DMAチャネルを検討してみます:
dmaCfg.size = 16384; //バッファサイズは16KB
dmaCfg.count = CY_FX_SLFIFO_DMA_BUF_COUNT_U_2_P;
dmaCfg.prodSckId = CY_FX_PRODUCER_USB_SOCKET; //Producer : USB
dmaCfg.consSckId = CY_FX_CONSUMER_PPORT_SOCKET; //Consumer : GPIF
- この構成で、下記のどの条件も満足している場合、バッファはGPIFでコミットされます。
- 全ての16KBバッファがUSBで埋められている。
- 一部のパケットはUSBから受信される。(注意:これが起きた場合、バッファに埋められたデータの量はUSB 3.0では1024 バイトの倍数にはならず、USB 2.0では512 バイトの倍数になります。)
- ゼロ‐長パケットはUSBから受信される。
従って、これら3つの条件を考慮してホストアプリケーションを設計して下さい。
例えば、OUT送信がXバイトで作られる必要がある場合、下記のようになります。
- If X < 16 KB and (X % 1024) != 0, Xバイトが完了すると何も必要ありません。
- If X == 16 KB, Xバイトが完了すると何も必要ありません。
- If X > 16 KB, then let Y = (X % 16 KB). 今:
i) If Y == 0, Xバイトが完了すると何も必要ありません。
ii) If Y < 16 KB and (X % 1024) == 0, Xバイトが完了すると、デバイスのバッファがGPIFにコミットされるように、ゼロ長パケットが送信される必要があります。
- ゼロ長パケットを送信するためには、ゼロに設定する「len」パラメータと一緒にXferData() APIをコールして下さい。
XferData()の使用方法に関しては、FX3-SDKをインストールした後、C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\libraryで入手できるAPIガイドを参照して下さい。