USB3.0事务包
包头中的Type 字段的值应该设置为 Transaction Packet (即 00100b),表示事务包 。
事务包(TPs) 穿越主机和设备之间的直接路径。事务包被用来控制数据流和管理端到端的连接。
Route String 字段是被集线器用来路由出现在其上行端口上的包到正确的下行端口。从设备发出的事务包的路由字串被设置为零。
当主机发送一个事务包时, Device Address 字段包含预定的接收者的地址。当设备发送一个事务包给主机时,它将 Device Address 字段设置为它自己的设备地址。该字段被主机用来识别事务包的来源。
事务包中 SubType 字段被接收者用来判定事务包的格式和使用方式。
事务包类型SubType
| 值 | 类型 | 方向 | 功能 | 戏说 |
|---|---|---|---|---|
| 0001 | ACK | 设备→主机 | 确认成功收到数据包 | 收到了,还可以再发X个 |
| 0010 | NRDY(Not Ready) | 设备→主机 | 通知主机设备尚未准备好接收/发送数据 | 忙,别发了,等等 |
| 0011 | ERDY(Endpoint Ready) | 设备→主机 | 通知主机端点已准备好,可恢复传输 | 好了,可以继续发了 |
| 0100 | STATUS | 双向 | 返回事务状态(成功/失败/停止) | 事务结果是X |
| 0101 | STALL | 设备→主机 | 端点出现错误或功能不支持 | 出错了,这个端点废了 |
| 0110 | DEV_NOTIFICATION | 设备→主机 | 设备通知主机设备或者接口状态有异步变化 | 我有事要告诉你”(设备主动) |
| 0111 | PING | 主机→设备 | 探测设备是否在位且可访问 | 你还在吗? |
| 1000 | PING_RESPONSE | 设备→主机 | 对主机发送的PING进行响应,每个PING都对应一个PING_RESPONSE | 我在呢 |
1. ACK — 确认包
作用:接收方确认已成功收到数据包。
- 对于 IN 端点,由主机发送该事务包,用来从设备请求数据,以及对主机之前接收到的数据包进行确认。
- 对于 OUT 端点,由设备发送该事务包,用来对主机之前发送的数据包进行接收确认,以及通知主机在接收到这个包后设备还有多少个包缓冲区可用。
包含的关键信息:
| 字段 | 含义 |
|---|---|
| Sequence Number | 确认的包序列号 |
| NumP | 可接收的后续包数量(流控) |
2. NRDY — 未就绪
作用:端点告诉主机”我现在还没准备好收发数据”。
触发场景:
- 端点的接收缓冲区已满
- 端点内部正在处理数据,暂时无法响应
主机的响应:
- 收到NRDY后,主机停止向该端点发送事务包
- 将端点标记为”等待就绪”状态
3. ERDY — 端点就绪
作用:端点通知主机”我已经准备好了,可以继续传输”。
工作流程:
设备端点满/忙 → 主机收到NRDY → 主机停止发送
↓
设备处理完数据 → 发送ERDY → 主机恢复发送
包含的关键信息:
| 字段 | 含义 |
|---|---|
| Device Address | 设备地址 |
| Endpoint Number | 端点号 |
| Stream ID | 流ID(支持流传输时) |
ERDY是异步通知机制,设备可以随时告诉主机”我又行了”
4. STATUS — 状态包
作用:返回事务的状态结果。
方向:双向(主机→设备 或 设备→主机)
典型状态值:
| 状态 | 含义 |
|---|---|
| Success | 事务成功完成 |
| Failure | 事务失败 |
| Not Supported | 请求的功能不支持 |
使用场景:
5. STALL — 停止包
作用:端点报告错误或拒绝访问。
触发场景:
- 请求的功能/端点不存在
- 请求的格式错误
- 设备内部故障
后果:
- 主机收到STALL后,该端点进入”停止”状态
- 主机需要通过Clear Feature命令清除STALL条件才能恢复
STALL是永久性错误指示(直到被软件清除),区别于NRDY(临时性忙)
6. DEV_NOTIFICATION — 设备通知包
作用:设备主动通知主机设备或接口状态发生了异步变化。
通知类型示例:
| 通知类型 | 说明 |
|---|---|
| Function Wake | 功能唤醒通知(设备从低功耗主动唤醒) |
| Latency Tolerance | 延迟容忍度报告 |
| Bus Bandwidth Request | 总线带宽请求 |
方向:设备 → 主机(唯一一个设备主动发起的异步通知事务包)
关键特点:
- 设备不需要等待主机轮询,可以主动上报状态变化
- 用于支持更高效的电源管理和异步事件处理
- USB 3.0 新增的重要特性(USB 2.0 无此机制)
类比:传统USB 2.0是”老师不断点名问谁有问题”,DEV_NOTIFICATION是”学生主动举手说我有问题”
7. PING — 探测包
作用:主机探测一个设备是否在位且可访问。
方向:主机 → 设备
使用场景:
- 设备长时间无响应后,主机发PING确认设备是否还在
- 在发起传输前确认链路正常
响应:
- 设备必须回复PING_RESPONSE
8. PING_RESPONSE — 探测响应包
作用:设备对主机发送的PING进行响应。
方向:设备 → 主机
与PING的关系:
主机 ── PING ──► 设备
↓
主机 ◄── PING_RESPONSE ── 设备
特性:
- 每个PING都对应一个PING_RESPONSE
- 如果有PING没有PING_RESPONSE,主机认为设备已断开
本文链接为:http://www.usbzh.com/article/detail-1678.html ,欢迎转载,转载请附上本文链接。PING和PING_RESPONSE是配对使用的,类似网络中的ICMP Echo Request/Reply
USB3.2超高速协议规范





