USB 2.0 协议中J、K、SE0状态的定义
在USB 2.0协议中经常会看到以下术语:Chirp K、KJ序列、SE0。这里的状态是根据低速、全速/高速下设备D+和D-上不同的电平信号来决定的。
1、J态、K态、SE0,SE1
信号 | 转换状态 | 状态 | Low speed (D+ pull-up) | Low speed (D− pull-up) | Full speed (D+ pull-up) | Full speed (D+ pull-up) |
---|---|---|---|---|---|---|
D+ | D− | D+ | D− | |||
J | 空闲线路状态相同 | 这是出现在传输线转换期间。或者,它正在等待一个新的数据包。 | 0 | 1 | 1 | 0 |
K | J相反状态 | 这是出现在传输线转换期间。 | 1 | 0 | 0 | 1 |
SE0 | Single-ended zero | D+和D− 为低。指示一个包的结束或USB设备和移除 | 0 | 0 | 0 | 0 |
SE1 | Single-ended one | 非法的状态,不应该出现。标示为错误 | 1 | 1 | 1 | 1 |
从J到K或者从K到J,信号翻转,说明发送的是信号0;
从J到J或者从K到K,信号保持不变,说明发送的是信号1。这就是差分信号0/1的发送。
- 差分信号1: D+ > VOH (2.8V)and D- < VOL(0.3V)
- 差分信号0: D- > VOH and D+ < VOL
- 复位信号(Reset): D+ and D- < VOL for >= 10ms
- IDLE状态: J状态
- 恢复信号(Resume): K 状态
- SOP:从IDLE状态切换到K状态
- EOP:持续2位时间的SE0信号,后跟随1位时间的J状态
- SYNC: 3个重复的KJ状态切换,后跟随2位时间的K状态
高速设备的J和K相反。
低速下: D+为“0”,D-为“1”是为“J”状态,“K”状态相反;
全速/高速下:D+为“1”,D-为“0”是为“J”状态,“K”状态相反;
全速设备的传输示例
当没有更多数据要读取时,由USB 1.1全速设备传输的否定应答数据包的示例。 它由以下字段组成:时钟同步字节,数据包类型和数据包结束。 数据分组将在分组的类型和分组的末尾之间具有更多的信息。
2、空闲状态
低速下空闲状态为“J”状,差分为0
全速下空闲状态为“J”状态,差分为1
高速下空闲状态为“SE0”状态;
3、reset和suspend的区分
我们知道,在USB系统中,正常状态下hub或root hub会一直周期性地发送SOF包(Start Of Frame,全速USB每1ms发送一个,高速USB则是125µs发送一个)。根据USB协议,如果USB线上一直处于空闲(Idle)状态超过3ms,设备应该把它当作一个挂起(Suspended)信号,要求设备在10ms内进入挂起状态,并把设备所需的电流大小降到规定的值(对于low-power设备,要求是500µA,而对于high-power或支持远程唤醒(remote wakeup)功能的设备是2.5mA【Section 7.2.3, Pg176】)。
在挂起状态中,设备必须继续向数据项D+/D-的上拉电阻提供电压以维持Idle状态。而对于USB2.0高速设备,还有些额外的要求:
高速设备在收到挂起信号(3ms空闲)后,应在0.125ms内切换到全速状态,也就是说要把终端电阻移除,并在D+数据线上重新挂上1.5k上拉电阻。
设备在随后的100-875µs内检测数据线上的状态。如果该状态是一个Full speed J,那么说明host发下来的是一个挂起信号;如果此时该状态是SE0,说明是host drive数据线D+到0,这是一个复位信号(复位信号会持续至少10ms时间)。
要注意的是高速设备在挂起状态时处于高速模式,只是所用的是全速信号。一旦从挂起状态恢复回来,会马上进入高速工作状态而无需进行复位操作。
对于全速操作,SE0表示为复位和EOP,持续时间大于2.5us表示总线复位;
对于高速操作,SE0维持3ms~3.125ms,设备进入全速状态,全速后100us~875us内采样,如果继续维持SE0,则设备总线复位,开始高速握手;
若变为“J”状态,则进入挂起状态”suspend“。
4、高速握手条件
1.设备处于挂起状态,若出现SE0则立即开始高速握手;
2.设备处于全速,SE0持续2.5us,则开始高速握手;
3.设备处于高速,SE0持续3.0ms,切继续持续,则开始高速握手。