Enabling FX3 Only for USB 3.0 Applications – KBA219491

Version: **

 

Question:

How do you enable only the USB 3.0 functionality in the FX3 device?

 

Answer:

USB 3.0 consists of both super-speed lines (SS_TX_P, SS_TX_M, SS_RX_P, and SS_RX_M) and high-speed lines (DM and DP). Some designs may use the FX3 device in USB 3.0 mode alone; that is, only super-speed lines are used by the FX3 and high-speed lines are used by another controller. For example, Cypress USB 3.0 hub controllers, CYUSB3328 and CYUSB3326, have a SharedLinkfeature. This enables the USB 3.0 port to be split into an embedded super-speed port and a standard USB 2.0 port. To connect the FX3 to the embedded USB 3.0 port, it should be programmed such that it operates only in USB 3.0 and does not fall back to USB 2.0. There can be other applications besides SharedLink where this may be useful. This article addresses the implementation of enabling only the USB 3.0 functionality in the FX3 application firmware.

 

The boot options for FX3 are documented in AN76405. When FX3 is configured for the USB boot option through PMODE [2:0] = Z11, it will appear as a Cypress USB bootloader device, which can be only operated in USB 2.0 mode. Because there is no D+/D- associated with the embedded super-speed port, the FX3 cannot be detected in the host. In this scenario, we cannot program the application firmware to the FX3 through USB. Therefore, it is mandatory to use other boot options instead of USB.

 

Be cautious when using the boot options: I2C boot with USB fallback and SPI boot with USB fallback. In these boot options, FX3 will appear as a USB 2.0 bootloader device in the following scenarios:

  • I2C or SPI address cycle or data cycle error
  • Invalid signature in FX3 firmware image
  • Invalid image type

After starting the USB device mode driver using the CyU3PUsbStart API, registering the USB call back requests and USB descriptors with the USB driver, follow these steps in the application firmware to enable USB 3.0-only functionality in FX3.

     1. Disable the USB 2.0 connection using the CyU3PUsbControlUsbSupport API before calling the CyU3PConnectState API.

     2. Call the CyU3PConnectState API repeatedly to retry the USB 3.0 connection in case of failure. Refer to the FX3 API Guide for more details about these APIs. The code snippet of the steps is as follows:

 
/*Disable the USB 2.0 connection*/
CyU3PUsbControlUsb2Support(CyFalse);
do
{
/* Connect the USB Pins with super speed operation enabled. */
apiRetStatus = CyU3PConnectState(CyTrue, CyTrue);
if (apiRetStatus != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (4, "USB Connect failed, Error code = %d\n", apiRetStatus);

}

else
{
CyU3PDebugPrint (4, "USB Connect passed, Error code = %d\n", apiRetStatus);
}
}while(apiRetStatus != CY_U3P_SUCCESS);