复位的时候可能发生在任何一种设备状态,如Powered, Default, Address, Configured,
or Suspended states 。
协议如图所示
USB2.0 reset 的几种情况
1、USB2.0 Reset
USB2.0 reset, 是将D+ 和 D- 同时拉低, 进入SE0 状态。
reset 时间:按照spec 规定7.1.75 正常是10-20ms, 需要注意的是如果是root hub 时间则规定为最少50ms(这50ms 可以不连续,但是如果不连续,每个reset 信号之间的间隔时间应该小于3ms)
HUB 如果收到host 发送的setFeature (portreset), 可以对device发送reset 信号。
2、 Reset 的规范
1、FS/LS mode
device 如果是在FS/LS mode 下, 当host 将D+/D- driver 成SE0 后, spec 规定Device 应该在检测到SE0 超过2.5us 后,将这个信号识别为Reset 信号。
2、HS mode
hub 需要先check device 确保其不会是 LS device(Spec 规定LS device 不会支持HS)。这一点很好理解, HS 进入suspend是需要切换到FS mode, 而 LS device D+/D- 和FS device相反,所以无法实现切到FS mode。
hub 收到host 发送的setFeature (portreset),将D+/D- drives SE0。
3. device 去检测到SE0。
这里需要分几种情况考虑:
1) device 在suspend 的情况下, hub 发送reset。
device 检测到SE0, 到进行 HS handshake, 时间间隔不少于2.5us
(就是device检测到SE0 到打chirp K 的时间)
2) device 在FS mode下且是non-suspend 的情况下, hub 发送reset。
device 检测到SE0, 到进行 HS handshake, 时间间隔不少于2.5us 且不长于3ms
(就是device检测到SE0 到打chirp K 的时间)
3) device 在HS mode下且是non-suspend 的情况下, hub 发送reset。
1. 高速设备在收到挂起信号(3ms空闲,这3ms不会打SOF)后,应在0.125ms内切换
到全速状态,也就是说要把终端电阻移除,并在D+数据线上重新挂上1.5k上拉电阻。
2. 设备在随后的100-875µs内检测数据线上的状态。如果该状态是一个Full speed J
(D+ =1, D- =0),那么说明host发下来的是一个挂起信号;如果此时该状态是
SE0(D+ =0,D- =0),说明是host drive数据线D+到0,这是一个复位信号
(复位信号会持续至少 10ms 时间)。
4. Device 进行HS handshake
device 检测到Reset 后, 在2.5us(最少) 后,开始打chirp K (电压幅度800mv) 持续时间最短1ms, spec 规定 chirp K 结束时间不能晚于7ms(即从RESET 开始检测到SE0 到打完ChirpK 要小于7ms)
5.Hub 检测到Chirp K 后,开始打3 组chirp KJ。
spec 规定, 在Device chirp K 打完之后,100us 内hub 必须开始打chirp KJ,3组 chirp KJ 必须在500us 内打完 (单个chirp K 或者 J 持续时间>=40us 且<=60us)。
6.Device 打完chirpK 后会去检测 hub 的chirp K-J-K-J-K-J。
1、如果检测到chirp K-J-K-J-K-J ,需要在500us 内,将FS 的上拉电阻移除,进入HS mode。
2、Device 如果在(1~2.5)ms内没有检测到chirp K-J-K-J-K-J ,则留在FS mode 等待reset 结束。