4 Replies Latest reply on Jun 24, 2018 10:28 PM by vladimirostu_2251656

    FX3 USB3 Connect initialization

    vladimirostu_2251656

      Hello.

       

      Please, tell us how the communication and initialization of the device are going on USB3.

      For example: initial Hight speed features after detect connection Full speed device.

       

      How does it device recognize that it is connected to port USB3 or to port USB2?

       

      And how does the computer determine that the device USB3 is connected to its ports or USB2 device?

       

       

      Where it can be read?

      How does this happen in FX3 / CX3?

        • 1. Re: FX3 USB3 Connect initialization
          vladimirostu_2251656

          How function CyU3PUsbGetSpeed() inside?

          Is it macros?

          How it function detect type of connection (USB3 or USB2) ?

          • 2. Re: FX3 USB3 Connect initialization
            srdr

            The device detection happens based on the termination resistors put by the host (down stream device).

            There are different Rx terminations resistors for SuperSpeed signaling, high-speed and full-speed signalling.

             

            Here is the abbrevation of connected in the USB 3.0 Spec (Page no. 44).

             

            A downstream device is connected to an upstream device when it is attached to the upstream device, and when the downstream device has asserted Rx terminations for SuperSpeed signaling or has asserted the D+ or D- data line in order to enter low-speed, full-speed, or high-speed signaling.

             

            Here is the example for USB high speed and full speed device detection. But in USB SuperSpeed case, the device connection will happen in SuperSpeed mode itself. There is no switching (Full-Speed connection first then High-Speed connection) of the connection like High Speed case.

             

            • 3. Re: FX3 USB3 Connect initialization
              user_457566

              Look in the source files for the SDK.

               

              usb/cyu3usbpp.c and usb/cyu3usb.c contain the code that does the speed negotiation with hardware assistance. Search for "usbSpeed" and you'll find all the places where the actual speed state variable is touched. (Note that there's a glUibDeviceInfo.usbSpeed and an instance of state information at 0x40002000. You can mostly ignore the latter and focus on glUibDeviceInfo.usbSpeed and places and reasons it's being set.