1 Reply Latest reply on Nov 5, 2017 2:09 AM by srdr

    How to enable FX3/CX3 Only for USB 3.0 Application?

    srdr

      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 KBA addresses the implementation of enabling only the USB 3.0 functionality in the FX3 application firmware.

        • 1. Re: How to enable FX3/CX3 Only for USB 3.0 Application?
          srdr

          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

           

          • 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 of 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);