cancel
Showing results for 
Search instead for 
Did you mean: 

Knowledge Base Articles

USBを介したホストからのデータ送信はFX3のスレーブFIFOとして構成されたGPIFでコミットされない - KBA223338 - Community Translated (JA)

GeethaP_31
Employee

USBを介したホストからのデータ送信はFX3のスレーブFIFOとして構成されたGPIFでコミットされない - KBA223338 - Community Translated (JA)

Community Translated by keni_4440091 Expert                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でコミットされます。
  1. 全ての16KBバッファがUSBで埋められている。
  2. 一部のパケットはUSBから受信される。(注意:これが起きた場合、バッファに埋められたデータの量はUSB 3.0では1024 バイトの倍数にはならず、USB 2.0では512 バイトの倍数になります。)
  3. ゼロ長パケットはUSBから受信される。

従って、これら3つの条件を考慮してホストアプリケーションを設計して下さい。

例えば、OUT送信がXバイトで作られる必要がある場合、下記のようになります。

  1. If X < 16 KB and (X % 1024) != 0, Xバイトが完了すると何も必要ありません。
  2. If X == 16 KB, Xバイトが完了すると何も必要ありません。
  3. 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ガイドを参照して下さい。

0 Likes
Version history
Revision #:
1 of 1
Last update:
‎Aug 10, 2020 04:09 AM
Updated by:
 
Contributors