USB2.0设备从全速模式到高速模式的识别过程及速率协商
USB设备在连接到USB主机后,主机第一时间对USB设备进行复位,且复位信号一般持续10ms以上,所以整个高速握手协议是在复位过程中完成的,并且是在复位信号完成之前。这是因为USB主机和设备在复位结束后,都必须确定自己的工作模式。所以说USB主机对设备的复位过程,包含了USB物理层USB识别和USB设备工作模式的过程。
hub检测到有设备插入/上电时,向主机通报,主机发送Set_Port_Feature请求让hub复位新插入的设备。设备复位操作是hub通过驱动数据线到复位状态SE0(Single-ended 0,即D+和D-全为低电平),并持续至少10ms。
高速设备看到复位信号后,通过内部的电流源向D-线持续灌大小为17.78mA电流。因为此时高速设备的1.5k上拉电阻还未撤销,在hub端,全速/低速驱动器形成一个阻抗为45欧姆(Ohm)的终端电阻,2电阻并联后仍是45欧姆左右的阻抗,所以在hub端看到一个约800mV的电压(45欧姆*17.78mA),这就是Chirp K信号。Chirp K信号的持续时间是1ms~7ms。
在hub端,虽然下达了复位信号,并一直驱动着SE0,但USB2.0的高速接收器一直在检测Chirp K(D+位0,D-为1)信号,如果没有看到Chirp K信号,就继续复位操作,直到复位结束,之后就在全速模式下操作。如果只是一个全速的hub,不支持高速操作,那么该hub不理会设备发送的Chirp K信号,之后设备也不会切换到高速模式。
设备发送的Chirp K信号结束后100us内,hub必须开始回复一连串的KJKJKJ….序列,向设备表明这是一个USB2.0的hub。这里的KJ序列是连续的,中间不能间断,而且每个K或J的持续时间在40us~60us之间。KJ序列停止后的100~500us内结束复位操作。hub发送Chirp KJ序列的方式和设备一样,通过电流源向差分数据线交替灌17.78mA的电流实现。
再回到设备端来。设备检测到6个hub发出的Chirp 信号后(3对KJ序列),它必须在500us内切换到高速模式。切换动作有:
- 设备断开1.5k的上拉电阻;
- 连接D+/D-上的高速终端电阻(high-speed termination),实际上就是全速/低速驱动器;
- 进入默认的高速状态。执行1,2两步后,USB信号线上看到的现象就发生变化了:hub发送出来的Chirp KJ序列幅值降到了原先的一半,400mV。这是因为设备端挂载新的终端电阻后,配上原先hub端的终端电阻,并联后的阻抗是22.5欧姆。400mV就是由17.78mA*22.5Ohm得来。以后高速操作的信号幅值就是400mV而不像全速/低速那样的3V。
- 至此,高速设备与USB2.0 hub握手完毕,进行后续的480Mbps高速信号通信。
USB2.0设备从全速模式到高速模式的识别过程如下图所示:
- 设备首先在IDLE状态,
- 退出IDLE模式约1.5ms
- 设备在D-上发出持续2ms左右的chirp K信号(800mV电平);
- 主机回复chirp JK序列(800mV电平)
- 在检测到设备主机回复chirp的 100 μs 内,高速集线器将响应一系列交替的 K-Jchirp。每个chirp的长度为 50 μs。
- 设备收到之后断开1.5K上拉电阻,波形赋值降低一半(400mV电平);