摘要:针对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主机之间的高速传输,必须采用专门的接口电路和固件程序。 3 通用USB2.0设备控制器的高速工作模式 EZ-USB FX2是一种支持USB2.0的微控制器,FX2内部集成了USB2.0收发器、智能串行接口引擎(SIE)、增强型8051内核、8.5 KB的RAM、4 KB的FIFO存储器、I/O端口、I2C总线接口、8/16位数据总线和通用可编程接口(GPIF)等,最终通过通用的标准ATA接口连接外部电路,以适应不同的用户功能。 这里串行接口引擎SIE负责完成诸如串行数据的编码和解码,差错控制,位填充等支持USB底层协议的功能。数据传输则通常需要微处理器通过固件访问接口芯片中的端点FIFO, 也需要微处理器通过固件访问外围设备的接口电路,正如图2中标识符② 和③所示的数据传输路线。然而,这种工作方式会因微处理器固件程序执行较慢而限制数据传输速率的提高,且在高速时显得格外突出。 为了适应USB2.0高速数据传输的需要.这里采用了一种特殊的数据传输模式,如图2中标识符①所示的数据传输路线,此时无需执行内部8051固件程序便可直接实现端点FIFO与外部的数据交换。从而很好地解决了普通微处理器转发方式造成的带宽瓶颈。 实际电路结构中,4 KByte的端点FIFO可以通过固件程序配置成多重缓冲的形式,这种结构可有效地提高USB带宽的性能,平滑带宽的抖动,并减少通信等待的时间。具体控制分为从机模式和主机模式两种。主机模式是指利用FX2内部集成的通用可编程接口GPIF(General Programmable Interface)产生时序逻辑信号来控制与外围设备的数据传输。从机模式则指利用外部信号控制端点FIFO与外设之间的数据传输。 GPIF可包含8个时序状态,支持控制输出线CTL、状态输入线RDY和地址信号ADR,构造的各种时序逻辑信号可以有效地支持16位数据总线的双向操作。描述GPIF波形的数组称为波形描述符,可以在设备初始化时同固件程序一起下载.GPIF将根据其表达的时序逻辑关系,执行相应的控制作用。 FX2的固件程序是设备运行的核心.担负着处理USB驱动程序的请求,执行应用程序的控制指令,完成数据的读写操作,以及根据需要启动GPIF周期.实现端点FIFO与外界的数据交换等功能。固件程序并不经常参与数据传输的具体过程.通常仅起检测、判断的作用,决定GPIF的工作在何时开始.何时停止。 4 USB2.0高速数据传输的速度测试 USB2,0速度测试的基本方法是通过PC主机上的测试软件,记录该PC主机与某USB设备在固定时间内交换的数据信息流量,进而算出实际使用中的数据传输速度。这里采用的速度测试软件是美国Perisoft公司提供的一种名为Bus Hound的总线分析测试软件.其界面如图3所示.这个软件在运行中不会对设备的工作产生任何影响。用该软件来观察USB设备工作情况,可以直接读取当前USB设备输入输出的数据量大小、数据传输速度和设备属性等信息。 本文为USB2.0实际传输速度的具体测试流程如图4所示。利用EZ-USB FX2控制芯片开发的USB2.0设备通用控制器和一台PC机。用一根大约2 m长的带磁环的USB2.0专用连接线连接在一起。PC机的硬件配置是Intel P4 2.4 GHz的CPU,基于Inte1848芯片组的主板,主板上带有支持高速模式的USB2.0接口,256 M DDR333内存. 操作系统是WindowsXP SP1。主机设备驱动程序采用Cypress公司为FX2系列控制器提供的通用驱动程序ezusb.sys。其中数据缓冲区设为64KB,应用程序用VC编写,其作用是向USB接口控制器发送需要数据上传的指令和上传数据量的大小后。将数据从USB设备读到PC之中。作为USB设备的FX2的固件程序在Keil集成开发环境中开发。应用GPIF进行逻辑控制.并将所用端点6设为单区容量大小为512Byte的4重缓冲模式。固件程序的功能只是将来自并行数据线的数据源源不断地送往USB的端点FIFO中。 在固件程序设计中首先采用图2中标识符②和③所示的数据传输模式.测得的数据传输速度一直在200 KB/s以下。然后采用图2中标识符①所示的数据传输模式,在实验中让PC主机多次重复采集大量数据。以提高速度测试的准确性。在PC机不接其它USB设备一次采集数据的量为650.2 Mbyte的情况下,USB2.0总线的实际数据传输速度最高达到了25.5 MB/s,即204Mbps。 5 结束语 综上所述,这里强调几点看法:首先,人们通常所说的480 Mbps是USB2.0总线速度的上限.考虑通信协议的开销后,实际数据的传输速度存理论上最高也只有53 MB/s(426Mbps).实际综合条件下15 MB/s至25 MB/s都可以作为合理的高速目标。其次,为了追求数据的高速传输时应当考虑采用批量方式.但在多设备同时工作的场合考虑实时响应.USB2.0下的中断方式也是不错的选择。再者,USB设备中微处理器转发数据的传统方法不能适应高速数据传输的要求,必须建立USB端点FIFO和应用数据通道之间的直接联系。另外,为了真正实现数据的高速传输.必须综合考虑PC主机本身的软硬件配置、设备驱动程序开发和实际工作环境。
|