不同的 PID 标识了 不同类型的 USB 包(即:不同的包类型 Packets Type)

笔记:
PID 唯一性
PID = Packet ID

PID的构成:四位标识符 + 四位标识符反码

这里只用(PID0~4),PID4~7是PID0~4的取反,用来校验 PID :

2.1.1 PID 域 ★★★ - 图1

根据 USB2.0 的 Spec 描述了 不同PID 对应的 不同类型包 :

2.1.1 PID 域 ★★★ - 图2

下图是USB1.1文档规定的PID类型:

2.1.1 PID 域 ★★★ - 图3

根据 USB2.0 可以看出,PID 主要将 USB 的包分为了 4种PID类型(PID Type) 16个包:

1. 令牌包(Token)类型

包名
输出包 0x01 输出(OUT)启动一个方向为主机到设备的传输,并包含了 设备地址 和 标号。
输入包 0x09 输入(IN) 启动一个方向为设备到主机的传输,并包含了 设备地址 和 标号。
0x05 帧起始(SOF)表示一个帧的开始,并且包含了相应的帧号。
设置包 0x0D 设置(SETUP)启动一个控制传输,用于主机对设备的初始化。

SofTool.CN
举例理解:
PID=0x01 ,可以说:它是一个 输出 令牌包。
PID=0x09 ,可以说:它是一个 输入 令牌包。

2. 数据包(Data) 类型

0x03 数据包(DATA0)。
0x0B 奇数据包(DATA1)。
0x07 高速设备的 PID 的 同步包
0x0F 高速设备 分离包,高带宽的同步事务

SofTool.CN
举例理解:
PID=0x03 ,可以说:它是一个 DATA0 的 数据包。

3. 握手包(HandShake)类型

0x02 确认接收到无误的数据包(ACK)。我俗称:确认包
0x0A 无效(NAK),接收(发送)端正在忙而无法接收(发送)信息。
0x0E 错误(STALL),端点被禁止或不支持控制管道请求。
0x06 无响应(NYET)。

SofTool.CN
举例理解:
PID=0x02 ,可以说:它是设备给主机回复的一个 确认 的 握手包。表示设备正确收到了主机的数据。

4. 特殊 类型

前导包,错误包,分裂事务和 PING 测试

补充

上面的16个包中,其中常用的4个包的传输方向如下:

PID 数据传输方向
IN Device->Host
OUT Host->Device
SETUP Host->Device
PING Device->Host