5.8 USB批量传输(Bulk Transfers)
为了支持在某些在不确定的时间进行的相当大量的数据通信,于是设计了批量传输类型。它可以利用任何可获得的带宽。批量传输有以下几点特性:
•以可获得带宽访问总线。
•如果总线出现错误,传送失败,可进行重发。
•可以保证数据必被传送,但不保证传送的带宽和延迟。
只当有可获得的带宽时,批量传输才会发生。如果USB有较多的空闲带宽,则批量传输发生地相对频繁,如果空闲带宽较少,可能有很长时间没有批量传输发生。
5.8.1 批量传输的数据格式
USB没有规定批通道上数据流的格式。
5.8.2 批量传输的方向
批通道是一种流通道,所以总是单方向的。如果要进行双向传送,必须用两个通道。
5.8.3 批量传输对包长度的限制
批量传输的端点决定自己可以接收或传送的最大数据净负荷区长度。USB规定最大的批数据净负荷区的长度为8、16、32或64字节。这个最大长度是指数据包中数据区的最大长度,不包括协议要求的一些管理信息。
批端点必须支持规定的最大长度中的一个,这个长度将在端点的设置信息中说明。USB并不要求每个数据净负荷区都达到最大长度,即如果不够长度的话,不必填充至最大长度。
所有主机控制器必须分别支持8、16、32或64作为最大长度,而对更大或更小的长度可以不必支持。
在设备设置期间,USB系统软件读取端点的最大数据净负荷区长度,以保证以后传送的数据净负荷区不会超长。
端点传送数据区的包不能超过端点的w Max Packet Size的值。如果一个批量传输的IRP要传送的数据大于一个数据区的最大长度,那么要分几个数据净负荷区来传,除最后一个区外,前几个都达到最大长度。而最后一个包含剩下的数据。如果出现以下情况,则认为批量传输结束:
•已传的数据量恰好等于期望传送的量。
•传了一个不到w Max Packet Size长度的包或传了一个长度为0的包。
一旦批量传输结束,主机控制器中止当前的IRP,并开始下一个IRP。如果收到的一个数据净负荷区超长,则所有在等待此端点的批量传输IRP都将被中止/取消。
5.8.4 批量传输对总线访问的限制
只有高速设备可以使用批量传输。
端点无法提出对批通道的总线访问频率的要求。USB会协调所有批量传输和正等待的IRP的总线访问请求,以获得在客户软件和应用层之间的“最佳”传送效果。总线上的控制传送的优先级比批量传输高。
对于控制传送,有可保证的传送时间,而对批量传输,没有。只有当有可用的总线带宽时,批量传输才发生。如果有段时间没有被用于其他目的,这段时间将用于批量传输。如果正等待的各个批量传输是要往不同的端点去的,主机控制器将根据公平访问原则,安排它们的顺序。至于公平访问原则的具体内容,由主机控制器的实现决定。
统中的所有批量传输是竞争同一个可用的总线时间的,所以USB系统软件可以改变对某个特定端点进行的批量传输所占有的总线时间。所以端点和它的客户软件不能够期望有一个特定的批量传输的速度。当有设备被加进或移出USB系统或出现对其它设备上端点的请求时,端点和它的客户软件可获得的总线时间将起一定变化。但客户软件不能主观地认为批量传输与控制传送的顺序,有时,批量传输会在控制传送之前进行。
总线频率和帧定时限定了在一帧内可进行的最大批处理事务的数量,即一帧内8字节数据净负荷区须少于72个,表4-6列出了不同规格的批处理事务的情况,以及一帧内可能的最大的事务数。数据中不包括管理开销的字节。
表4-6批量传输限制
|
协议开销(13字节) |
(3 SYNC bytes, 3 PID bytes, 2 Endpoint+CRC |
||||
|
数据净荷区 |
最大带宽 |
Frame带宽/传送 |
最大传送数 |
剩余字节 |
有用数据 |
|
1 |
107000 |
1% |
107 |
2 |
107 |
|
2 |
200000 |
1% |
100 |
0 |
200 |
|
4 |
352000 |
1% |
88 |
4 |
352 |
|
8 |
568000 |
1% |
71 |
9 |
568 |
|
16 |
816000 |
2% |
51 |
21 |
816 |
|
32 |
1056000 |
3% |
33 |
15 |
1056 |
|
64 |
1216000 |
5% |
19 |
37 |
1216 |
Max |
|
1500000 |
|
|
|
1500 |
对于某个批量传输,主机控制器可以自由地决定它们的各个事务在某帧或某几个帧中被传送。端点可能在一帧内看到某个批量传输的各个事务,或发现它们跨几个不同的帧。由于实现上的原因,主机控制器可能无法支持到理论上的每帧最大事务数。
5.8.5 批量传输的数据顺序
批量传输利用toggle位机制来保证接收器和发送器同步,即使在有错发生的情况下,也是如此。当端点被适当的控制传送设置过后,批量传输被初始定位在DATA0,主机也将从DATA0开始第一个批量传输。如果传送错误而导致出现一个能引起中止的条件或设备发了一个STALL握手信号,所有等待的IRP将被取消。软件通过一个独立的控制通道来清除中止条件,恢复之后,主机和设备的数据toggle都被定位在DATA0。
如果出现了一个影响事务的总线错误,批量传输将被中止。
USB开源项目
百合电子工作室曾在2009年推出了一个USB开源项目:Easy USB 51 Programer,此项目以开源的形式展示了USB通信的基础性内容、USB HID设备类固件程序开发及PC端应用程序开发、自定义USB设备类固件程序开发及PC端驱动程...
|
USB产品
EASY USB D12 是原EASY USB 51 PROGRAMER的升级版,是百合电子工作室历时一年精心设计的一款USB学习板/开发板,与老款相比,其实例更丰富,技术文档更详尽,更重要的是此款USB学习板还提供技术支持。......
|