We have an FX3 based design which we are running on a Windows 10 platform which has both an ASMedia 3.0 eXtensible Host Controller and an ASMedia 3.1 eXtensible Host Controller. On the ASMedia 3.0 xHCI, data will transfer but randomly hang (we cannot communicate with the FX3 over USB when this condition occurs). But on the ASMedia 3.1 xHCI controller, the FX3 will never hang/freeze. A few things to note:
- The FX3 firmware is based off the bulk synchronous slave FIFO example. The slave FIFO interface is driven by an FPGA.
- The hang/freeze only occurs on USB IN transactions. USB OUT transactions never fail on either of the ASMedia xHCIs. We done several hundred gigabytes worth of data transfers to the USB OUT endpoint with no failures and zero data errors.
- We have tried both the current Windows 10 (update) ASMedia driver (188.8.131.52) and what we believe is the latest version (184.108.40.206) with the same results.
- We have tried transferring different PC buffer sizes (Windows application buffer) from 1K to 16MB. Again, this only fails when transferring data from the FX3 device to the PC (IN transaction).
- Even though communication over USB is impossible, the FX3 is still live. Through the debugger, we can pause the software or set breakpoints. Since this is a self-powered device, we can move to a new USB port and enumeration and USB communication works fine until the next time the USB interface hangs/freezes.
- We have tried different DMA FIFO sizes from 1 KB to 32 KB.
- We have tried FIFO counts of 1 and 2.
- We have tried USB/DMA burst counts of 1 through 16.
- We have implemented both CyU3PUsbLPMDisable and CyU3PUsbSetLinkPowerState (CyU3PUsbLPM_U0) in our code.
- We have tried moving the EP to EP1, EP2, EP3, and EP6 with the same failure.
- The same results happens on a different computer.
- Our USB protocol analyzer shows no error, just the last USB IN transaction. Followed by a check of our other “application specific command” EP with an ERDY response. But again, communication over USB at this point is impossible.
- In the hung/frozen state, the FX3 slave FIFO interface has the FIFO full flag and the almost full flag asserted, so no new data can be sent from the FPGA to the FX3. It’s like all the DMA FIFOs got committed but since no data is being transferred over USB, no empty DMA FIFO is returned to the FPGA interface.
- Power management for the USB hubs and the CPU have been disabled.
- We have had this code base working on other USB 3.0 eXtensible host controllers for years with no issues.
- The hang occurs randomly. Sometimes the transfer hangs immediately and sometimes it hangs after 10 minutes of continuous transfers.
Thanks in advance,