| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> USB虚拟串口(CDC)极限速度测试 -> 正文阅读 |
|
[嵌入式]USB虚拟串口(CDC)极限速度测试 |
一直以来,想搞USB虚拟串口,这东西不是一般的方便,是特别方便,最近本人在调试USB虚拟串口的时候一直有一个迷惑,USB虚拟串口的传输速度到底能做到多少,网上查找没有找到一个具体明确的数据.于是本人亲自测试,相信得到的结果能说明一些问题,现将测得的数据与大家分享. 本人使用的是国民技术N32G4FR系列芯片描述如下:
USB特征如下: N32G4FR系列产品内嵌一个兼容全速USB的设备控制器,遵循全速USB设备(12Mbit/秒)标准,端点可由软件配置,具有待机/唤醒功能。 USB专用的48MHz时钟由内部主PLL直接产生(为保证通信稳定性, 时钟源必须是HSE外部高速晶体)。 测试方法: 1.使用官方给的USB虚拟串口例程修改而来.将不必要的内容去掉.将USB的端点1作为主机接收. 2.其实网上也看到很多测是USB虚拟串口速度的内容,好像更多的是使用软件来测试的.经过分析发现此类方式受限于操作系统,和串口软件等方面影响,所以本人采用示波器测是USB状态的方式进行. 3.将USB例程里面的端点1IN回调函数增加一个IO口跳变. 从机端点1的发送函数如下: ?USB枚举发送接收端点数据包大小都配置为64字节: 上位机测试使用的软件为SSCOM V5.13.1串口波特率设置为1500000: 测试一:USB发送数据包大小:30 包数量1024 函数如下: 串口调试软件接收到的数据正确: ?示波器表笔测试跳变IO口持续时间为56.3ms 如下图: 结论1:USB发送数据包大小:30 包数量1024 总发送字节数为30KByte,所使用的时间是56.3ms 最终的数据传输速度是532.8KByte/S 测试二:USB发送数据包大小:30 包数量2048 函数如下: ? 串口调试软件接收到的数据正确: 示波器表笔测试跳变IO口持续时间为103.8ms 如下图: 结论二:USB发送数据包大小:30 包数量2048 总发送字节数为60KByte,所使用的时间是103.8ms 最终的数据传输速度是578.03KByte/S 测试三:USB发送数据包大小:30 包数量10240 函数如下: 串口调试软件接收数据错误,经过分析,个人认为这个串口调试软件无法做到短时间大数据接收功能,应该是操作系统接收到了这么多数据,调试软件无法及时的读取缓冲区中的数据,造成数据丢失: 示波器表笔测试跳变IO口持续时间为541ms 如下图: 结论三:USB发送数据包大小:30 包数量10240 总发送字节数为300KByte,所使用的时间是541ms 最终的数据传输速度是554.52KByte/S 测试四:USB发送数据包大小:30 包数量20480 函数如下: 串口调试软件接收数据错误 示波器表笔测试跳变IO口持续时间为1082ms 如下图: 结论四:USB发送数据包大小:30 包数量20480 总发送字节数为600KByte,所使用的时间是1082ms 最终的数据传输速度是554.52KByte/S 测试五:USB发送数据包大小:60 包数量512函数如下: 串口调试软件接收到的数据正确: 示波器表笔测试跳变IO口持续时间为35.5ms 如下图: 结论五:USB发送数据包大小:60包数量512总发送字节数为30KByte,所使用的时间是35.5ms 最终的数据传输速度是845.07KByte/S 测试六:USB发送数据包大小:60 包数量1024函数如下: 串口调试软件接收到的数据正确: 示波器表笔测试跳变IO口持续时间为70ms 如下图: 结论六:USB发送数据包大小:60包数量1024总发送字节数为60KByte,所使用的时间是70ms 最终的数据传输速度是857.14KByte/S 测试七:USB发送数据包大小:60 包数量5120函数如下: ?串口调试软件接收数据错误 示波器表笔测试跳变IO口持续时间为353ms 如下图: 结论七:USB发送数据包大小:60包数量5120总发送字节数为300KByte,所使用的时间是353ms 最终的数据传输速度是849.85KByte/S 测试八:USB发送数据包大小:60 包数量10240函数如下: 串口调试软件接收数据错误 示波器表笔测试跳变IO口持续时间为674ms 如下图: 结论八:USB发送数据包大小:60包数量10240总发送字节数为600KByte,所使用的时间是674ms 最终的数据传输速度是890.20KByte/S 总结:
在嵌入式开发中USB虚拟串口数据传输中: ????????1.传输速度基本可以做到500KB/S~900KB/S的量级. ????????2.传输速度与上位机软件或操作系统有关系. ????????3.尽量使用大包数据传输,这样可以把USB的通讯速度发挥到极致. 疑问: ????????1.在测试过程中,我的端口数据包的长度设置为64字节,但是我使用包大小为64进行通讯测试时会出现严重的丢数据情况,在网上查询说是要在64字节包数据发送完成后加一个0数据包发送才行,最终只是了解了一下没有深究,最大包数量采用60字节进行测试. ????????2.串口调试软件总得来说是挺强大的,在单次100K字节的传输过程中没有什么问题,档数据大于100K字节时会出现严重的丢数据问题,这个应该跟上位机读取操作和换种数据大小等因素有关系. |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 0:49:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |