Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

Data sent from Host over USB is not Committed to GPIF configured as Slave FIFO in FX3 – KBA223338

Data sent from Host over USB is not Committed to GPIF configured as Slave FIFO in FX3 – KBA223338

Community-Team
Employee
Employee
50 questions asked 10 questions asked 5 questions asked

Version: **

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

Question:

Why are data packets sent from Cypress Control Center/ Custom Host Application not committed to GPIF interface?

Answer:

Consider the following scenario for USB 3.0:

  • Consider an AUTO DMA channel configured as below:

dmaCfg.size  = 16384;                             //Buffer size is 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

  • In this configuration, the buffer would be committed to GPIF when any of the following conditions are met:
  1. Entire 16 KB buffer is filled by USB.
  2. A partial packet is received from USB (Note: When this happens the amount of data filled in the buffer will not be a multiple of 1024 bytes for USB 3.0 and 512 bytes for USB 2.0).
  3. A zero-length packet is received from USB.

So, design your host application considering these three conditions:

For instance, if OUT transfer needs to be made with X bytes, then:

  1. If X < 16 KB and (X % 1024) != 0, then on completion of X bytes nothing needs to be done.
  2. If X == 16 KB, then on completion of X bytes nothing needs to be done.
  3. If X > 16 KB, then let Y = (X % 16 KB). Now:
    i) If Y == 0, then on completion of X bytes nothing needs to be done.

        ii) If Y < 16 KB and (X % 1024) == 0, then on completion of X bytes, a zero-length packet must be sent so that the buffer in the device gets committed to GPIF.

  • To send a zero length packet, call the XferData() API with ‘len’ parameter set to zero.

  For the usage of XferData(), see the API Guide available in C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\library  after installing FX3-SDK

960 Views
Contributors