3 Replies Latest reply on Mar 11, 2013 12:13 AM by userc_43522

    Data loss in continuous data transfer



      I'm now working on a FX3 firmware to implement  continuous data transfer.My FX3 device was interfaced to a FPGA in GPIF slave mode .The data was transfered from the FPGA to FX3 device then to my computer.


      In my firmware,I created one thread and one DMA channel.The DMA channel was an AUTO_MANY_TO_ONE channel between  the producer (two GPIF sockets) and consumer(a USB endpoint).The firmware is attached below


      In my application,I use the APIs in cyapi.lib to implement data read They are :BeginDataXfer() ,WaitForXfer(), FinishDataXfer()


      When I test the whole project ,there is always data loss. I don't know why

        • 1. Re: Data loss in continuous data transfer

           can't see the attachment,upload again

          • 2. Re: Data loss in continuous data transfer

             Hi KIKI


            The data loss could be because the host application isn't fast enough to keep up with the data rate.


            Please have a look at the streamer application source code available in the following path after FX3 SDK installation:


            C# version :C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.2\application\c_sharp\streamer


            CPP version: C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.2\application\cpp\streamer


            You could also try and use the same streamer application to read data from FX3 and see if there is a data loss occuring.


            Add the VID/PID in the source code of streamer to detect the FX3 running your firmware.







            • 3. Re: Data loss in continuous data transfer



              I've checked several times.When I set the data rate to 20MByte/s,there's still data loss.


              I set  the burst length to 16 (16KB per burst),and  found that the data lost in a discipline of every 16KB.


              I followed the example of  AN75779  http://www.cypress.com/?rID=62824 .I created  a DMA_TYPE_AUTO_MANY_TO_ONE channel .In this channel , the GPIF switch sockets(threads) via the data counter in GPIF state machine. The data counter was set to 8191(16KB,GPIF data bus is 16bit) as descriped in AN75779. It seemed that  the data loss happened at buffer boundry.Can you give some advices about this phenomenon.