8.12 TP流程
由事务处理组成的包依赖端点类型变化。有四中端点类型:块,控制,中断和同步。 8.12.1 块事务处理
块事务处理类型具有通过错误检测与重试保证无错误的在主机与设备之间传输数据的属性。块事务处理使用由TPs和DPs组成的双相事务处理。
8.12.1.1 状态机注释信息
这个区域展示详细的需要在IN和OUT管道上提出协议的主机和设备状态机制。 Figure 8-25展示了状态机的图解。
8.12.1.2 块输入事务处理 Bulk IN Transactions
当主机准备好接收块数据时,它就发送一个ACK TP给设备指示它想要的从设备得到的包顺序号与包数量。
主机应该为每个从设备收到的有效DP发送一个ACK TP。如果前一个ACK TP指示主机期待设备发送不止1个DP(依赖于TP中NumP域值),则设备不必等待ACK TP后就可以发送下一个DP给主机。ACK TP暗中用前一个被主机成功接受到的顺序号来应答最后的DP,也对设备指示下一个顺序号的DP和主机想要从设备获得的包数量。如果主机在收到DP时检测到一个错误,它应该发送一个顺序号值被设置为发生错误的第一个包顺序号的ACK TP,其retry位也要置位,即使是这个包以后的包都没有错误发生。设备需要重新发送从发生错误的那个顺序号包开始的所有DPs。
当端点初始化后(通过命令Set Configuration, Set Interface, ClearFeature (STALL) 参考 Chapter 9 命令),主机开始第一次从端点接收数据的传输,主机期待第一个DP的顺序号被设为0. 第二个被设备端点发送的DP顺序号应该被设置为1;第三个被设备发送的DP顺序号应该设为2,??直到顺序号为31,顺序号31的下一个DP的顺序号又为0. 一个设备端点保持它发送的包顺序号递增,除非它收到一个带有retry位置位的ACK TP,这指示主机不得不重新发送前一个DP。
如果主机要求从设备获得多个DPs,设备在那时刻没有那么多有效的DPs可以发送,则设备发送最后的DP应该在DPH中的EOB标志置位(因为有部分数据可以发送,所以不发送NRDY TP)。当再有数据发送时,设备要发送ERDY TP给主机。注意:如果被发送给主机的DP的数据量比端点中定义的最大包尺寸少(短包),则没有必要设备EOB标志。
当设备发送了所有被主机期待的数据时或发送了一个比最大数据包尺寸小的DP(短包)时,传输就完成了。当主机想要开始一次新的传输,它应该发送另外的期待从设备获得的下一个顺序号和DPs数量的ACK TP。例如,如果数据量比最大包尺寸小的
41
DP为2,则主机应该通过发送一个带有期待顺序号被设为3的ACK TP来开始新传输。
8.12.1.3 块输出事务处理(Bulk OUT Transactions )
当主机准备发送块数据时,它会发送一个或多个DPs给设备。如果设备收到有效的DPH(有效的device address, endpoint number, direction和期待的顺序号),它应该以 Section 8.11.3定义的 应答。
在端点初始化之后,主机总是在第一次对端点输出数据的传输中,以第一个DP顺序号为0开始。第二个被设备端点发送的DP顺序号应该被设置为1;第三个被设备发送的DP顺序号应该设为2,??直到顺序号为31,31的下一个顺序号为0。主机保持它发送的包顺序号递增,除非它收到一个带有retry位置位的ACK TP,这指示主机不得不重新发送前一个DP。
传输是在主机发送完所有它要发给设备的数据时完成。然而,传输的最后DP可能有或没有一个等于端点最大包尺寸大小的数据。当主机想要开始一次新传输,它应该发送另外的DP,这个DP带有下一个目标端点想要的顺序号。
42
8.12.1.4 块流协议
流协议坚持了标准超速块协议,所以支持流的超速块管道上的包交换跟超速块管道没有什么区别。流协议通过包头中的流ID域的操作被严格管理。
注意:如这个区域描述一样,流协议适用于管道状态,它被描述成单个实体。实际上,流协议在管道的一端独立的被主机追踪,在另外一端被设备追踪。所以由于在主机
43
与设备间的包传播延迟,任何时刻两端可能随时不同相。
Figure 8-28 展示了流协议状态机制 (SPSM)的基本状态转变。这里描述了当它们都适用于IN和OUT端点时的一般SPSM转变。IN和OUT端点的SPSM的详细操作在随后的区域中被描述。
Disabled ——这是在被配置后管道的初始化状态。如果在任何其他状态中检测到错误,则转变到这个状态。一个端点buffer第一次被分配到一个管道时,主机应该把SPSM转变成 Prime Pipe状态。如果由于错误进入Disabled 状态,那么错误条件必须在状态退出之前由软件的介入来消除。注意错误(stall,超时等)应该要把任何SPSM状态转变成Disabled状态。
Prime Pipe——这个状态总是被主机初始化,通知设备端点buffer设置已经被软件添加或修改。
Idle——这个状态指示没有当前流被选择。在这种状态,SPSM正等待Prime Pipe或主机初始化转变成Move Data状态,或者设备初始化转变成Start Stream状态。主机和设备初始化转变的对象是开始一次流(被主机或设备各自设置为当前流),开始移动数据。
Start Stream——当想要选择一个流或开始一次数据传输时,这个状态总是被设备初始化得来的。如果设备选择的流被主机接收,则当前流被设置,管道进入Move Data状态。如果设备选择的流被主机拒绝,管道返回Idle状态。
Move Data——在这个状态中,流数据被传输。如果这个状态是由于主机初始化流
44