一. USB2.0识别方式
USB2.0向下兼容USB1.0和USB1.1,分为低速、全速和高速三种模式。
1. 全速和低速识别
根据规范,全速和低速通过设备端的上拉电阻进行区分。当设备插入HUB或上电时,有上拉电阻的那根数据线就会被拉高,HUB根据D+/D-的电平判断所挂载的是全速设备还是低速设备。
图1 全速/低速USB设备的连接
2. 高速USB的识别
USB全速、低速识别很简单,但USB2.0高速设备无法仅依靠数据线上拉电阻位置就能识别。
高速设备初始是以一个全速设备的身份出现,即和全速设备一样,D+线上有一个1.5K的上拉电阻。USB2.0的HUB先把它当做一个全速设备,然后HUB和设备通过一系列握手信号确认双方的身份。当然,对速度的检测是双向的。高速HUB需要检测所挂上来的设备是高速、全速还是低速,高速设备也需要检测所连上的HUB是USB2.0还是USB1.X的。如果双方都是高速,就切换到高速模式工作,否则,还以全速模式工作。
图2 高速USB的协商过程
HUB检测到有设备插入或上电时,向主机通报,主机发送Set_Port_Feature请求让HUB复位插入的设备。HUB通过驱动数据线到复位状态SE0,D+/D-均为低电平,并持续至少10ms。
高速设备看到复位信号后,通过内部的电流源向D-线持续灌大小为17.78mA电流。因为此时高速设备的1.5k上拉电阻还未撤销,在HUB端,全速/低速驱动器形成一个阻抗为45Ω的终端电阻,两电阻并联后仍是45Ω左右的阻抗,所以在HUB端看到一个约45Ω*17.78Ma=800mV的电压,这就是Chirp K信号。该信号持续时间1~7ms。
在HUB端,虽然下达了复位信号,并一直驱动着SE0,但USB2.0的高速接收器一直在检测Chirp K信号。如果没有Chirp K信号看到,就继续复位操作,直到复位结束,之后在全速模式下操作。如果只是一个全速HUB,不支持高速操作,那么该HUB不理会设备发送的Chirp K信号,之后设备也不会切换到高速模式。
设备发送的Chirp K信号结束后100us内,HUB必须开始回复一连串的KJKJKJ…系列,向设备表明这是一个USB2.0的HUB。这里的KJ序列是连续的,中间不能间断,而且每个K或者J的持续时间在40~60us。KJ序列停止后的100~500us内结束复位操作。HUB发送Chirp KJ序列的方式和设备一样。
设备检测到6个HUB发出的Chirp信号(3对KJ序列)后,必须在500us内切换到高速模式。切换动作包括:
- 断开1.5K的上拉电阻
- 连接D+/D-的高速终端电阻,实际上就是全速/低速差分驱动器
- 进入默认的高速状态
执行动作1)和2)后,USB信号线上看到的现象就发生变化了:HUB发出的Chirp KJ序列幅值降到了原先的一半,400mv。这是因为设备端挂载新的终端电阻后,配上原先HUB端的终端电阻,并联后的阻抗是22.5Ω。以后高速操作的信号幅值就是400mv,而不像全速/低速那样的3V。至此,高速设备与USB2.0 HUB握手完毕,进行后续的高速通信。
图3 测试波形
二. USB3.0识别方式
USB3.0的接口比USB2.0多了5根线,这5根线分别是SSGND、SSRX+/-和SSTX+/-,即屏蔽地、发送差分对和接收差分对。图4是USB3.0的连接示意图,在靠近TX源端串有75~200nF电容。
图4 USB3.0信号连接示意图
USB主机和设备通过电缆连接后,会在USB主机和设备端的接收线上产生一个等效下拉电阻R_Term(其范围在18~30Ω,由SSRX+/-上各一个50Ω的等效下拉电阻并联而成)。
图5 Rx Detect
设备连接前的充放电时间常数T=R_Detect*C_Parasitic
设备连接后的充放电时间常数T=(R_Detect+R_Term)*(C_AC+C_Parasitic)
显然,接入设备后,充放电时间常数会大大增大,根据充放电时间就可以判断有无设备插入。
另外,接入R_term,会对R_Detect产生分压的左右,电压会下降。
USB规定,下行端口需要每隔100ms打一次Rx Detect,来检测Deivce在不在。
三. 参考资料
- 全速USB和高速USB的识别过程分析-腾讯云开发者社区-腾讯云
- USB 3.0 Rx Detect之超速U盘的识别_usb3.0识别原理过程-CSDN博客
- USB3.0 之 RX Detect 的基本原理_usb3.0识别原理过程-CSDN博客
- USB2.0和USB3.0识别方式