2 Replies Latest reply on Jan 30, 2017 11:46 PM by userc_39169

    Cypress FX3 GPIF USB Bulk Out Transfer Rate



      I have a software built in C#. It bulks out a 16-byte data to an Fx3 device and the from start of Xfer() it measures the time until it returns true.
      I measured it to be 600 us. The FX3 contains the firmware of Asynchronous Slave Fifo for GPIF II.


      Next firmware is a loopback firmware from AN70983. I also used the same software to bulk out the 16-byte data and measure its time. The bulk out time is 50us-90us.

      My question is as follows:
      1. Why is the amount of bulk out from the Asynchronous Slave Fifo super slower than the loopback firmware?
      2. What are the possible ways I could boost the bulk out speed of the Asynchronous Slave Fifo for GPIF II Firmware?



        • 1. Re: Cypress FX3 GPIF USB Bulk Out Transfer Rate

          I suppose you are talking about one single Xfer, (not the entire loopback process). Asynchronous/synchronous/ bulkloop example should not cause any difference here. I suppose the USB interface which you have configured are all the same here, correct? You can only changing "what happens after the endpoint gets the data" (like loop it back or Asynchronous  slave fifo). As you are sending only 16 Bytes, so I don't think the DMA buffer size can be the issue. Have you tested with Cypress provided examples? (FX3 SDK example firmware: Bulkloop/slave fifo or any other, you host application control center/Streamer and check). It will be good if you can provide a hardware protocol trace to see what is happening on the USB bus. If we have this trace we can minutely analyze all the timings and the host-device communication. Also, can you try to send lager data  (equal to your DMA buffer size and report the observation)? 

          • 2. Re: Cypress FX3 GPIF USB Bulk Out Transfer Rate

            Good afternoon Nishant,

            Thank you for your inquries. Yes. I have tested with the examples provided by cypress.

            I will try to get back to you as soon as I have results. However, I have solved the problem with the large amount of time in performing a single bulk out.

            Upon endpoint initialization on my PC application, I performed an TimeOut = 16 and XferSize = 16. Afterwards, I reset the endpoints.

            I just performed an Endpoint Reset at the method that performs a bulk out. As a result, the PC application measured 50 us - 101 us with a single bulk out. However I will perform a test with larger amounts of data like 16kb.

            Best regards,
            Kevz Rabago