FX3/CX3/FX3S/SD3/SD2 USB工作速度相关问题 - KBA219491
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)和高速信号(DM和DP)组成。一些设计会仅在USB3.0模式使用FX3,也就是,FX3只使用超高速信号,高速信号由另一个控制器使用。比如,赛普拉斯USB 3.0 集线器控制器,CYUSB3328和CYUSB3326,有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不能检测到主机端。在这种情况下,我们不能通过USB向FX3编程。因此,必须要使用USB以外的其他启动方式。
当使用以下启动选项时请注意:具有USB后备启动的I2C启动以及具有USB后备启动的SPI启动。在这些启动选项中,FX3会在如下情况下枚举为USB 2.0 引导设备:
- I2C或SPI地址周期或数据周期错误
- FX3固件镜像的签名无效
- 镜像类型无效
在使用CyU3PUsbStart API函数启动USB设备模式驱动程序,使用USB驱动注册USB回调函数请求和USB描述符后,在固件中使用如下步骤启用FX3仅工作于USB 3.0的功能。
- 在调用CyU3PConnectState API之前调用CyU3PUsbControlUsbSupport禁用USB2.0连接。
- 为了防止失败,反复调用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时两个参数都为CyTrue,FX3设定为在超高速模式下建立USB连接。如果它尝试进入超高速连接失败三次,他会回退到USB2.0模式。当USB2.0连接时,设备会选择主机支持的最快速度,大多数情况下都是高速。如果主机仅支持全速模式,它会在全速模式下连接。这也适用于FX3设备的USB 2.0版本: FX2G2(CYUSB2014)和SD2(CYUSB2024和CYUSB2025)。
如果你只想要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.0或USB 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);
}
- 标记:
- enumeration
- full speed
- fx3
- high speed
- only full-speed
- only high-speed
- only usb 3.0 functionality
- superspeed
- usb 3.0
- 仅 usb3.0 模式
- 仅全速模
- 仅高速模式
- 式
- 超高速