USB2.0 握手包
2021-11-29
2930
0
握手包跟随在令牌包或者数据包之后,组成一个完整的事务,是对一次事务完成的确认。USB主机或者USB设备会根据事务的完成状态返回相应的握手包。
握手包由8位的PID构成,用于数据传输的末位报告本次数据传输的状态。握手包之后使是整个事务处理的结束信号EOP.
握手包根据PID的不同,可分为:
PID | 含义 | 说明 |
---|---|---|
0010 | 握手ACK | 数据正确接收 |
1010 | 握手NAK | 数据未正确接收 |
1110 | 握手STALL | 使用的端点被挂起 |
0110 | 握手NYET | 接收方没有响应 |
1100 | 特殊用途ERR | SPLIT事务中表示出现错误 |
USB规范定义了以下几个响应:
1 . ACK 握手包
当 USB 数据传输的接收方正确接收到数据包时,接收方将返回 ACK 握手包。 ACK 握手包表征了一次正确的数据传输,之后才可以进行下一次事务处理。
2 . NAK 握手包
NAK 握手包一般由 USB 功能设备发出。对于IN数据传输,表示 USB 设备没有计划向 USB 主机发送数据;对于 OUT 数据传输,表示 USB 设备无法接收 USB 主机发送的数据。
3 . STALL 握手包
STALL 握手包一般由 USB 功能设备发送,表示该 USB 功能设备不支持这个请求,或者无法发送和接收数据。 STALL 握手包分为以下两种情况。
- 协议 STA LL 握手包:在控制传输中使用。协议 STALL 握手包表明了该 USB 功能设备不支持这个请求协议。
- 功能 STALL 握手包:表明该 USB 功能设备的相应端点已经停止,而无法完成发送数据或者接收数据的操作。
4 . NYET 握手包
在 SPLIT 令牌包事务处理中,如果 USB 集线器无法正常处理 SPLIT 请求,则 USB 集线器向 USB 主机返回 NYET 握手包。 NYET 握手包一般只发生在高速数据传输过程中。
在USB2.0高速设备OUT事务中使用,它表示设备本次数据成功接收,但是没有足够的空间来接收下一次数据。主机在下一次输出数据时,将先使用PING命令牌包来探测设备是否有足够的空间接收数据,一面不必要的带宽浪费。
5 . ERR 握手包
ERR 握手包用于表示总线数据传输发生错误,其一般发生在高速数据传输过程中。
其功能是由USB集线器HUB向主机报告挂载其上的低速或全速设备错误。
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936