USB2.0 包位域成员字段-PID、SOP、包地址、包端点、帧号、CRC5、CRC16
2021-06-30
6974
39
包标识PID
USB协议定义的包格式PID由8位组成,低4位是类型字段,高4位为低四位的补码。
特殊用途包包括了一些用于特定场合的信牌包和握手包。
PID | 含义 | 说明 |
---|---|---|
0001 | 令牌OUT | 主机发送数据到USB设备 |
1001 | 令牌IN | 主机接收从USB设备发出的数据 |
0101 | 令牌SOF | 此时作为一个帧或者小帧的开始信息 |
1101 | 令牌SETUP | 主机向USB设备发送配置信息 |
0010 | 握手ACK | 数据正确接收 |
1010 | 握手NAK | 数据未正确接收 |
1110 | 握手STALL | 使用的端点被挂起 |
0110 | 握手NYET | 接收方没有响应 |
0011 | 数据DATA0 | 数据包偶数包 |
1011 | 数据DATA1 | 数据为奇数据包 |
0111 | 数据DATA2 | 此为作为一个高速同步事务的专用数据包 |
1111 | 数据MDATA | 此时作为一个SPLIT事务的专用数据包。 |
1100 | PRE令牌包 | 低速数据的先导包 |
1100 | 特殊用途ERR | SPLIT事务中表示出现错误 |
1000 | 特殊用途SPLIT | 高速主使用事该SPLIT事务解决从高速模式到低速和全速模式的转换 |
0100 | 特殊用途PING | 仅用于高速模式下主机使用该事务判断设备是否可以接收数据 |
包目标地址Addr
- 包目标地址Addr占7位,所以一条USB总线上最多可以有127个USB设备,其可使用的地址范围为1~127,其中地址0用于设备在枚举过程中尚未分配地址前的过程通讯。
- 设备的址由主机分配,使用USB标准请求 SET_ADDRESS实现。在设备分配地址前使用地址0,在分配地址后启用新的地址与主机进行数据通讯。
- USB设备复位或者掉电或者从主机被拨开后,再次枚举需要重新分配地址。
- 由于主机发出的令牌包是广播在USB总线上的,所以每一个挂接在该总线上的设备都可以收到该令牌包,所以USB设备需要对收到的令牌包进行过滤,过滤的条件就是使用包目标地址Addr和设备自身的地址Addr进行比较,如果匹配,则处理,否则丢弃。
包目标端点ENDP
- USB主机与设备通过管道PIPE进行数据通讯,这个管道表现在设备端为端点。USB设备的端点一般为8位(BIT7指示了数据方向),但在包端点地址中为4位,4位的端点地址中不包含数据方向(数据方向根据PID来确定)。
- 包目标端点地址占4位,所以一个USB设备最大可以支持16个双向(输入输出)端点,即32个单方向端点。
- 端点地0用于控制传输,被称为控制端点。一个USB设备必须支持一个默认的控制端点0。
数据
使用使用数据包DATA0,DATA1,DATA2和MDATA进行数据传输。
不同传输类型,不同设备型的数据域长度不一样。详情可见:同步传输、控制传输、批量传输和控制传输对应的章节。
帧号
一个11位的包帧号,所以帧号的数值范围为0~2047,当到达最大值2047后,从0开始重新计数。\
CRC5循环冗余校验
CRC16循环冗余校验
CRC16冗余校验使用于数据包.如DATA0,DATA1,DATA2和MDATA,用于数据包内数据的冗余校验。
CRC(循环冗余校验)在线计算:http://www.ip33.com/crc.html
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936