公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

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

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

ChaitanyaV_61
Employee
Employee
50 questions asked 25 likes received 25 sign-ins

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

            }

0 点赞
814 次查看
贡献者