USB事务处理(上)
USB的事务处理分为三个阶段,这三个阶段的作用分别和can的标准帧很像。
- 令牌阶段(包含了本次数据的类型信息)
- 数据阶段(包含了本次数据的数据信息)
- 握手阶段(包含传输是否成功的状态信息)
而每个阶段都由同步字段
+ 信息包
+ EOP
组成。令牌阶段的信息包又叫做令牌包;数据阶段的信息包又叫做数据包;握手阶段的信息包叫做握手包。
一、令牌阶段
令牌阶段是USB事务处理必须包含的阶段。
1.1 同步字段(SYNC)
作用:因为USB没有时钟线,同步字段可以保证所有信息包的同步。同步字段在不同速度下的USB协议中有不一样的格式。
低速和全速
同步字段长度为8位,数据为1000 0000B(先发送低位再发送高位,先发送7个0,最后一位发送1)
高速
同步字段长度为32位,数据为8000 0000H(先发送低位再发送高位,先发送31个0,最后一位发送1)
1.2 令牌包
有七种令牌包
- IN令牌包
- OUT令牌包
- SETUP令牌包
- PING令牌包
- SOF令牌包
- SOLIT令牌包
- PRE令牌包
二、数据阶段
数据阶段包含本次传输的数据,最大的数据量为1024字节。
2.1 同步字段(SYNC)
低速和全速
同步字段长度为8位,数据为1000 0000B(先发送低位再发送高位,先发送7个0,最后一位发送1)
高速
同步字段长度为32位,数据为8000 0000H(先发送低位再发送高位,先发送31个0,最后一位发送1)
2.2 数据包
数据包字段 | 位数 | 作用 |
---|---|---|
PID字段 | 8位 | 指明数据包的类型 |
数据字段 | 0~1024*8位 | 包含了传输的数据 |
CRC字段 | 16位 | 循环冗余校验字段 |
PID字段
- 低四位:类型字段
- 高四位:校验字段(类型字段的补码,有点红外信号的感觉)
数据字段
- 低速USB: 最大长度8字节
- 全速USB:最大长度为1023字节
- 高速USB:最大长度为1024字节
三、握手阶段
握手阶段由接收方向发送方报告此次数据传输是否成功。
3.1 同步字段(SYNC)
低速和全速
同步字段长度为8位,数据为1000 0000B(先发送低位再发送高位,先发送7个0,最后一位发送1)
高速
同步字段长度为32位,数据为8000 0000H(先发送低位再发送高位,先发送31个0,最后一位发送1)
3.2 握手包
握手包由仅有一个包标识字段(8个位)组成,有5种状态
- ACK握手包
- NAK握手包
- STALL握手包
- NYET握手包
- ERR握手包