包标识字段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 | 用于数据流量监测控制 |