摘要:
针对USB2.0高速数据传输在实际应用中存在的具体问题,深入分析了诸如协议开销、带宽分配、工作环境、主机硬件结构和操作系统配置、设备驱动程序等影响速度提高的种种因素。同时重点阐述了USB2.0设备接口中端点FIFO通道和GPIF通用可编程接口的关键作用。并利用USB2.0控制芯片EZ-USB FX2进行了不同模式下数据传输的实验.最后在此基础上指出解决高速数据传输问题的几条对策。
1 引言
USB(Universal Serial Bus,通用串行总线)是计算机与其外设连接的一种新型接口技术。尽管在2000年4月27日发布的USB2.0规范中最高传输速度已经达到了480 Mbps(即60 MB/s)。但是很多USB2.0设备在实际工作时的数据传输速度却与此相差甚远。本文作者曾为此利用测试软件BusHound对诸如闪存盘、mp3、移动硬盘等典型USB2.0设备进行速度测试,其结果由表1给出。
由于USB2.0的实际数据传输速度与PC主机和USB设备的诸多因素有关,且其中任一个因素都有可能成为影响数据传输速度的瓶颈。因此对此进一步地深入探讨是很有必要的。
2 影响USB2.0数据传输速度的因素分析
(1)USB通信协议的开销
在USB数据通信的过程中,总线上传输的并不只是真正需要的数据信息,还要包括诸如同步信号、类型标识、校验码、握手信号等各种协议信息。因此实际数据传输的速率根本没有可能达到总线传输的极限速度480 Mbps。且对不同的传输类型,存在不同的协议开销。如在USB1.1协议下规定的每毫秒1帧中,对一个设备的中断传输只能进行一次,考虑中断传输的数据包为64Byte,故可算出这种传输的最大速度只有64 kB/s。
对USB2.0的情况,由于采用了微帧结构,每帧分为8个微帧,且中断传输在每个微帧下可以传输3个数据包,而每包的数据也增加到1024个字节,故可以算出USB2.0的中断传输的最大速度提高到8×3×1024 B/ms=24 MB/s。尽管与USB1.1的64 KB/s相比提高很大,却仍与480
Mbp(60 MB/s)相差很远。
如表2所示.USB2.0中最能体现高速传输特点的应属批量传输类型,其53.24 MB/s的理论传输速度上限可以说比较接近60MB/s的总线速度极限。因此,如果仅从获取最高数据传输的目标出发,应当选用批量传输工作方式。
(2)USB带宽的分配
USB协议规定。控制传输应确保在低/全速时能够使用10%的带宽,高速时能够使用20%的带宽。而批量传输并没有保留任何带宽。即批量传输只有在控制传输和其它传输不需要使用其带宽的情况下,方能使用剩下的带宽。因此,尽管总线闲置时批量传输可以在一段时间里尽快地传输大量的数据,但总线忙时批量传输就可能工作很慢。
通常PC主机可能同时使用诸如鼠标、键盘、摄像头、打印机和扫描仪等多种USB设备,它们分别采用不同的传输方式。可以设想.如果开始只有一个设备以批量传输方式独占系统的全部带宽。显然速度会很快(接近53 MB/s)。但如果新插入的若干设备需要使用控制传输全部20%的保留带宽,那么先前设备批量传输的可用带宽就会下降到原先的80%,传输速度可能变为42 MB/s以下。作为一种更极端情况是批量传输设备插入前,已有设备以控制传输方式完全占有了20%的保留带宽.其它设备也以中断或者同步传输方式共同占据了剩下的80%带宽,那么批量传输设备就会因为没有保留带宽,只能处于等待的状态。
USB的实时传输可以保证传输的速率恒定,而中断传输要求每帧或每个微帧都能为每个设备进行一次数据传输。因此确保主机对设备响应的实时性。然而实时传输和中断传输并不保留带宽。主机只有在总线确实能够分配足够带宽的情况下才会接受设备的通信要求。且实时传输不进行握手包的确认过程,因而不能确保数据传输的正确性。
(3)USB设备的使用环境
USB的使用环境也是需要考虑的一个重要因素,如果处于一个电磁环境非常复杂的使用场合。不可避免地会受到干扰而产生传输错误。尽管这种错误在大多数通信协议(控制、中断、批量传输)的管理下并不会影响通信的最终结果,但由此引发的重发、等待等纠错工作则会明显地影响数据传输速度.甚至发生堵塞的现象。因此,USB2.0设备和PC主机间最好采用带磁环的USB2.0专用连接线,且其长度最好限制在3 m-5 m 的范围内,这样受到的电磁干扰和噪声影响较小。纠错重发的概率也较小,数据传输的速度也就显得较快。
(4)PC主机本身的硬件结构与操作系统
PC主板的数据吞吐量高度取决于USB2.0主控制器在主板芯片组结构中的位置。在用来管理I/O设备和控制I/O总线通信的南桥芯片的_T作模式下. 当USB2.0主控制器挂在PCI总线时,虽然PCI总线132 MB/s的带宽处理USB1.1下12 Mbps的传输速度没有问题,但对USB2.0高速模式就会受到PCI总线带宽的限制。因此。较新的主板将USB2.0控制器与南桥芯片直接连接。从而消除PCI总线的带宽瓶颈。
目前PC机上大规模使用的Windows操作系统是非实时操作系统。存数据传输时,操作系统不能实时响应数据传输的请求。虽然从Windows98开始. 以及随后的Windows Me和Windows2000增加了对USB设备类的支持,但版本仍然是USB1.1。如需使用USB2.0设备,还需安装相应的USB2.0驱动程序。目前只有Windows XP的Service Pack1才能完全支持USB2.0。
(5)USB设备驱动程序
USB设备的驱动可以分为设备驱动程序、USB总线驱动程序、USB控制器驱动程序三个部分。如图1所示。应用程序通过使用Windows API函数与USB设备驱动程序对话。USB设备驱动程序通过调用驱动程序栈完成对设备的接口操作、数据读写和管理电源等功能。USB总线驱动程序(USBD.sys)和USB2.0控制器驱动程序由操作系统提供。设备驱动通过构造URB(USB Request Block),并传给总线驱动程序来完成与总
线驱动程序的通信。通常情况下设备驱动程序需要频繁产生中断。而设备驱动程序系统优先级并不高,当计算机负荷较重或者有其它优先级较高的中断发生时,它的中断得不到处理而需要等待。如果设备驱动程序向USB总线传递URB的时候设置一个较大的缓冲区.便可减少了中断的频率而减少等待时间。从而提高数据传输的速度。此外,调整驱动程序中诸如命令排队策略、改变请求包大小等措施,也能对USB的数据传输速度产生一定的影响。
(6)USB设备的硬件与固件
由于USB2.0的速度实在太快。一般单片机通过CPU的数据读写处理方式常常成为限制数据传输速度的瓶颈。因此为了实现USB设备与PC主机之间的高速传输,必须采用专门的接口电路和固件程序。