来源:公众号【鱼鹰谈单片机】

作者:鱼鹰Osprey

ID   :emOsprey

今天鱼鹰简单聊聊 STM32F103 USB 外设实际传输速度的问题。

103 的外设号称 USB 2.0,但实际上是全速的 USB 2.0,即传输 1 bit 数据的速度是 12Mbit/s,类似串口波特率 115200 的概念。

但是我们知道串口协议本身也是有开销的,比如 1 bit 起始位,1 bit 停止位,这都是必须的,否则接收方就无法正确接收。

下图是 8 位数据情况下的传输波形图(来源STM32官方手册)

所以上述情况下,115200 波特率换算字节单位,实际传输速度为 11.52KB/s ,注意这里的 B 是大写,代表字节 Byte,小 b 代表位 bit,这里面的区别很大,别被忽悠了。

比如 10 M 网速宽带,一般说的是 bit 单位,所以实际传输大概在 1 MB 左右。

说回 USB 的话题,STM32F103 搭载的 USB 外设支持 2.0 协议,但是 2.0 协议也分两种,一种是 全速 版本,即 USB1.1 , 12 Mb/s,另外一种是 高速 版本,480 Mb/s,而 103 只支持全速模式

F4系列在增加外部 USB PHY 芯片才可以达到高速,否则也只能以全速的方式工作。

那么 F103 的 USB 真实传输速度可以达到多少呢?

首先说说为什么想得到这个值,有些产品要求速率很高,必须 1 s 传输 1 M字节的传输速度(1 MB/s)才行,但为了降成本,使用了 103 的芯片,认为全速 12 Mb/s 的速度怎么也够了吧,殊不知,这里的速度单位是 bit,还没考虑 USB 协议的开销。

所以当你绞尽脑汁优化代码,你都无法达到这个目标,因为它的理论值只有 12/8 = 1.5 MB/s ,可能你会说,这也够了啊?

但是 USB 本身是有协议开销的,就像串口有开始、停止位一样,USB 也有令牌包、数据包、CRC校验之类的开销,还有一次传输事务的结束,一般会间隔一小段时间再进行下一次传输,还有协议中也会 1 ms 发送一次帧号。

上图是鱼鹰弄的 USB 双缓冲传输波形(一个白块代表了一次传输事务),我们可以看到,每传输一个数据包之后都会停顿一段时间,而每一次事务里面也不全包含了用户数据,这些用户数据被封装在 USB 协议包里面。

所以,对于用户来说,实际传输速度远远不到 1.5 MB/s,估计就 1 MB/s(最为理想情况下,即不浪费每一次 IN  OUT 令牌包的机会,另外 USB 总线上只有一个设备需要传输数据才可能达到),而如果在数据传输过程中,还加入了上层协议,比如 模拟 U 盘,里面会加入协议,速度就更低了。

所以,为了尽可能达到接近 1 MB/s 的用户数据传输速度,可以使用如下方式:批量传输 + 双缓冲 + 环形缓冲(比如 SD 卡的数据可以在 USB 传输时同步写入 FIFO 中)。尽可能的利用带宽。

在鱼鹰测试模拟 U 盘的性能时,发现传输速度可以稳定在 700 KB /s 以上(单向)。而如果没有 U 盘协议本身开销和加大代码优化(即不浪费 IN 、OUT 令牌包),估计能到 900 KB/s,刚好模拟串口就没有多少协议开销,到时候可以测试一波数据。

推荐阅读:

嵌入式系统优先级详解

KEIL 调试经验总结

线程CPU使用率到底该如何计算?

许久以后,你会感谢自己写的异常处理代码

终极串口接收方式,极致效率

延时功能进化论(合集)

如何写一个健壮且高效的串口接收程序?

打了多年的单片机调试断点到底应该怎么设置?| 颠覆认知

-THE END-


如果对你有帮助,记得转发分享哦

微信公众号「鱼鹰谈单片机」

每周一更单片机知识

长按后前往图中包含的公众号关注

