STM32与USB3300共同实现USB OTG HS的CDC串口通信速度测试

项目场景:

  STM32和上位机传统通信方式就是串口,IIC,SPI等。IIC和SPI一般不常用,串口是用的最多的通信方式。然而串口一般用于输出调试信息这种对传输速度没要求的场景,那种大容量数据快速传输的场景,串口显得捉襟见肘。STM32自带USB FS,然而既然都使用USB了,为什么不用USB HS呢?STM32H750VBT6没有内置USB HS PHY,但提供了USB HS的ULPI通信接口,用于连接外置USB PHY。这样就可以使用STM32H750VBT6和外置USB3300搭建起来USB HS的通道。这里不再讲述USB HS的配置过程,只需要在STM32CUBEMX中简单点几下就行,注意时钟配置正确,把internal DMA IP关掉即可。


USB HS通信速度测试

  理论上USB HS通信速度能到480Mbps,但是实际上并没有那么多,我利用STM32H750VBT6测试,USB CDC类虚拟串口的通信速度大约在22MB/s,十分够用。利用Python编写的测速脚本数据结果如下。
在这里插入图片描述


Python测速代码:

import serial
import time
import serial.tools.list_ports

ports_list = list(serial.tools.list_ports.comports())
if len(ports_list) <= 0:
    print("无串口设备。")
else:
    print("可用的串口设备如下:")
    for comport in ports_list:
        print(list(comport)[0], list(comport)[1])

COM_Index = input("想要观察的串口号")
ser = serial.Serial(COM_Index,115200)       #打开虚拟串口
temp = 0
count = 0
start_time = 0
while 1:
    if count == 0:
        start_time = time.time()
    com_input = ser.read(2048)
    if temp != com_input[1]:           #说明是新的数据
        count = count+1              #次数加1
        temp = com_input[1]        #把temp更新到当前的数据,用于判断下一次的新数据
    if count == 100000:             #接收了100000次数据 就是2K*100K = 200M的数据
        end_time = time.time()
        run_time = end_time-start_time
        count = 0
        print("总数据量200M, 总时间为%.2f秒, 数据传输速度为%.2f MB/s" %(run_time,200/run_time))

STM32的下位机USB测速代码:

	memset(UserTxBufferHS,i,sizeof(UserTxBufferHS));
	CDC_Transmit_HS(UserTxBufferHS,sizeof(UserTxBufferHS));              //发送数据

  UserTxBufferHS是usbd_cdc_if.c中自带的,大小为APP_TX_DATA_SIZE,一般就是2048。


关于数据传输:

  不要想着用sscom等串口软件去手动计算USB速度,因为sscom是实时显示串口接收数据的,数据量太大容易导致软件卡死。

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 33
    评论
USB-IF高速;,经认证符合通用串行总线规范修订版 2.0 接口在 8 位模式下与 ULPI 规范修订版 1.1 兼容 工业标准 UTMI+ 低引脚接口 (ULPI) 可将 54 UTMI+ 信号转换为标准的 12 引脚链路控制器接口 54.7mA 未配置电流(典型情况)— 适用于总线供电的应用 83uA 挂起电流(典型情况)— 适用于电池供电的应用 闭锁性能超过 150 mA(每 EIA/JESD 78),Class II ESD 防护水平达 ±8kV HBM(在不使用外部保护设备的情况下) 集成了各种保护措施,在每个第三方的测试设备中均可耐受 IEC61000-4-2 ESD 测试(±8kV 接触电压和 ±15kV 空气电压) 支持用于附带 LS 设备的 FS 集线器的 FS 前导码 (UTMI+ Level 3) 支持 HS SOF 和 LS keep-alive 脉冲 包括对可选的 On-The-Go (OTG) 协议的全面支持,在 On-The-Go 附录修订版 1.0a 规范中有详细说明 支持 OTG 主机协商协议 (HNP) 和会话请求协议 (SRP) 允许主机关闭 VBUS,以便在 OTG 应用中节省电池电量 通过内部比较器支持 VBUS 电平的 OTG 监视。包括对外部 VBUS 或故障监视器的支持。 低潜伏高速接收器(最高为 43 高速时钟)允许使用带 ULPI 包装器的潜伏 UTMI 链路 用于接口保护的 STP 上的集成下拉电阻,允许在使用低速链路(针对低功率情况对软件进行了配置)的情况下,可靠地启动 Link/PHY 内置的 1.8V 调节器允许在使用单个 3.3V 电源的情况下工作 对 ID、DP 和 DM 线路到 VBUS 或接地进行内部短路保护 集成的 24MHz 晶振支持水晶操作或 24MHz 外部时钟输入 用于 480MHz 高速 USB 操作的内部 PLL 工业运行温度:-40°C 到 +85°C 符合 RoHS 的 32 引脚无铅 QFN 封装(5 x 5 毫米, 高度为 0.90 毫米)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值