With a breakpoint in the code I see WaitForXfer() function exiting with timeout since data arrive from FPGA at low speed.
The question is what do I have to do to reinitiate properly the Xfer : EndPoint abort ? PInvoke.WaitForSingleObject ? FinishDataXfer () ? Recall the WaitForXfer()? a mix of them ?
Cypress Doc is not clear at all when using the asynchronous IO methods...
If the FPGA is sending the data at a lower rate, I think you should wait for a long time. Please increase the timeout value of the WaitforXfer function and test.
Thanks Madhu but it will ot solve my problem since I may not know the rate of the data pushed by the FPGA which are application dependent (random events with high rate equ. to ~2Gb/s down to very low rate at 1Mb/s). My idea was to use the XferData() function (which work at full throughput) and to reinitiate transfer(s) if a timeout occurs until the user stop the application or a certain total number of bytes have been transferred.
So is there a way to reinitiate properly a XferData() after a timeout without losing data ?
For information, once timeout has occurred, I've tried to call again the XferData() with/without the Abort() function (despite it is explicitly written in the CyUSb prog. reference doc that the XferData() call Abort() in case of timeout) but no way, the XferData() will always return false after that!
I think i have an issue similar to yours. My CYUSB3014 is connected to my FPGA with a 16-bits GPIF interface and a PCLK signal. Any data rate above 32Mb/s will cause XferData()/FinishDataXfer() return false and get stuck, even if Abort() is called. Increasing timeout value doesn't help either. I don't know whether it's firmware's problem or not. Have you made any progress? Thanks.