5.6 USB同步传输(Isochronous Transfers)
在非USB的环境下,同步传输意味着恒定速率、错误容忍(error-tolerant)的传输。在USB环境下,要求同步传输能提供以下几点:
•固定的延迟下,确保对USB带宽的访问。
•只要数据能提供得上,就能保证通道上的恒定数据传输速度。
•如果由于错误而造成传输失败,并不重传数据。
当USB同步传输类型被用来支持同步的源和目的时,使用这个传输类型的软件并不要求是同步的,4.10中将详细介绍USB上的同步数据的处理。
5.6.1 同步传输的数据格式
对于同步传输的通道(同步通道),USB并不对数据格式做要求。
5.6.2 同步传输的方向
同步通道是一种流通道,所以是单方向的。在对端点的描述中指明了与它相连的通道的数据流方向。如果设备要同步的双向流的话,只好用两个同步通道,一个流进,一个流出。
5.6.3 同步传输中包的大小的限制
同步通道的端点确定了数据区的最大长度,USB在设置端点期间,使用这一个信息,看是否可在每帧内为最大长度的数据区留下足够的时间。如果可以,设置端点成功;否则,不成功。
USB系统软件可为一个控制传输的通道调整最大数据区长度,但无法为同步通道进行如此调整。在确定的USB设置下,同步通道要么被支持,要么不被支持。
USB限制了同步通道的最大数据区长度为1023字节,表4-3列出了不同规格的同步传输,以及一帧内可能的最大传输数。表中未包括管理开销的字节。
表4-3同步传输限制
|
协议开销(9 字节) |
(2 SYNC bytes, 2 PID bytes, 2 |
||||
|
数据净荷区 |
最大带宽 |
Frame带宽/传输 |
最大传输数 |
剩余字节 |
有用字节 |
|
1 |
150000 |
1% |
150 |
0 |
150 |
|
2 |
272000 |
1% |
136 |
4 |
272 |
|
4 |
460000 |
1% |
115 |
5 |
460 |
|
8 |
704000 |
1% |
88 |
4 |
704 |
|
16 |
960000 |
2% |
60 |
0 |
960 |
|
32 |
1152000 |
3% |
36 |
24 |
1152 |
|
64 |
1280000 |
5% |
20 |
40 |
1280 |
|
128 |
1280000 |
9% |
10 |
130 |
1280 |
|
256 |
1280000 |
18% |
5 |
175 |
1280 |
|
512 |
1024000 |
35% |
2 |
458 |
1024 |
|
1023 |
1023000 |
69% |
1 |
468 |
1023 |
Max |
|
1500000 |
|
|
|
1500 |
并不是每一次的数据区都要达到最大长度。数据区的长度由发送者(客户软件或应用软件)决定,每次可以不同。USB可保证主机控制器看到的包有多长,在总线上传的包就有多长。数据的实际长度由发送者决定,可以小于早先协商好的最大长度。总线错误可以使接收者看到的长度比实际长度有了变化。但这些错误可被检测到。具体地讲,或者通过数据上的CRC码,或者让接收者预先知道实际应该的长度,以此进行检测。
5.6.4 同步传输的总线方向限制
只有高速设备可以使用同步方式。
USB设备要求一个帧内不能有超过90%的时间用于周期性传输(同步传输或中断传输)。
同步通道的端点描述自己的总线访问频率。所有的同步通道一般在一帧内传一个包(也就是说,1ms一个包)。但总线上的错误或者操作系统对客户软件调度上的延迟会造成一个帧内一个包也没有的情况。此时,设备将一个错误指示信息作为状态信息返回给客户软件。设备可以通过跟踪SOF(帧开始)信号来测到此类错误。如果两个SOF信号间无数据包,则出错。
总线频率和帧定时限制了一个帧内的同步传输的上限,在任何USB系统内,最多有150个单字节的数据区。但由于实现上的原因,主机控制器可能无法支持到理论上的最大传输数。
5.6.5 同步传输的数据顺序
同步传输不支持因总线错误而进行的重传。接收器可以判断是否发生了一个错误,低级的USB协议不允许有握手信号给同步通道的发送者。一般情况下,是可以有握手信号来通知发送者包是否被成功地接收。对于同步传输来说,定时比正确性和重传更重要。考虑到总线的错误率较低,协议就认为传输一般均能成功。同步接收者可以判断自己是否在一个帧内错过了一些数据,而且能知道丢失了多少数据。4.10节将有关于此的具体介绍。
因为没有用来指示引起中止的条件的握手信号,所以同步传输的端点从不途停止。虽然,错误信息可作为IRP的状态来报告,但同步通道不会因此停下。错误即使被查到,主机仍继续处理下一帧的数据。因为同步传输的协议不支持每次事务都进行握手,所以错误检测的功能可以相对弱一些。
USB开源项目
百合电子工作室曾在2009年推出了一个USB开源项目:Easy USB 51 Programer,此项目以开源的形式展示了USB通信的基础性内容、USB HID设备类固件程序开发及PC端应用程序开发、自定义USB设备类固件程序开发及PC端驱动程...
|
USB产品
EASY USB D12 是原EASY USB 51 PROGRAMER的升级版,是百合电子工作室历时一年精心设计的一款USB学习板/开发板,与老款相比,其实例更丰富,技术文档更详尽,更重要的是此款USB学习板还提供技术支持。......
|