1、基本概念
- 一次传输(控制、批量、中断、同步):由多个事务(Transaction)组成。
- 一个事务(IN、OUT、SETUP):由一个或多个包(Packet)组成。
USB 数据在主机软件与 USB 设备特定的端点之间传输,主机软件与特定端点之间的关联叫做管道(Pipes)。一个 USB 设备可以拥有多个管道。
2、包 (Packet)
包(Packet)是 USB 系统中信息传输的基本单元,所有数据都必须打包后才能在总线上传输,且包只能在帧内传输。高速 USB 总线的帧周期为 125μs,全速与低速 USB 总线的帧周期为 1ms。帧的起始由专门的 SOF 包标识,帧尾为 EOF(EOF 不是一个包,而是一种电平状态,期间不允许传输数据)。
注意:虽然高速 USB 总线与全速/低速 USB 总线的帧周期不同,但 SOF 包中帧编号的递增速度是一样的。因为在高速 USB 系统中,SOF 包的帧编号实际取的是计数器的高 11 位,最低 3 位作为微帧(Microframe)编号未展示在帧号里,因此帧编号的递增周期同样为 1ms。
USB 总线上的传输时序如下:

- 包是 USB 总线上数据传输的最小单位,不能被打断或干扰,否则会引发错误。
- 若干个数据包组成一次事务传输;一次事务传输也不能被打断,属于同一次事务的几个包必须连续,不能跨帧完成。
- 一次完整的传输由一次或多次事务传输构成,可以跨帧完成。
USB 包由五部分组成:同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP),基本格式如下图:

2.1 PID 类型 (即包类型)


2.2 Token Packets (令牌包)

此格式适用于 IN、OUT、SETUP、PING,对应的传输方向如下:
| PID | 数据传输方向 |
|---|---|
IN |
Device -> Host |
OUT |
Host -> Device |
SETUP |
Host -> Device |
PING |
Host -> Device(探测设备是否有空间接收数据) |
2.3 Start-of-Frame (SOF) Packets
SOF 包由 Host 周期性发送给 Device:
- 对于全速(Full-Speed)总线,每隔
1.00 ms ± 0.0005 ms发送一次。 - 对于高速(High-Speed)总线,每隔
125 μs ± 0.0625 μs发送一次。
SOF 包构成如下图所示:


2.4 Data Packets (数据包)

共有四种类型的数据包:DATA0、DATA1、DATA2 和 MDATA,通过 PID 区分。其中 DATA0 和 DATA1 用于实现数据翻转同步(Data Toggle Synchronization)。
2.5 Handshake Packets (握手包)

ACK:对于 IN 事务,由 Host 发出;对于 OUT、SETUP 和 PING 事务,由 Device 发出。NAK:对于 IN 事务,在数据阶段由 Device 发出;对于 OUT 和 PING 事务,在握手阶段由 Device 发出。Host 从不发送 NAK 包。
3、事务 (Transaction)
USB 总线上完成一次数据接收或发送的处理过程称为事务处理(Transaction)。一个事务由一系列 Packet 组成,具体包含哪些包取决于事务类型,通常由以下包构成:
- 一个 Token Packet(令牌包)
- 可选的 Data Packet(数据包)
- 可选的 Handshake Packet(握手包)
- 可选的 Special Packet(特殊包)
3.1 输入 (IN) 事务处理
输入事务处理表示 USB 主机从总线上的某个 USB 设备接收一个数据包的过程。
- 正常的输入事务处理:

- 设备忙时的输入事务处理:

- 设备出错时的输入事务处理:

3.2 输出 (OUT) 事务处理
输出事务处理表示 USB 主机把一个数据包发送到总线上某个 USB 设备的过程。
- 正常的输出事务处理:

- 设备忙时的输出事务处理:

- 设备出错时的输出事务处理:

3.3 设置 (SETUP) 事务处理
- 正常的设置事务处理:

- 设备忙时的设置事务处理:

- 设备出错时的设置事务处理:

4、USB 传输类型
USB 协议定义了 4 种传输类型:
- 控制传输 (Control Transfer)
- 批量传输 (Bulk Transfer)
- 中断传输 (Interrupt Transfer)
- 同步传输 (Isochronous Transfer)
4.1 控制传输 (Control Transfer)
控制传输由 2~3 个阶段组成:
- 建立阶段 (Setup Stage)
- 数据阶段 (Data Stage,无数据控制传输没有此阶段)
- 状态阶段 (Status Stage)
每个阶段都由一次或多次事务传输(Transaction)组成。控制传输主要用于设备枚举阶段读取描述符和下发配置,驱动软件也可使用控制传输实现特定命令交互,其数据传输不允许丢失。
4.1.1 建立阶段
主机向 USB 设备发起请求或下发配置参数。建立阶段包含 SETUP 令牌包、紧随其后的 DATA0 数据包以及 ACK 握手包,用来定义本次控制传输的请求内容(即数据阶段是 IN 还是 OUT、需要传输多少字节的数据,都在建立阶段设定好)。

