I have a CY8C5468AXI with 2 interrupt endpoints (in/out). Usually the communication over the endpoints works without any issues but occasionally it times out and stops working (timeout is 10 seconds). The only way I've found to fix this problem is to reset/reconnect the device. Since the PSoC is used to control motors and actuators, resetting/reconnecting isn't a viable solution. Any suggestions on how to prevent this problem or the cause would be greatly appreciated.
Here is some other information related to the problem:
- I am using the C# library and drivers provided by Cypress Suite USB 3.4.7. I am running 32-bit Windows 10 build 14393.
- For every request sent to the PSoC, a response is expected. Both are the same size as the max packet size set on PSoC which is 64 bytes. The endpoint interval is 1 millisecond. Only one request-response pair occurs at a time and is triggered every 50 milliseconds. Changing these periods from 1ms to 5ms and 50ms to 200ms does not make a difference.
- The communication usually times out first during a request. Any future requests or responses always times out afterward.
- The PC program that communicates with the PSoC cannot be closed when the USB is unresponsive, not even from the task manager. It can only be closed after PSoC reset/reconnect.
- The driver returns error code 0xC0010000 for UsbdStatus and 0xC0000120 for NtStatus, which suggest canceled I/O, but there is nothing in my code on PC or PSoC that explicitly does this. LastError returns 997 (pending IO).
- This problem occurs regardless of whether the PSoC is USB powered and externally powered. It still happens if no other external USB devices are attached to the PC and no motors/actuators are connected to the PSoC.
- Attempts to query USB information (VID, PID, device configuration, etc) are unsuccessful after this problem occurs, but it works before. I have tried using the C# library and Cypress USB Console.