2 Replies Latest reply on Jul 5, 2019 10:39 PM by GuTa_4286841

    USB streamerexample device minimum transfer size


      In Cypress USB streamer example, when I use USB control center, select bulkin endpoint, then data transfer, transfer data in, for bytes to transfer, anything that is not a multiple of 1024 will result in


      BULK IN transfer

      BULK IN transfer failed with Error Code:997


      For my own application, I want to do register read/write via USB to FPGA device in addition to streaming large amount of data. Is it possible to read/write data in multiple of 2*int32, instead of always asking for n*1024 bytes?


      If that is not possible, what's the alternative solution? Can I create another two end points, that has maximum package size set to 8 bytes?



        • 1. Re: USB streamerexample device minimum transfer size

          USB Bulk-in transfer can support any size of packets within the size of burst packets.


          I understand you are using an FX3 example project supporting the Cypress USB streamer application.

          I will use the USBBulkSourceSink (basic_example\cyfxbulksrcsink)


          To make an 8-Byte packet at the FX3 firmware, Modify the CyFxBulkSrcSinkDmaCallback() function as follows.

              if (type == CY_U3P_DMA_CB_CONS_EVENT)
                  /* This is a consume event notification to the CPU. This notification is 
                   * received when a buffer is sent out from the device. We have to commit
                   * a new buffer as soon as a buffer is available to implement the data
                   * source. The data is preloaded into the buffer at that start. So just
                   * commit the buffer. */
                  status = CyU3PDmaChannelGetBuffer (chHandle, &buf_p, CYU3P_NO_WAIT);
                  if (status == CY_U3P_SUCCESS)
                      /* Commit the full buffer with default status. */
                      status = CyU3PDmaChannelCommitBuffer (chHandle, 8 /*buf_p.size*/, 0);
                      if (status != CY_U3P_SUCCESS)
                          CyU3PDebugPrint (4, "CyU3PDmaChannelCommitBuffer failed, Error code = %d\n", status);
                      CyU3PDebugPrint (4, "CyU3PDmaChannelGetBuffer failed, Error code = %d\n", status);
                  /* Increment the counter. */

          Just change the second argument of the function call CyU3PDmaChannelCommitBuffer()


          When you click the "Transfer Data-In" button you can see an 8-Byte packet is sent from FX3.


          Please note that you will see six 16kB packets at first which is filled by the function CyFxBulkSrcSinkFillInBuffers()




          • 2. Re: USB streamerexample device minimum transfer size



            Thank you very much!


            I will try it out next week.