CyU3PUsbSendEP0Data with FX3 SDK Version 1.3.3 | Cypress Semiconductor
CyU3PUsbSendEP0Data with FX3 SDK Version 1.3.3
we recently switch from SDK Version 1.3.1 to 1.3.3 and found that our FX3 USB Device Application when connected at USB High Speed, each call to CyU3PUsbSendEP0Data() takes 20 ms which previously took well below 1 ms.
The device has two IN Data Endpoints (one Isochronous and one Interrupt) and we traced the problem down to a modification in the implementation of CyU3PUsbSendEP0Data() which now makes a call to CyU3PUsbSuspendInEpChannels (), which tries to suspend all IN Endpoints before doing the DMA for Endpoint 0.
It seems the call to CyU3PDmaChannelSuspendUsbConsumer() with waitOption set to 10 always needs 10 ms to complete.
What can be done to prevent this problem? Is it really necessary to suspend Interrupt and Isochronous IN Endpoints while doing EP0 data transfers?
The Cypress EZ-USB FX3 SDK Release Notes Version 1.3.3 mentions one point:Implemented a firmware solution to prevent data corruption due to concurrent BULK-IN and Control-IN transfers on a Hi-Speed link.
while the 1.3.3 firmware implementation in cyu3usb.c and cyu3channel.c suspends ALL IN endpoints, not just BULK.
Which kind of corruption can happen due to concurrent transfers?
What is the best workaround to make CyU3PUsbSendEP0Data() calls to work again as fast as before while having other IN Endpoints in an USB device? Would it be sufficient to suspend only BULK-IN endpoints?
Thanks for any help,