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

本文详细介绍了如何解决STM32 CDC类USB设备在接收超过64字节数据时丢包的问题。通过理解USB模块的分包传输原理,作者提供了基于HAL库的接收处理代码,确保设备能正确接收主机发送的大于64字节的数据,并通过实验证明了方法的有效性。此外,代码具有良好的通用性,适用于不同传输类型的端点。
摘要由CSDN通过智能技术生成

8248d287f2edd974c1777d793b0a85af.jpeg

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

4d5cd483fe747dcfb007ea225e132cab.png

作为CDC类的USB设备,到底能不能正确接收来自主机64字节以上的批量数据呢?

其实是可以的,只是当我们一次传输的数据大于当前端点所支持的最大包长时【这里端点使用BULK传输,一般最大包长默认设置为64字节】,USB模块会做分包传输,将一批数据传输分成多个处理[或称事务],即多个transaction来完成,每个Transaction里的数据包传输的最大数据量为64字节。

9e5df4eb841fbfd21809dbd80dfdf9af.png

原理性的东西,这里不多啰嗦了,网上有成堆的介绍资料【当然,或许有点乱】。当我们弄清整个原理后,就可以自行组织接收处理代码了。下面我利用HAL库,基于STM32F429芯片演示实现过程,重点在接收处理代码。我使用STM32F429 Discovery开发板,使用HS USB模块并令其工作在FS MODE,这样我们就可以方便地使用片内USB FS PHY

bbb8af422d5dc8889863423eeb4c03cd.png

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

另外ÿ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值