FX3/CX3/FX3S/SD3/SD2 USB工作速度相关问题 - KBA219491

Version 2

    Author: YiZ_31           Version: **

     

    FX3系列外围控制器支持超高速,高速和全速传输模式。一些设计或许会只使用FX3的全速,高速或超高速其中一种模式。这篇KBA描述了固件中需要作何改动使FX3只工作在全速,高速或超高速模式下。

     

    1. 如何使FX3仅工作在USB3.0(超高速)模式下?

    答案:USB 3.0由超高速信号(SS_TX_P, SS_TX_M, SS_RX_P SS_RX_M)和高速信号(DMDP)组成。一些设计会仅在USB3.0模式使用FX3,也就是,FX3只使用超高速信号,高速信号由另一个控制器使用。比如,赛普拉斯USB 3.0 集线器控制器,CYUSB3328CYUSB3326,有SharedLink功能。这使USB3.0口分为一个内置的超高速口和一个标准USB 2.0口。为了把FX3接入内置的USB 3.0口,需要将其编程以使其只在USB3.0下工作并且不会退回到USB 2.0。除了SharedLink以外,也可能有其他应用需要用到这个功能。这个问题解决了在FX3的固件中仅使用超高速功能的问题。

     

    FX3的启动选项在AN76405中有详细描述。当FX3通过PMODE[2:0]=Z11被配置为USB启动时,它将被枚举为赛普拉斯USB引导设备并且只能工作在USB 2.0模式下。因为没有D+/D- 与内置的超高速口相连,FX3不能检测到主机端。在这种情况下,我们不能通过USBFX3编程。因此,必须要使用USB以外的其他启动方式。

     

    当使用以下启动选项时请注意:具有USB后备启动的I2C启动以及具有USB后备启动的SPI启动。在这些启动选项中,FX3会在如下情况下枚举为USB 2.0 引导设备:

    • I2CSPI地址周期或数据周期错误
    • FX3固件镜像的签名无效
    • 镜像类型无效

     

    在使用CyU3PUsbStart API函数启动USB设备模式驱动程序,使用USB驱动注册USB回调函数请求和USB描述符后,在固件中使用如下步骤启用FX3仅工作于USB 3.0的功能。

    1. 在调用CyU3PConnectState API之前调用CyU3PUsbControlUsbSupport禁用USB2.0连接。
    2. 为了防止失败,反复调用CyU3PConnectState尝试USB3.0连接。

    参考FX3 API Guide获取更多关于这些API的信息。代码片段如下:

    /*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);

     

    2.如何在FX3设备中启用 USB 2.0(高速或全速)功能?

    当你调用CyU3PConnectState API时两个参数都为CyTrueFX3设定为在超高速模式下建立USB连接。如果它尝试进入超高速连接失败三次,他会回退到USB2.0模式。当USB2.0连接时,设备会选择主机支持的最快速度,大多数情况下都是高速。如果主机仅支持全速模式,它会在全速模式下连接。这也适用于FX3设备的USB 2.0版本: FX2G2CYUSB2014)和SD2CYUSB2024CYUSB2025)。

    如果你只想要USB2.0模式,在固件中作如下改动:

    在使用CyU3PUsbStart API函数启动USB设备模式驱动程序,使用USB驱动注册USB回调函数请求和USB描述符后,使用CyU3PConnectState API禁用超高速功能。

     

    代码片段如下:

    /* Connect the USB Pins with super speed operation disabled. */

    apiRetStatus = CyU3PConnectState(CyTrue, CyFalse);

            if (apiRetStatus != CY_U3P_SUCCESS)

            {

                CyU3PDebugPrint (4, "USB Connect failed, Error code = %d\n", apiRetStatus);

                CyFxAppErrorHandler(apiRetStatus);

            }

     

    3.如何使FX3仅工作在全速模式下?

    USB 2.0模式下的FX3设备使用主机支持的最高速模式,大多数情况下都是高速。为了使FX3与支持USB 2.0USB 3.0的主机建立全速连接,采取如下措施:

     

    在使用CyU3PUsbStart API函数启动USB设备模式驱动程序,使用USB驱动注册USB回调函数请求和USB描述符后,在固件中进行如下修改:

     

    1.   在调用CyU3PConnectState API函数前使用CyU3PUsbForceFullSpeed API进行强制全速模式操作

    2.   使用CyU3PConnectState禁用超高速操作。

     

    参考FX3 API Guide 获取更多关于这些API的信息。代码片段如下:

               /* Enable the Forced Full Speed Operation */

    CyU3PUsbForceFullSpeed(CyTrue);

               /* Connect the USB Pins with super speed operation disabled. */

    apiRetStatus = CyU3PConnectState(CyTrue, CyFalse);

               if (apiRetStatus != CY_U3P_SUCCESS)

               {

                 CyU3PDebugPrint (4, "USB Connect failed, Error code = %d\n", apiRetStatus);

                 CyFxAppErrorHandler(apiRetStatus);

                }