测试USB虚拟串口(CDC)的极限速度

一直以来,想搞USB虚拟串口,这东西不是一般的方便,是特别方便,最近本人在调试USB虚拟串口的时候一直有一个迷惑,USB虚拟串口的传输速度到底能做到多少,网上查找没有找到一个具体明确的数据.于是本人亲自测试,相信得到的结果能说明一些问题,现将测得的数据与大家分享.

本人使用的是国民技术N32G4FR系列芯片描述如下:

N32G4FR系列采用 32 bit ARM Cortex-M4F内核,最高工作主频144MHz,支持浮点运算和DSP指令,
集成多达512KB 加密存储Flash, 可用于安全存储指纹信息, 144KB SRAM, 2x12bit 5Msps ADC,
2x1Msps 12bit DAC, 支持多达18通道电容式触摸按键, 集成多路U(S)ART、 I2C、 SPI、 QSPI、 USB、
SDIO、 CAN通信接口, 同时集成数字视频(DVP)接口, 支持主流的半导体指纹及光学传指纹感器, 内置
密码算法硬件加速引擎

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

总结:

测试 包大小(Byte) 包数量 发送总字节数 消耗时间(ms) 速度(Kbyte/S)
30 1024 30KByte 56.3 532.8
2048 60KByte 103.8 578.03
10240 300KByte 541 554.52
20480 600KByte 1082 554.52
60 512 30KByte 35.5 845.07
1024 60KByte 70 857.14
5120 300KByte 353 849.85
10240 600KByte 674 890.2

在嵌入式开发中USB虚拟串口数据传输中:

        1.传输速度基本可以做到500KB/S~900KB/S的量级.

        2.传输速度与上位机软件或操作系统有关系.

        3.尽量使用大包数据传输,这样可以把USB的通讯速度发挥到极致.

疑问:

        1.在测试过程中,我的端口数据包的长度设置为64字节,但是我使用包大小为64进行通讯测试时会出现严重的丢数据情况,在网上查询说是要在64字节包数据发送完成后加一个0数据包发送才行,最终只是了解了一下没有深究,最大包数量采用60字节进行测试.

        2.串口调试软件总得来说是挺强大的,在单次100K字节的传输过程中没有什么问题,档数据大于100K字节时会出现严重的丢数据问题,这个应该跟上位机读取操作和换种数据大小等因素有关系.

物联沃分享整理
物联沃-IOTWORD物联网 » 测试USB虚拟串口(CDC)的极限速度

发表评论