USB2.0实际传输速度

2023-05-16

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都可以作为合理的高速目标。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

USB2.0实际传输速度 的相关文章

  • STM32 uart空闲中断

    文章目录 目的 xff1a 前提 xff1a 相关代码 xff1a 使能UART IT IDLE中断中断处理函数中添加回调回调处理函数 目的 xff1a 使用UART空闲中断接收不定长消息 前提 xff1a stm32CubeMX工具配置u
  • 远程访问如此简单,通过 ZeroTier 和 Tailscale 轻松组建虚拟局域网,实现内网穿透。

    因为最近用了 Plex 所以研究了一下远程访问 xff0c 经过一番折腾基本上算是搞明白了 xff0c 在这里分享一些自己的经验给和我一样的小白 xff0c 如果有不对的地方欢迎指正 这里的远程访问是指在局域网外通过网络访问局域网 xff0
  • 组网必看,有线 MESH 全攻略。

    之前写过几篇关于 MESH 组网的文章 xff0c 主要讲解了如何布线 xff0c 路由器和光猫 交换机等设备应该怎样连接 xff0c 但通过大家的反馈我发现我漏掉了一个重点 xff0c 就是光猫和路由器应该如何设置 xff0c 这也是很多
  • 给 iOS 装上旧版 APP,十年前的 iPad mini 重获新生!

    不知道有没有人像我一样 xff0c 还留着五年前 十年前的老 iPad 老 iPhone xff0c 如果有 xff0c 你们一定知道有些老 iPad 老 iPhone 已经停在一个系统版本无法再继续升级了 xff0c 或者因为害怕升级变卡
  • Stable Diffusion WebUI 1.4「gradio」报错解决方案

    今天有很多朋友在运行 Stable Diffusion WebUI 1 4 时都遇到了 ModuleNotFoundError No module named 39 gradio 39 这个报错 xff0c 在这里给大家一个解决方案 xff
  • 如何在 macOS 使用 AList + RCLONE 把网盘挂载到本地

    之前接触最多的可能还是百度网盘 xff0c 它的免费容量比较大 xff0c 我们在下载和分享一些文件的时候经常会用到 xff0c 但是如果文件比较大 xff0c 加上限速 xff0c 使用体验并不算太好 其实除了下载文件 xff0c 我很少
  • jdk 安卓sdk 安装

    https www cnblogs com gufengchen p 11038029 html jdk sdk安装详细步骤 https www jianshu com p 8fb367a51b9f utm campaign 61 haru
  • 通过 Plex + Trakt 同步观看状态和评分,轻松记录你的追剧观影史

    喜欢看电影 追剧 追综艺的朋友想必都有做记录的习惯 xff0c Plex 的用户里用豆瓣的人估计不少 xff0c 使用豆瓣标记电影 写影评 短评和参与线上讨论是非常方便的 xff0c 但是豆瓣对电视剧的支持相对还是比较弱 xff0c 很多剧
  • macOS 如何设置 AList、RCLONE、xTeVe 开机启动后台运行

    之前和大家分享了 macOS 上 AList RCLONE xTeVe 的使用教程 xff0c 他们基本上都是通过终端命令或者 Unix 可执行文件运行的 xff0c 启动后需要保持运行状态才能持续提供服务 xff0c 今天分享一下如何让它
  • zynqmp zcu102 SD卡驱动调试

    新板卡使用sdhci0 xff0c 以前是sdhci1 xff0c 由于官方没有使用sdhci0所以需要手动添加设备树 xff1a amp sdhci0 clock frequency 61 lt 60000000 gt status 61
  • zynqmp zcu102 arm linux (uboot网卡输出调试信息)

    需求 xff1a 使用网卡输出自检 调试信息 由于uboot启动完成就退出运行 xff0c 进入Linux启动 xff0c 不是进入消息循环处理网络协议栈 xff0c 且没有现成的udp接口发送数据 xff0c 所以想在启动中输出调试信息调
  • libiec61850-1.4 库的使用和修改(goose)

    目的 xff1a 使用libiec61850 1 4 库接收和发送goose数据 xff0c 环境Ubuntu 18 04 4 LTS 问题 xff1a 使用libiec61850 1 4 examples goose publisher例
  • zynqmp zcu102 arm 裸机SD卡驱动

    1 加载PL端提供的 HDF 2 创建hello world例程 xff08 bsp xff09 3 在main函数中调用驱动初始化sd卡 void mmc test void s32 Status XSdPs InstancePtr XS
  • ubuntu / 麒麟 播放PCM音频文件

    ubuntu18 04 麒麟 播放PCM音频文件 xff0c 源码来源于网友文章再修改 xff0c 仅测试用 xff01 如果应用在产品上需要再优化 最简单的SDL2播放音频的例子 xff08 SDL2播放PCM xff09 Simples
  • QT中关于close()系统调用 和qt close()冲突

    参考 xff1a 点击打开链接 xff08 http bytes com topic c answers 856501 use close int unistd h qt xff09
  • 解决QScrollArea不能出现滚动条的问题

    转载 xff1a QScrollArea实在是一个非常强大的控件 xff0c 节省了很多重复工作 但如果使用Qt Creator中的ui designer来制作界面的话 xff0c 就会出现滚动条无法出现的问题 而在 C 43 43 GUI
  • QT子窗口全屏显示与还原问题

    子窗口全屏显示 vws gt setWindowFlags Qt Dialog vws gt showFullScreen 之后窗口还原时调用 this gt showNormal 对顶级窗口有效 this gt setWindowFlag
  • 设置系统屏幕关闭及系统休眠时间

    include lt Powrprof h gt pragma comment lib 34 PowrProf lib 34 DWORD lockTime 61 0 void SetPowerPolicy SYSTEM POWER POLI
  • 如何编译和运行C++程序

    如何编译和运行C 43 43 程序 C 43 43 和C语言类似 xff0c 也要经过编译和链接后才能运行 我们在C语言课程的时候 xff0c 讲了如何使用 VS VC 6 0 VC 43 43 2010等常见开发工具 xff0c 它们除了
  • 简单理解socket(AF_INET&SOCK_STREAM,SOCK_DGRAM)

    套接字 在任何类型的通信开始之前 xff0c 网络应用程序都必须创建套接字 套接字最初是为同一主机上的应用程序所创建 xff0c 使得主机上运行的一个程序 xff08 又名一个进程 xff09 与另一个运行的程序进行通信 这就是所谓的进程间

