Data loss in continuous data transfer

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

cross mob
Anonymous
Not applicable

 Hi

   

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

0 Likes
3 Replies
Anonymous
Not applicable

 can't see the attachment,upload again

0 Likes
Anonymous
Not applicable

 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.

   

 

   

Thanks

   

Nikhil

0 Likes
Anonymous
Not applicable

 Hi,Nikhil

   

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.

   

Thanks!

   

KIKI

0 Likes