USB2.0规范中的传输速度是480 Mbps(即60 MB/s)。但实际工作中很多USB2.0设备的数据传输速度远非如此。比如在PC上用u盘拷贝东西,往往比60mb/s慢很多,这是为什么?其实想一想也能
USB2.0规范中的传输速度是480 Mbps(即60 MB/s)。但实际工作中很多USB2.0设备的数据传输速度远非如此。比如在PC上用u盘拷贝东西,往往比60mb/s慢很多,这是为什么?
其实想一想也能知道一些原因。USB总线只有一对差分线来传输数据。只需要同时支持各种设备(在USB HUB下挂多个从设备就可以同时使用一个USB主机设备),支持双向传输。必须有一个复杂的协议,协议上的开销必须相当高。此外,单个设备只能获得部分传输带宽。
一般来说有以下几个因素:USB协议开销、USB带宽分配、硬件结构和USB设备驱动
USB协议开销在USB数据通信过程中,并不是所有的有效信息都在总线上传输,还有各种协议信息如同步信号、类型标识、校验码、握手信号等。所以实际数据传输速率不可能达到480 Mbps的总线传输极限速度。并且对于不同的传输类型有不同的协议开销。
USB有四种传输方式:控制传输、批量传输、中断传输和同步传输。
根据USB协议,USB2.0的tell模式一秒有8个微帧,模式4的最大传输速度计算如下:
传输类型 数据包长度 /Byte 每微帧最大传输次数 最大速度 /(MB/s)
控制传输
64 31 15.137
中断传输
1024 3 23.436
批量传输
512 13 50.781
同步传输
1024 3 24.436
传输:控制传输是双向传输,通常数据量较小。主要用于查询、配置和向USB设备发送通用命令。
中断传输:中断传输模式主要用于定时查询设备是否有中断数据要传输。这种传输方式适用于小型、分散、不可预测的数据传输场合。键盘、鼠标等。
批量传输:访问USB总线时,与其他传输类型相比,优先级最低。USB主机总是优先考虑其他类型的传输,只有在总线带宽富余的时候才会批量传输,打印机,扫描仪,存储设备等。被安排。
同步传输:同步传输适用于以固定速率传输的数据,并且可以容忍偶尔的错误。实时传输一般用于UVC相机等设备。数据出错时不会重新传输。
USB带宽的分配USB协议规定控制传输要保证10%的带宽可以在低/全速下使用,20%的带宽可以在高速下使用。批量传输不预留任何带宽。即当控制传输和其他传输不需要使用其带宽时,批量传输只能使用剩余的带宽。因此,虽然批量传输可以在总线空闲的一段时间内尽快传输大量数据,但在总线繁忙时,批量传输可能会工作得非常慢。
通常主机同时使用鼠标、键盘、摄像头、打印机、扫描仪等多种USB设备,采用不同的传输方式。刚开始的时候,如果只有一个设备通过批量传输的方式独占系统的整个带宽,速度会很快(接近53 MB/s)。但是,如果新插入的设备需要将20%的预留带宽全部用于控制传输,那么之前设备批量传输的可用带宽将下降到原来的80%,传输速度可能会变成42 MB/s以下,更极端的情况是,在批量传输设备插入之前,现有设备通过控制传输的方式完全占用了20%的预留带宽。其他设备也是以中断或同步传输的形式占用剩下的80%带宽,所以批量传输设备会因为没有预留带宽而不得不等待。
硬件构造其实常用USB接口的硬件结构如下图所示。有很多设备挂在一个USB HUB下面,甚至我们用PC的时候直接用电脑的USB接口。那也是因为厂商把USB HUB内置到了PC里面,所以才会有这么多USB接口。
USB HUB外设(设备端)所有数据之和与主机端相同,主机端不能超过480Mb/s,所以480Mb/s的速度是大家共享的,而不是一个人独享的。
USB设备驱动程序
USB设备驱动程序可以分为三部分:设备驱动程序、USB总线驱动程序和USB控制器驱动程序。应用程序通过使用API函数联系USB设备驱动程序。USB设备驱动程序通过调用驱动程序向设备读写数据。USB总线驱动程序和USB2.0控制器驱动程序由操作系统提供。设备驱动通过构造URB(USB请求块)并将其发送给总线驱动来完成与总线驱动的通信。
通常,设备驱动程序需要频繁中断。但是设备驱动系统的优先级并不高。当计算机负载过重或发生其他高优先级中断时,其中断无法处理,需要等待。如果设备驱动程序在将URB传输到USB总线时设置一个较大的缓冲区,则可以减少中断频率并减少等待时间。从而提高数据传输的速度。此外,驱动程序中的一些措施,如调整命令排队策略、改变请求包的大小等,也会对USB的数据传输速度产生一定的影响。
综上所述,480 Mbps是USB2.0总线速度的上限。考虑到通信协议的开销,实际数据传输速度理论上只有53 MB/s(426Mbps)。在实际综合条件下,15 MB/s到25 MB/s可以作为合理的高速目标。