文章目录
- USB Ping 事务
- Ping 事务处理机制
- Ping 示例
- 完整抓包
USB Ping 事务
在低速和全速模式下,USB 主机使用控制传输或者批量传输向 USB 设备发送数据时,如果 USB 设备因某些原因(如内存空间不足)无法接收数据,USB 设备会向 USB 主机返回 NAK 包。如果 USB 设备一直无法接收 USB 主机发送过来的数据,那么 USB 主机会一直向 USB 设备发送 OUT 令牌包和数据包,USB 设备会一直回 NAK 包。
这样,USB 总线上会一直存在 OUT 令牌包,数据包和 NAK 包,总线利用率会很低。在低速或者全速模式下,最大传输包长度为 64 字节,但是对于高速设备,最大传输包长度可以达到 512 字节,总线带宽会被大量地浪费。因此在高速模式下,使用一种新的事务——PING 事务,来解决这个问题。
USB 主机在发送 OUT 事务之前使用 PING 事务来确定 USB 设备是否能够接收数据,如果设备不能接收数据,USB 主机会在一定时间后再次使用 PING 事务,直到 USB 设备能够接收数据为止。由于 PING 事务只有令牌包和握手包,与原有的 OUT 事务相比,能够节省大量的总线带宽,从而提高了总线利用率。
USB 主机首先会向 USB 设备发送一个 OUT 令牌包和包含要发送数据的数据包,USB 设备有可能会向 USB 主机返回一个 ACK 包、NAK