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是实时显示串口接收数据的,数据量太大容易导致软件卡死。

04-03
### USB3300概述 USB3300是一种支持USB 3.0标准的控制器芯片,广泛应用于嵌入式设备中的高速数据传输场景。该器件通常用于实现主机外设之间的高效通信,其设计目标是提供更高的带宽和更低的延迟性能[^1]。 对于开发者而言,获取USB3300的相关规格书和技术文档至关重要。这些资料通常由制造商发布,包含了详细的硬件接口描述、寄存器映射以及驱动开发指南等内容。以下是关于如何查找并下载USB3300规格书或驱动程序的信息: #### 获取官方资源的方法 1. **访问制造商官网** 制造商网站通常是获取最新技术文档的第一渠道。例如,如果USB3300是由某特定半导体公司生产,则可以前往该公司官方网站的技术支持页面寻找相关文件。常见的操作包括注册账号以解锁受保护的内容区域[^2]。 2. **查阅产品手册** 官方的产品手册会详细介绍USB3300的功能特性、电气参数及其应用领域。这类文档一般命名为“Datasheet”或者“Product Specification”,可通过搜索引擎输入关键词如“USB3300 Datasheet PDF”来定位具体链接[^3]。 3. **驱动程序下载** 驱动程序可能被封装成SDK形式供用户下载安装。某些情况下还需要配合厂商提供的工具链一起使用才能完成整个系统的配置工作。注意确认所选版本是否匹配当前操作系统环境(Windows/Linux/MacOS等)[^4]。 #### 示例代码片段展示基本初始化流程 下面给出一段伪代码表示基于Linux平台下对USB设备的一般性设置过程: ```c #include <linux/usb.h> int main() { struct usb_device *dev; dev = usb_open(); // 打开指定USB设备 if (dev != NULL){ int ret = uvc_video_enable(dev->video, 0); // 关闭视频流 if(ret >= 0){ urb_t* urb = allocate_urb(); submit_urb(urb); wait_for_completion(&urb->done); usb_kill_urb(urb); // 停止URB请求 usb_free_urb(urb); // 释放URB对象 close_usb(dev); } } return 0; } ``` 上述代码展示了关闭USB摄像头视频流的一个简单例子,并涉及到了`uvc_video_enable()`函数调用以及其他必要的清理步骤[^5]。
评论 49
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值