基于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
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
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 毫米)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值