不同的 PID 标识了 不同类型的 USB 包(即:不同的包类型 Packets Type)。
笔记:
PID 唯一性
PID的构成:四位标识符 + 四位标识符反码
这里只用(PID0~4),PID4~7是PID0~4的取反,用来校验 PID :
根据 USB2.0 的 Spec 描述了 不同PID 对应的 不同类型包 :
可以看出,由 PID 主要将 USB 的包分为了 4 类 16个包:
- 令牌包(Token) :
0x01 | 输出(OUT)启动一个方向为主机到设备的传输,并包含了 设备地址 和 标号。 |
0x09 | 输入(IN) 启动一个方向为设备到主机的传输,并包含了 设备地址 和 标号。 |
0x05 | 帧起始(SOF)表示一个帧的开始,并且包含了相应的帧号。 |
0x0d | 设置(SETUP)启动一个控制传输,用于主机对设备的初始化。 |
- 数据包(Data) :
0x03 | 偶数据包(DATA0)。 |
0x0b | 奇数据包(DATA1)。 |
0x07 | 高速设备的 PID 的 同步包 |
0x0f | 高速设备 分离包,高带宽的同步事务 |
- 握手包(HandShake):
0x02 | 确认接收到无误的数据包(ACK)。我俗称:确认包 |
0x0a | 无效(NAK),接收(发送)端正在忙而无法接收(发送)信息。 |
0x0e | 错误(STALL),端点被禁止或不支持控制管道请求。 |
0x06 | 无响应(NYET)。 |
特殊类:
前导包,错误包,分裂事务和 PING 测试
PID | 数据传输方向 |
---|---|
IN | Device->Host |
OUT | Host->Device |
SETUP | Host->Device |
PING | Device->Host |