we use USB3 re-drivers in our hardware setup to improve the overall signal quality on the USB3 links.
This works fine for USB3 but in case if we connect the host PC over a USB2 cable then the enumeration fails.
Our hardware setup is as following:
[Host PC] - [USB2 cable] - [TUSB501 USB3 re-drivers (RX,TX)] - [USB3 cable] - [FX3]
From firmware debug we can see that all USB related API functions (CyU3PUsbStart, CyU3PUsbSetDesc, CyU3PConnectState)
return success but the at the end no SETCONF or RESET event is detected.
After studying the FX3 TRM and TUSB501 datasheets (see below) we assume that the USB3 re-driver on the RX side (seen from FX3)
makes problems when the FX3 tries to detect the USB interface speed. The re-driver detects the FX3 RX receiver and enables
the terminations and output. On the other hand the FX3 turns on the USB3 PHY and starts the 3.0 receiver detection (2).
We assume that the USB3 receiver is always detected since re-drivers are active all the time. For that reason it waits forever on
USB3 enumeration packets and does not fallback to USB2.
We have the following questions:
1.) Is it possible that the USB2 enumeration is blocked because of our assumptions?
2.) Is a timeout implemented in the FX3 firmware to switch back to USB2 when 3.0 receiver is present but no enumeration USB3 happens
3.) Is there a possible FX3 firmware change to fix this issue?
From TUSB501 datasheet:
After power up, the TUSB501 periodically performs receiver detection on the TX pair. If it detects a SuperSpeed USB receiver,
RX termination becomes enabled, and the TUSB501 is ready to redrive.
The FX3 TRM lists a procedure that is used by the FX3 firmware for USB connection negotiation:
1. Wait for a valid VBus voltage (GCTL_IOPWR interrupt).
2. Turn on the USB 3.0 PHY to start 3.0 receiver detection.
a. If receiver detection succeeds, the LNK_LTSSM_CONNECT interrupt will be received. If this interrupt is received, the
device will proceed with enumeration in USB 3.0 mode.
3. If receiver detection fails, the LNK_LTSSM_DISCONNECT interrupt will be received. If this interrupt is received:
a. Turn off USB 3.0 PHY and turn on USB 2.0 PHY.
b. A USB 2.0 bus reset will be received as part of USB 2.0 connection startup.
c. The 3.0 PHY should be re-enabled on receiving the URESET interrupt that is triggered on a 2.0 bus reset. Both the 2.0
and 3.0 PHYs will be active at this time.
d. If the 3.0 receiver detection succeeds (LNK_LTSSM_CONNECT):
i.Turn off the USB 2.0 PHY.
ii.Proceed with enumeration as a USB 3.0 device.
e. If the 3.0 receiver detection fails (LNK_LTSSM_DISCONNECT):
i.Turn off the USB 3.0 PHY.
ii.Check number of times that 3.0 receiver detection has failed. If this count is greater than 3:
4. Proceed with enumeration as a USB 2.0 device.
5. There is no need to attempt 3.0 enumeration on any further bus resets.