4.1.2 数据阶段
用来传输主机与设备之间的负载数据。根据数据传输方向,控制传输分为 3 种类型:
- 控制读取(读取 USB 描述符)
- 控制写入(配置 USB 设备)
- 无数据控制
- 控制读取(Control Read):将数据从设备读到主机(如读取设备描述符)。对每个数据包而言,主机先发送
IN令牌包请求读数据,设备通过DATA1/DATA0数据包将数据回传给主机。主机正确接收后回复ACK;若主机忙则回复NAK;发生错误则回复STALL。 - 控制写入(Control Write):将数据从主机传到设备(如发送配置信息)。对每个数据包而言,主机先发送
OUT令牌包,紧接着通过DATA1/DATA0数据包将数据传给设备。设备正确接收后回复ACK;若设备忙则回复NAK;发生错误则回复STALL。

4.1.3 状态阶段
用来汇报整个控制传输过程已顺利结束。状态阶段的传输方向必须与数据阶段相反(原来是 IN 事务,状态阶段就用 OUT 事务;原来是 OUT 事务,状态阶段就用 IN 事务):
- 对于控制读取:主机发送
OUT令牌包,随后发送 0 长度的DATA1包,设备回应ACK、NAK或STALL握手包。 - 对于控制写入:主机发送
IN令牌包,设备返回表示完成的 0 长度DATA1包,主机回应ACK、NAK或STALL握手包。
4.2 批量传输 (Bulk Transfer)
用于传输大量数据,要求数据准确无误,但对实时性没有严格要求,常用于打印机、U 盘等大容量存储设备。
一次批量传输(Transfer)由 1 次到多次批量事务(Transaction)组成。硬件层通过错误检测、握手包反馈和超次重传确保可靠传输:
- PID 翻转同步:发送端按
DATA0-DATA1-DATA0-...交替翻转的顺序发送数据包。只有收到ACK确认传输成功后才会翻转 PID 发送下一包;若接收端连续收到两个相同 PID(例如连续两个DATA0),则判定后一个是前一个包的重传。 - 错误重试限制:USB 允许连续 3 次以内的传输错误并自动重试,一旦成功则将错误计数器清零;若连续失败超过 3 次,Host 判定该端点异常(STALL),放弃传输任务。
批量事务由三种包组成(IN 事务或 OUT 事务):
- Token(令牌包)
- Data(数据包)
- Handshake(握手包)

- IN 事务(IN Transaction)握手响应:
ACK:表示 Host 正确无误地接收到数据。NAK:指示设备暂时无法返回数据(如设备忙)。STALL:指示设备端点挂起,需要 Host 软件介入处理(如设备出错)。
- OUT 事务(OUT Transaction)握手响应(若收到的数据包存在 CRC 校验错误,Device 不发送任何握手包):
ACK:Device 已正确接收数据包,通知 Host 可以按序发送下一包。NAK:Device 已正确接收数据包,但因临时状况(如缓冲区满)通知 Host 稍后重传。STALL:指示 Device 端点已停止,通知 Host 不再重传。
- Bulk 读写序列(由一系列 IN 事务或 OUT 事务组成):

4.3 中断传输 (Interrupt Transfer)
中断传输由 IN 或 OUT 事务组成,常用于主机定期轮询设备是否有数据需要传输(如鼠标、键盘)。
- 中断传输在流程上除不支持
PING令牌外,其余机制与批量传输一致,同样采用DATA0/DATA1PID 翻转机制保证收发端数据同步。 - 主机在排定任务时,会根据中断端点描述符中指定的查询间隔周期性发起中断传输。
- 中断传输具有较高的优先级,仅次于同步传输。

4.4 同步传输 (Isochronous Transfer)
同步传输适用于必须以固定速率或在指定时刻送达、且可以容忍偶尔出错的实时数据流,常用于麦克风、音响喇叭、UVC 摄像头等音视频设备。
同步传输只包含两个包阶段:
- Token(令牌包)
- Data(数据包)
由于没有握手包(Handshake),同步传输不支持重传机制,也不支持 PID 翻转,属于不可靠传输;但在主机排定总线带宽和事务传输时,同步传输享有最高的优先级。
