包标识字段PID的定义格式如下图,包标识字段(PID)长度为8bit,由低4bit的类型字段和高4bit的校验字段组成。校验字段是类型字段的反码。例如,PID[3:0] = 0001B时,完整的PID字段则应该是:1110_0001B,表示令牌OUT。
PID字段有如下4中类型信息包:
- 令牌包:PID[1:0] = 01B;
- 握手包:PID[1:0] = 10B;
- 数据包:PID[1:0] = 11B;
- 特殊包:PID[1:0] = 00B。
1.令牌包:对于令牌包,PID字段可以指明数据传输的方向、帧开始等,定义如下:
令牌包 |
PID[3:0] |
含义 |
OUT |
0001B |
数据从Host发送到Device |
IN |
1001B |
数据从Device发送到Host |
SOF |
0101B |
帧或小帧的开始信息 |
SETUP |
1101B |
Host向Device发送配置信息 |
2. 握手包:对于握手包,PID字段指明数据传输的结果,定义如下:
握手包 |
PID[3:0] |
含义 |
ACK |
0010B |
数据已经被接收方正确接收 |
NAK |
1010B |
数据未被接收方正确接收 |
STALL |
1110B |
目前使用的端点被挂起 |
NYET |
0110B |
接收方没有反应 |
3. 数据包:对于数据包,PID字段子明数据包的奇偶性,类型定义如下:
数据包 |
PID[3:0] |
含义 |
DATA0 |
0011B |
数据包为偶数据包 |
DATA1 |
1011B |
数据包为奇数据包 |
DATA2 |
0111B |
数据包为一个高速同步事务专用数据包 |
MDATA |
1111B |
数据包为SPLIT事务专用数据包 |
4. 特殊包:用于定义特殊事务
特殊包 |
PID[3:0] |
含义 |
PRE |
1100B |
主机发送的用于使能USB低速数据通信的令牌信息先导包 |
ERR |
0100B |
用于SPLIT事务中,表示错误握手信号 |
SPLIT |
1000B |
表示SPLIT事务的令牌信息 |
PING |
0100B |
用于数据流量监测控制 |