批量传输事务(Bulk Tranaction)
批量传输事务分三个阶段,即令牌阶段(Token)、数据传输阶段(Data)、握手阶段(Handshake),流程如下图(摘自usb20 specification 8.5.2):
批量传输特点:
1、批量传输包含IN和OUT传输两种
2、当device收到IN令牌包(token)之后,可以回复data数据包、NAK或者STALL;如果令牌包有错误,则device直接丢弃,不做任何回复。
- 如果当前端点(endpoint),没有可以传输的数据,则直接回复NAK握手包;
- 如果当前端点被设置了halt,则回复STALL握手包;
- 如果当前端点刚好有数据pending,则回复数据包(data packet);host收到数据包之后,确认无误,则需要回复ACK握手包,如果host收到数据包有错误,则不做任何回复。
3、当host准备好发送数据时,先发送OUT令牌包,然后立刻跟着发送一个数据包。device收到数据包之后,可以回复ACK、NAK或者STALL,高速设备(high-speed device)还可以回复NYET。
- 如果当前端点回复ACK,表明数据通讯正常;
- 如果当前端点回复NAK,表明device无法接收当前包,host需要重传当前的数据包;如果是high speed device,host重传之前需要发送PING包,一直PING到device回复ACK之后,host才可以重发当前数据包。
- 如果当前端点被设置了halt,则回复STALL握手包;
- 如果是高速设备端点,则可能回复NYET,表明当前数据包已经接收,但无法接收下一个数据包,则host下一次发送之前需要先发送PING包,一直PING到device回复ACK之后,host才可以继续发送下一个数据包。
批量传输示例
Bulk OUT需要Ping包示例
Bulk IN示例