USB2.0规范中传输速度是480 Mbps(即60 MB/s)。但是很多USB2.0设备在实际工作时的数据传输速度却与此相差甚远,比如用PC用U盘拷个东西,往往比60MB/s慢很多,这是为什么呢?

其实想想也能知道一些原因,USB总线中传输数据的就一对差分线,单是其要同时支持各种设备(一个USB HOST设备通过USB HUB下面挂多个从设备是可以同时用的),支持双向传输,必然存在复杂的协议,协议上面的开销肯定不少,另外对于其中的单个设备来说也只能得到部分传输带宽。

总的来说,主要有以下几个因素:

USB协议开销,USB带宽的分配,硬件结构,USB设备驱动程序

USB协议开销

在USB数据通信的过程中,总线上传输的并不是所有都是有效信息,还要包括诸如同步信号、类型标识、校验码、握手信号等各种协议信息。因此实际数据传输的速率根本没有可能达到总线传输的极限速度480 Mbps。且对不同的传输类型,存在不同的协议开销。

USB有4中传输模式:控制传输、批量传输、中断传输、同步传输。

根据USB协议,USB2.0的告诉模式,1秒有8个微帧,计算4中模式的最大速度传输如下:

传输类型

数据包长度/Byte

每微帧最大传输次数

最大速度/(MB/s)

控制传输

64

31

15.137

中断传输

1024

3

23.436

批量传输

512

13

50.781

同步传输

1024

3

24.436

控制传输:控制传输是双向传输,数据量通常较小,主要用来进行查询、配置和给 USB 设备发送通用的命令。

中断传输:中断传输方式主要用于定时查询设备是否有中断数据要传送,该传输方式应用在少量的、分散的、不可预测的数据传输场合。键盘,鼠标等。

批量传输:在访问USB总线时,相对其他传输类型具有最低的优先级,USB HOST总是优先安排其他类型的传输,当总线带宽有富余时才安排批量传输,打印机,扫描仪,存储设备等。

同步传输:同步传输适用于以固定速率传输,可以容忍偶尔错误的数据上。实时传输一般用于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的外设(Device端)所有的数据之和是和HOST端一样的,而HOST端也不能超过480Mb/s,所以480Mb/s的速度是大家共享的,而不是独享。

USB设备驱动程序

USB设备的驱动可以分为设备驱动程序、USB总线驱动程序、USB控制器驱动程序三个部分。应用程序通过使用API函数与USB设备驱动程序联系。USB设备驱动程序通过调用驱动程序完成对设备的数据读写。USB总线驱动程序和USB2.0控制器驱动程序由操作系统提供。设备驱动通过构造URB(USB Request Block),并传给总线驱动程序来完成与总线驱动程序的通信。

通常情况下设备驱动程序需要频繁产生中断。而设备驱动程序系统优先级并不高,当计算机负荷较重或者有其它优先级较高的中断发生时,它的中断得不到处理而需要等待。如果设备驱动程序向USB总线传递URB的时候设置一个较大的缓冲区.便可减少了中断的频率而减少等待时间。从而提高数据传输的速度。此外,调整驱动程序中诸如命令排队策略、改变请求包大小等措施,也能对USB的数据传输速度产生一定的影响。

综上所述,通常所说的480 Mbps是USB2.0总线速度的上限.考虑通信协议的开销后,实际数据的传输速度存理论上最高也只有53 MB/s(426Mbps).实际综合条件下15 MB/s至25 MB/s都可以作为合理的高速目标。

更多资料,微信公众号:硬件工程师炼成之路。

