USB超高速 中断传输
中断传输类型用来支持带有轮询服务间隔需要高可靠性传输小数量数据的设备。这个规格的协议层章详细描述了与中断传输相关的包,总线事务和事务处理流程。超速中断传输类型一般提供以下方面:
- 能保证最大的服务间隔
- 能保证在下一次服务间隔中尝试重新传输
在每个服务周期中为中断端点尝试中断传输,保留一定带宽保证在每个服务间隔尝试传输。一旦传输成功,就不尝试另外一次传输(在此周期内),直到下一个轮询服务周期到来(保证每个服务周期中尝试一次中断传输)。如果端点以没有准备好的通知或者一个指示不能接收任何包的ACK应答,则主机不会在此次服务中尝试另外一次到端点的传输,除非接收到准备好的通知。然后主机必须在收到(准备好)通知后的2个服务周期内服务端点。端点服务周期的请求在它的端点描述符中描述。
超速维持中断管道下面的特性:
- 没有数据内容结构用于中断管道通信流
- 中断管道是一条流式管道,因此总是单向的。
中断传输包大小
中断传输端点指定了超速总线上可以接受的/发送的最大数据包大小,对于支持突发次数(burst size)大于1的中断端点,仅仅允许的最大数据包大小为1024字节;对于突发次数等于1的中断端点,最大数据包大小能为1到1024的任何值。中断端点允许的最大的突发次数是3. 所有的超速中断端点应该支持在范围[0-31]的顺序值。
超速中断端点只用来移动带有界限服务间隔的小数量数据。超速协议不要求中断事务处理的包为最大化大小(即不要求每个数据包都为1024字节大)。
主机被要求支持超速中断端点,主机应该支持所有允许的中断包大小和突发大小的组合。主机要确保在一次突发事务处理中发送到端点的数据包大小不能超过端点的最大数据包大小。在突发事务处理中主机也不能发送超过端点最大突发大小的数据包数量。
中断端点应该总是发送带有数据域小于等于端点最大数据包大小的包,如果中断传输有比适应端点最大数据包大小更多的信息,所有的突发事务处理的数据都要求为最大包大小,除了突发事务处理的最后一个数据包,就是包含剩下的数据。中断传输可以包含多个突发事务。
中断传输是在端点做以下几个完成的:
- 已经传输了所需精确的数据量
- 传输了比最大包尺寸小的数据包(短包)
- 应答STALL握手包
中断传输带宽需求
周期性端点(中断和同步)可以被分配到超速总线可利用带宽的80%。中断管道的端点通过端点描述符指定它想要的服务间隔,中断端点能指定一个想要的周期2(bInterval-1) x 125 μs,bInterval值是在范围1到(包含16)16。USB系统软件会在配置期间使用这个信息,决定能被采用的连续周期。被系统提供的周期可以缩到比设备想要的还短,最短到超速定义的周期大小(也是参考的总线轮询周期125μs)。注意总线上的错误能阻止中断事务处理在总线上的成功传输,因此超过了想要的周期。
超速中断端点在每个服务周期能提升到三个最大数据包的大小(3x1024bytes)。对于中断传输,主机没有方法决定端点是否在没有访问端点和请求一个中断传输下进行源/同步数据。如果一次IN中断端点没有中断数据要传输或者OUT中断端点没有充足buffer接受数据,当被主机访问的话,会以一个流控制进行应答。
当有中断数据挂起避免客户软件错误通知传输完成的时候,端点应该只提供中断数据。一个数据负载为零长度的数据包是一次有效传输,可以用来进行某些操作。主机可以在轮询服务周期中任何时刻访问一个端点。 中断端点不应该在尝试事务处理之间分配固定的空间。中断端点只能假定它在轮询服务周期会收到一次事务处理尝试。错误能阻止轮询服务周期中的数据成功传输,主机不被要求在同一个轮询服务周期中重新尝试事务处理,只在下一个轮询服务周期中重试事务处理。
中断传输数据流程
中断事务处理使用标准的突发流程进行可靠的数据传输。中断端点通过适当的控制传输(SetConfiguration, SetInterface, ClearEndpointFeature)被初始化成初始的发送或者接收顺序号值和突发大小。主机在完成了合适的控制传输后成功为中断管道设置初始的发送/接收序列号和突发大小。
超速中断管道停止条件和USB2.0定义的中断端点一样有相同的副作用。从停止条件中恢复也跟USB2.0相同(Section 5.7.5 in the Universal Serial Bus Specification, Revision 2.0.)。中断管道停止条件包含STALL握手包对事务处理应答或者对由于发送错误导致主机事务处理尝试次数的消耗的应答。