很早就了解USB传输的信号采用NRZI编码,但对SE0、SE1、差分0、差分1这些状态的电平不了解。这次查阅了USB2.0协议,在这里简明记录一下。
在USB协议中,电平是一个“范围”。但我这里就直接用典型值代替了。
low/full-speed:
- 差分1:D+ 3.3V, D- 0V
- 差分0:D+ 0V, D- 3.3V
- SE0: D+ 0V, D- 0V
- SE1: D+ > 0.8V, D- > 0.8V
** J K Idle 在full-speed与low-speed不同。 ** - Data J: low-speed: 差分1, full-speed: 差分0
- Data K: low-speed: 差分0, full-speed: 差分1
- Idle: low-speed:类似于差分0(data J), full-speed:类似于差分1(data J)。所以Idle都是J,但电平不同。
- Suspend:Idle超过3ms。所以LS和FS的Idle都是J但电平不同。
- Resume:Data K。所以LS和FS的resume都是K但电平不同。
- disconnect: SE0 > 2.5us (at downstream port only)
- connect: Idle > 2ms (at downstream port only)
- reset: SE0超过10ms
high-speed
- 差分1 :Dp 360~440mV,Dm 0mV
- 差分0 :与1相反
- J :差分1
- K :差分0
- chirp J :Dp比dDm电平高,类似于J,具体电平约束稍不同。
- chirp K :Dp比Dm电平低,类似于K,具体电平约束稍不同。
- Idle :与FS LS不同,HS的Idle Dp Dm都是0V左右。
- connect :参考“speed如何确定”。
- disconnect :当device断开,host侧会因为端接电阻的消失而Dp Dm的振幅变大,所以host可检测到设备disconnect。
- HS设备的Rest与suspend无法直接区分。HS设备看到Idle后须返回full-speed,具体方法是打开Dp的上拉电阻并断开端接电阻,然后采样DpDm,如果发现full-speed J,则可断定为suspend,如果发现SE0,则可断定为Reset。
- 如何区分Disconnect与Reset、Suspend ?
参考资料
USB2.0协议,7.1.7
USB2.0协议,7.3.2