USB2.0实际传输速度为什么与480mbps相差甚远相关推荐

  1. USB2.0实际传输速度

    USB2.0规范中传输速度是480 Mbps(即60 MB/s).但是很多USB2.0设备在实际工作时的数据传输速度却与此相差甚远,比如用PC用U盘拷个东西,往往比60MB/s慢很多,这是为什么呢? ...

  2. usb3.0传输速度测试软件,USB3.0与USB2.0的传输速度对比测试

    USB 3.0对多数电脑爱好者都已经不陌生,发布也有段时间了,多数朋友大概都还只知道USB 3.0接口传送数据能力比USB 2.0接口快很多,但到底有多快,可能就很少人知道了.下面小编就为大家介绍一下 ...

  3. usb2.0移动硬盘数据传输速度因素

    数据从移动硬盘向台式机硬盘拷贝的过程中,有以下几个步骤,每个步骤都会影响到实际的传输速率 1. 移动硬盘本身的读写速度 (5400转硬盘一般为15MB/s到30MB/s) 2. USB 2.0传输线的 ...

  4. USB3.0接口传输速度慢

    新添置了移动硬盘,在自己电脑上文件传输速度很慢,伙伴说他那的速度是嗖嗖的,但是我这却"慢"的要死(相对于u盘的传输速度还是快的),这是什么原因呢? 将硬盘在伙伴那进行测试,发现速度 ...

  5. 解决USB3.0接口传输速度慢的问题

    据说,影响传输性能的原因可能是电脑USB接口供电不足. 一般情况下,笔记本/台式电脑为了节省电源,USB接口都是默认情况下是"节省状态",所以有可能造成文件传输速度慢. 具体设置如 ...

  6. USB2.0传输速率

    USB2.0与USG3.0速率 USB 2.0分为三种: USB 2.0低速版(Low-Speed) :1.5Mbps(192KB/s)   USB 2.0全速版(Full-Speed) :12Mbp ...

  7. 基于FPGA的USB2.0数据传输(通过本文可以自己设计USB2.0模块)

    文章部分内容参考了相关论坛中的内容: 对文章中内容感兴趣或者有不懂的可以咨询QQ:2859340499 B站对应讲解本文视频链接 首先来说一下USB这个大家都知道的东西吧: USB通用串行总线,是应用 ...

  8. USB2.0传输带宽

    摘要:针对USB2.0高速数据传输在实际应用中存在的具体问题,深入分析了诸如协议开销.带宽分配.工作环境.主机硬件结构和操作系统配置.设备驱动程序等影响速度提高的种种因素.同时重点阐述了USB2.0设 ...

  9. 计算机usb接口充电效率差,usb2.0和3.0的区别 从传输速度和充电效率等来区别

    在选择电脑主板的时候,一般都会看一下主板的USB接口是2.0还是3.0.很多人都知道3.0应该比2.0要好,那么具体好在哪里,usb2.0和usb3.0的区别有哪些?下面将从传输速度.充电效率和接线接 ...

最新文章

  1. javaweb项目开发日志的原理,方式
  2. 用Python分析了1w四六级数据,教你如何通过四六级!
  3. 宁德时代机器人编程开发_全球首例丨可编程的活体机器人已诞生,100%青蛙基因,超级计算机时代,将无所不能?!...
  4. Objective-C中的内存管理
  5. 一道面试题:用多种方法实现两个数的交换
  6. linux c 线程同步的三种方法
  7. SQL Server 个人手册
  8. python 接口测试多线程_python多线程测试接口性能,就是这么简单
  9. JVM从入门到精通(三):热加载的实现原理,Java内存模型,缓存行,指令重排,合并写技术等
  10. [AT2567] [arc074_c] RGB Sequence
  11. php mysql csv_php导入csv到mysql数据库
  12. iOS Swift JSON解析教程
  13. 单一世界十万在线webgame的设计思路(五)-- 整体架构和总结
  14. minimax算法和Alpha-Beta pruning实现英式跳棋
  15. UnavailableInvalidChannel: The channel is not accessible or is invalid. channel name: conda-forg ch
  16. 英语句子摘抄——书虫系列
  17. 微信JSAPI支付调不起收银台问题
  18. B/S文件上传下载解决方案
  19. tcl/tk参考——tcl内建命令
  20. Fragment 可见性监听方案 - 完美兼容多种 case

热门文章

  1. 易语言 json取成员数 根节点就是数组
  2. 软件构造(Java)——50道100以内的加减法口算习题(升级版)
  3. 中国全自动洗地机器行业现状调研及趋势分析报告
  4. maven 安装jar 及 下载jar地址
  5. 胡乱折腾之后,你的脸蛋憔悴了几分?
  6. c语言15除以2得到8,C语言程序设计100例之(15):除法算式
  7. 【Aegisub相关】loop修饰语实现对应的源码
  8. Mac电脑解决Google翻译失效实用方法
  9. Unity中传送带的实现
  10. python环境问题(环境切换)