随机推荐

  • 为什么编程语言中需要堆和栈

    概述 在我们学习 C C 43 43 和 Java 等编程语言的时候经常要学习一个概念就是堆和栈 xff0c 对于大部分经验丰富的工程师来说 xff0c 堆和栈是再熟悉不过的东西了 xff0c 堆和栈都是存储程序运行时变量的地方 但这个时候
  • GT1050 PointPillar成功运行

    目的 之前在感知这里主要是考传统的算法 xff0c 但是遇到了瓶颈 xff0c 计算效率提不上来 xff0c 所以尝试一下其他的方法 目前看到pointpillar这种方法效果比较好 xff0c 就打算尝试一下 跑通测试一下效果 piont
  • 使用离线数据测试apollo7.0

    https zhuanlan zhihu com p 510712104 cd apollo 视觉测试 xff1a 1 启动dreamview 并选择车辆和地图 scripts bootstrap sh 2 启动transform模块 cy
  • 相机、激光雷达坐标系相互转换

    目录 读入外参和摄像头内参配置文件读入TF读入 激光雷达坐标系转到摄像头坐标系摄像头坐标系转到激光雷达坐标系 读入外参和摄像头内参 配置文件读入 std span class token double colon punctuation s
  • C++ thread的方式

    多线程的实现方式 xff0c 只做记录 xff0c 自己看 目录 第一种 在类中实现多线程第二种 在类外第三种 没有类第四种 pthread 定时触发总结附录 第一种 在类中实现多线程 新建thread对象 xff0c 传入类的成员函数名称
  • zynq 在ubuntu下移植ubuntu操作系统

    米联客的配套的文件是osrc lab 1 配置路径 在setting64 sh中把路径给更改一下 这里就是 改成ubuntu 并运行surce settings64 sh 2 rootfs 执行脚本 cfg rootfs sh 然后make
  • zynq 维修调试记录 客服支持 工作记录

    米联的板子用底板供电 xff0c 用JTAG往里面下程序 的时候也出现了如下问题 xff1a 跟客服进行沟通 xff0c 客服的回答是 xff1a 一般是两种可能 xff0c 一个是开发板坏了 xff0c 进行如下操作 xff0c 操作的程
  • ubuntu 16.04 安装apollo3.0(发布版)

    参考官网文档 xff1a https github com ApolloAuto apollo tree master docs https github com ApolloAuto apollo blob master docs how
  • 关于malloc返回地址无法访问

    正常情况下使用malloc申请内存 xff0c 要么是申请成功返回有效地址 xff0c 要么是内存申请失败 xff08 内存不足 xff09 返回NULL 如果出现返回了地址却无法访问的情况 xff0c 很有可能是前面代码访问内存时出现了越
  • docker里面安装Qt Creator

    sudo apt get install qt5 default qtcreator
  • 软连接ln -s 创建以及删除

    在 usr local 创建软连接 链接到 usr local include test dst文件夹 phe 64 phe usr local sudo ln s usr local include test dst test sourc
  • CAN报文:数据帧详解

    CAN报文 xff1a 数据帧详解 CAN报文CAN帧类型数据帧帧起始 Start Of Frame 仲裁段控制段数据段CRC段ACK段帧结束 End Of Frame CAN报文 CAN使用的是两条差分信号线 xff0c 只能表达一个信号
  • I2C总线和SPI总线

    I2C串行总线一般有两根信号线 xff0c 一根是双向的数据线SDA xff0c 另一根是时钟线SCL I2C协议 2条双向串行线 xff0c 一条数据线SDA xff0c 一条时钟线SCL SDA传输数据是 大端传输 xff08 字节高位
  • APM飞控学习之路:2 四旋翼的工作原理与系统组成

    一叶障目 xff0c 不见泰山 在研究四旋翼飞行器之前 xff0c 有必要从整体介绍其工作原理 主要部件 技术名词等基础知识 不然就像羊入虎口 xff0c 陷入一大堆不同层次的资料 xff0c 难觅出口 接下我就抛砖引玉 xff0c 尽自己
  • APM飞控学习之路:4 源码裁剪与下载

    月盈则亏 xff0c 水满则溢 当博主编译完成 xff0c 以为离成功更近一步准备下载的时候 xff0c 殊不知陷阱也早已准备好 xff0c 等待我的踏入 连上USB线 xff0c 下载 xff0c timeout xff0c timeou
  • 详解STM32CubeIDE 中 HAL库的串口中断接收函数 HAL_UART_Receive_IT

    MX串口配置方法见 xff1a CubeIDE 利用自带HAL库 串口收发 一 代码自动生成以后的项目及代码结构 xff1a main c中 xff0c 调用了串口初始化 串口初始化函数赋值了串口的参数 相当于底层的初始化 xff0c 配置
  • RTK-Real Time kinematic实时动态

    目前 xff0c GNSSj接收机约99 的时间都用作RTK模式进行测量 xff0c 只有1 的时间用作静态测量做控制网等 所以 xff0c 大部分人都习惯把GNSS接收机喊成RTK了 不过除去GNSS接收机 xff0c 你知道RTK是什么
  • USB-PD3.0(Power Delivery)充电协议

    USB PD xff08 Power Delivery xff09 是基于USB Type C的一种电源供电标准 xff0c 最大供电功率可达100瓦 xff08 W xff09 xff1b 随着USB Type C的普及 xff0c 越来
  • Lua ---- LFS库的使用

    lfs attributes filepath aname 获取路径指定属性 lfs chdir path 改变当前工作目录 xff0c 成功返回true xff0c 失败返回nil加上错误信息 lfs currentdir 获取当前工作目
  • USB2.0实际传输速度

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