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

Version 1

    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ガイドを参照して下さい。