• 资料介绍
  • 在线预览
  • 相关推荐
申请入驻 产业图谱

LAT1242 如何让CDC类USB设备批量接收64字节以上数据

2025/03/25
906
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

LAT1242 如何让CDC类USB设备批量接收64字节以上数据

741.96 KB

问题提出

STM32 开发者在实现 CDC 类虚拟串口与 PC 主机通信过程中,有时会遇到点麻烦而不得其解。那就是当主机端单次发送的数据不超过 64 字节时,接收正常。一旦发送数据量大于 64 字节时就接收失败,总是出现丢包现象,似乎只能接收 64 字节以内的数据。网上有人干脆建议主机每次发送不要超过 64字节,当然,也有人提及要作分包处理但没具体实现代码可以参考。

解决思路及原理

作为 CDC 类的 USB 设备,到底能不能正确接收来自主机 64 字节以上的批量数据呢?其实是可以的,只是当我们一次传输的数据大于当前端点所支持的最大包长时【这里端点使用 BULK 传输,最大包长默认设置为 64 字节】,USB 模块会做分包传输,将一批数据传输分成多个处理[或称事务],即多个 transaction 来完成,每个 Transaction 里的数据包传输的最大数据量为 64 字节。

验证测试

下面我利用 HAL 库,基于 STM32F429 芯片演示实现过程,重点在接收处理代码。我使用 STM32F429Discovery 开发板,使用 HS USB 模块并令其工作在 FS MODE,这样我们就可以方便地使用片内 USB FSPHY。

我使用 STM32CubeMx 工具进行配置,生成基于 STM32 HAL 库的工程。使用 ST 提供的 STM32CubeIDE进行编译调试。有关配置就不截图了。

另外,我还配置了 1 个按键并开启相应外部中断。每发生按键事件时,F429 USB 设备向 PC 主机发送一段打招呼的字符串,并通过串口助手显示出来。

小结

其实,我上面分享的接收处理代码也有很好的通用性,并不局限于 Bulk 传输端点。我们知道,不同传输类型的端点的最大包长往往并不一样,如果使用上面的参考代码,我们只需调整那个最大包长参数【Max_Pack_Size】,并根据应用适当调整 Rx_buffer[]数组的大小就可以使用了。数据个数、传输包个数这些变量定义及使用都可以保留参考。

在线预览

相关推荐

意法半导体拥有49,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一 家半导体垂直整合制造商(IDM),意法半导体与二十多万家客户、成千上万名合作伙伴一起研发产品和 解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需 求。意法半导体的技术让人们的出行更智能,让电源和能源管理更高效,让云连接的自主化设备应用更广 泛。我们正按计划在所有直接和间接排放(包括范围1和范围2)、产品运输、商务旅行以及员工通勤排 放(重点关注的范围3)方面实现碳中和,并在2027年底前实现100%使用可再生电力的目标。 详情请浏 览意法半导体公司网站:www.st.com.cn