鱼鹰,一个被嵌入式耽误的畅销书作家

个人微信「EmbeddedOsprey」

长按后打开对方的名片关注

鱼鹰:探究 USB2.0 的真实传输速度是多少?相关推荐

  1. 【转】再谈USB 3.0的实际传输速度

    1)USB 3.0,多么流行的一个词!USB 3.0接口标准,2008年11月才公布,至今不到3年,市面上早已涌现大批USB 3.0的产品:USB 3.0主板,USB 3.0移动硬盘,USB 3.0优 ...

  2. android快牙原理,实测快牙的真实传输速度

    实测快牙速度测试 为了不浪费大家时间,我们直接进入快牙传输速度测试环节!测试手机分别为ME865(Android 2.3.5)和MB525(MIUI系统,Android 2.3.7), 传输文件大小为 ...

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

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

  4. USB2.0实际传输速度

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

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

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

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

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

  7. usb2.0/3.0/3.1/3.2/4 各版本速率

    USB 1.0/1.1版都有个Low/Full Speed(全速)的别名,USB 2.0版则还叫做High Speed(高速),但一般人很少用这么麻烦.难懂的英文名,只说版本号,一切都很好. USB ...

  8. usb 系统消息_别让 USB 传输速度影响 Android 开发效率

    概览 迭代速度是构建高质量 Android 应用的关键要素.处理的速度越快,应用程序的体验就越顺畅.这篇文章将和大家聊聊如何优化部署时间. 部署 101 在 Android Studio 3.5 中, ...

  9. 计算机的传播速度和传播速率一样吗,U盘传输速度和什么有关?

    很多朋友在拷贝U盘里面的大文件到电脑硬盘的时候,发现速度很慢,很想提升U盘的传输速度,又苦于不知道从什么地方下手,今天笔者就影响U盘的传输速度的相关问题和大家一起探讨下,希望能对大家有所帮助. U盘传 ...

最新文章

  1. JS的trim()方法
  2. 机器人 陆梅东_机器人知识与实践比赛获奖 - 上海徐汇区青少年活动中心
  3. 青龙羊毛——顺丰科勒(搬运)
  4. es java聚合查询只有10_关于在elasticSearch中使用聚合查询后只显示10个bucket的问题...
  5. 继承属性public private
  6. composer php 使用方法,Composer的基本使用方法
  7. boost::hana::negate用法的测试程序
  8. mysql8用户管理
  9. Something about Giraffe (II)
  10. 【bzoj4007】[JLOI2015]战争调度 暴力+树形背包dp
  11. PHP实现QQ达人信息抓取
  12. 【Spring-AOP】源码分析汇总
  13. servlet 工作原理
  14. SAPJCO3升级3.1后报错java.lang.UnsatisfiedLinkError: sapjco3.dll解决
  15. python矢量图_使用python制作矢量图
  16. 中国微流体元件行业市场供需与战略研究报告
  17. 正确理解文件与目录的可读、可写、可执行权限
  18. UEFI开发探索50 – UEFI与网络2
  19. APM_Rover运行纲领分析,以pixhawk-fmuv2为硬件平台,ChibiOS为底层操作系统:
  20. 内网穿透-Frp(1)使用樱花Frp(Sakura Frp)进行免费的内网穿透操作步骤

热门文章

  1. java webclient_java使用WebClient获取不到重定向的网页信息
  2. 基于Ubuntu20.04应用服务器的磁盘挂载与卸载
  3. 纯html+css实现点击显示再次点击隐藏并且不联动的多个下拉菜单
  4. LiStereo:从LiDAR和双目图像中生成密集深度图
  5. 什么是冗余字段?如何优化表结构?
  6. 房屋买卖不可抗力包括哪些
  7. 基于单片机室内节能灯光控制系统设计(毕业设计资料)
  8. php网络电视,高清网络电视源码
  9. linux db2 数据源配置文件,为 DB2 UDB 系列配置数据源
  10. linux的wget命令