基于GD32F450+USB3300的高速USB传输

2021.5.13(2021.5.17改)
USB自定义设备类的实现
1 此例程在GD官方所提供的打印机设备类型修改而来,根据USB2.0协议修改相关的设备描述符、配置描述符和端口描述符,来实现自定义设备类型。
在这里插入图片描述
图1 设备描述符
在这里插入图片描述
图2 配置描述符
在这里插入图片描述

图3 端点描述符
如图3所示,IN和OUT端口数据传输类型皆为批量传输。
在这里插入图片描述

图4 USB设备名称
在这里插入图片描述

图5 编译结果
将这些描述符修改之后进行编译,结果如图5所示,编译成功,之后将板子USB与电脑相连,如图6所示,从设备管理器中看到其他设备多了一项。
在这里插入图片描述

图6 设备管理器
带有感叹号是因为设备为自定义设备,缺少相关的驱动程序,所以需要安装相关的驱动程序。驱动程序安装过程如图8、图9和10所示,所使用的的软件如图7所示。
在这里插入图片描述

图7 驱动程序安装软件
在这里插入图片描述

图8 驱动程序安装过程
在这里插入图片描述

图9 驱动程序安装过程
之后创建一个文件夹用来安装USB驱动。安装好设备驱动之后,电脑设备管理器会出现一个设备,如图11所示。
在这里插入图片描述

图10 驱动程序安装过程
在这里插入图片描述

图11 设备识别成功
通过UsbTreeView可以查看自定义USB设备的相关信息,如图12和图13所示。
在这里插入图片描述

图12 设备信息
在这里插入图片描述

图13 端点信息
从图12中我们可以看出设备为高速设备,设备类型和驱动程序类型相匹配,如若不匹配,之后的上位机就会识别不到设备。从图13可以看到端点的数据传输方式和数据包大小。
至此USB设备以成功实现枚举,接下来就是编写单片机关于IN事务和OUT事务的程序和配套的上位机实现。

参考资料:
博客:https://blog.csdn.net/replayb/article/details/114530830
BILIBILI:https://www.bilibili.com/video/BV1eE411o7Qf?t=1744&p=5

2021.5.15(2021.5.17改)
相关程序的编写(数据回环)
2 使用usblib安装的USB驱动程序,所以上位机实现的功能其实是libusb与高速USB设备通信,上位机的开发软件为Visual Studio 2019。具体步骤如图1所示。
在这里插入图片描述

图1 上位机的具体开发步骤
项目创建步骤如图2、图3、图4和图5所示。
在这里插入图片描述

图2 创建一个控制台应用
在这里插入图片描述

图3 选择项目路径
在这里插入图片描述

图4 项目创建成功
在这里插入图片描述

图5 项目运行成功
项目运行成功之后填加相应的头文件和库,然后对相关设置进行配置。具体步骤如图6、图7、图8、图9和图10所示。
在这里插入图片描述

图6 拷贝相关头文件到对应项目路径下
在这里插入图片描述

图7 拷贝相关库文件到对应项目路径下
在这里插入图片描述

图8 设置项目的包含目录
在这里插入图片描述

图9 连接所使用的USB库
在这里插入图片描述

图10 添加对应的头文件和初始化函数
上诉配置完成之后,程序的运行环境已搭建完成,然后运行程序,从图11中可以看出,程序可以运行,说明usblib库的引用是成功的。
在这里插入图片描述

图11 初始化程序运行结果
之后进行自定义设备寻找,寻找过程包括遍历总线和遍历设备,如果找到设备,就打开设备,进行接口声明,寻找过程中所用到的VID、PID以及接口数量应该与单片机程序一致。寻找设备函数如图12所示,程序运行结果如图13所示,说明设备寻找成功。
在这里插入图片描述

图12 寻找设备函数
在这里插入图片描述

图13 程序运行结果
设备寻找成功之后我们在上位机的mian函数中编写读和写的函数,首先将固定字符通过OUT端口发出去,然后再通过IN端口接收发出去的字符,以实现消息回环。具体实现代码如图14所示,单片机OUT端代码如图15所示,程序将收到的数据发回给上位机。
在这里插入图片描述

图14 上位机main函数
在这里插入图片描述

图15 单片机OUT端回调函数
程序运行结果如图16所示。输入w指令后,主机给单片机发数据(Hello GD32),单片机收到数据后将数据返回给主机,主机通过r指令来读取单片机返回的数据。
在这里插入图片描述

图16 程序运行结果

注:设备驱动安装软件和上位机程序编写所用的库须一致,否则即使PID和VID相匹配,上位机也无法识别设备。

参考资料:
博客:https://blog.csdn.net/replayb/article/details/114530830
BILIBILI:https://www.bilibili.com/video/BV1eE411o7Qf?t=1744&p=6

2021.5.17
高速设备传输速度测试
3 为了测得高速USB速度传输的极限,在2的基础上将单片机与上位机的代码进行修改,上位机代码如图1所示,连续从单片机读取100MB的数据。在单片机程序中,当单片机收到主机的OUT事务后,会调用OUT回调函数,此函数会发送4096字节的数据,每发完4096字节数据后,程序又会调用单片机IN事务的回调函数,然后再在发送4096字节的数据,直到主机接收完成100MB数据为止。单片机程序如图2所示。
在这里插入图片描述

图1 主机读100MB程序
在这里插入图片描述

图2 单片机发100MB程序
试验结果如图3所示,可以看出主机多次读数据的平均速率在29MB/s左右。
在这里插入图片描述

图3 主机读100MB数据速率
用Bus Hound抓包工具获取结果如图4所示,主机读取4KB所消耗的时间为121us,可以计算出主机读取的瞬时速率在32MB/s左右。
在这里插入图片描述

图4 Bus Hound显示
将上位机与单片机程序稍加修改后,便可以做主机发100MB数据,单片机读100MB数据的试验,并测得其传输数据的速率。主机发数据程序与单片机读数据程序如图5和图6所示。
在这里插入图片描述

图5 主机发100MB程序
在这里插入图片描述

图6 单片机读100MB程序
试验结果如图7和图8所示。可以看出主机多次读数据的平均速率在28MB/s左右,用Bus Hound抓包工具获取结果,主机发送4KB所消耗的时间为131us,可以计算出主机读取的瞬时速率在30MB/s左右。
在这里插入图片描述

图7 主机写100MB数据速率
在这里插入图片描述

图8 Bus Hound显示

从上面测速试验可以得出,在极限速率下(只传输数据未进行数据处理),平均传输速率在29MB/s左右。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值