)
目录1.批量传输2.中断传输3.实时传输4.控制传输一个事务1.批量传输批量传输用批量事务来实现用于传输大量的数据数据的正确性有保证时效没有保证。批量事务由3个阶段(phase)组成令牌阶段、数据阶段、握手阶段。每个阶段都是一个完整的包含有SOP、SYNC、PID、EOP。下图中各个矩形框就对应一个完整的包2.中断传输中断传输用中断事务来实现用于传输小量的、周期性的数据数据的正确性和时效都有保证。中断事务由3个阶段(phase)组成令牌阶段、数据阶段、握手阶段。每个阶段都是一个完整的包含有SOP、SYNC、PID、EOP。下图中各个矩形框就对应一个完整的包中断事务跟批量事务非常类似Host使用它来周期性地读数据、写数据。以鼠标为例我们需要及时获得鼠标的数据不及时的话你会感觉鼠标很迟钝。但是USB协议中并没有中断功能它使用周期性的读、写来实现及时性。具体过程如下Host每隔n毫秒发出一个IN令牌包鼠标有数据的话发出DATA0或DATA1数据包给Host鼠标没有数据的话发出NAK给Host。中断事务的优先级比批量事务更高它要求实时性而批量事务不要求实时性。3.实时传输实时传输用实时事务来实现用于传输实时数据对数据的正确性没有要求。实时事务由2个阶段(phase)组成令牌阶段、数据阶段。每个阶段都是一个完整的包含有SOP、SYNC、PID、EOP。实时事务不需要握手阶段一个示例的场景是为了传输摄像头的实时数据偶尔的数据错误是可以忍受的大不了出现短暂的花屏。如果为了解决花屏而重传数据那就会导致后续画面被推迟实时性无法得到保证。下图中各个矩形框就对应一个完整的包。实时事务跟中断事务非常类似Host也会周期性的发起实时事务主要区别在于实时事务不要求准确性没有握手阶段实时事务传输的数据量比较大中断事务传输的数据量比较小4.控制传输在使用批量传输时使用IN令牌包或OUT令牌包表示数据传输方向。控制传输的令牌包永远是SETUP怎么分辨是读数据还是写数据发出SETUP令牌包后还要发出DATA0数据包根据数据的内容来确定后续是读数据还是写数据。这个过程称为建立事务(SETUP Transaction)但是控制传输由多个事务组成这些事务分别处于3个过程建立过程(stage)、数据过程(stage)、状态过程(stage)。建立过程(stage)使用SETUP事务Host发出SETUP令牌包、DATA0数据包、得到ACK握手包数据过程(stage)使用批量事务对于输出Host发出OUT令牌包发出DATA0、DATA1数据包、得到ACK握手包对于输入Host发出IN令牌包读到DATA0、DATA1数据包、发出ACK握手包状态过程(stage)使用批量事务对于输出Host发出IN令牌包读到DATA1数据包发出ACK握手包对于输入Host发出OUT令牌包发出DATA1数据包等待ACK握手包上图中的每一个方框都是一个完整的事务含有Token Packet、Data Packet、HandshakePacket。