我正在编程STM32F373RCT,我一直在尝试制作USB虚拟配置设备。如果我发送数据大约每秒960位(我使用一个定时器(50Hz)并且我在每个周期发送14个字节),通信工作正常但是如果我尝试发送的数据超过这个数据,则会丢失一些数据。我必须提高数据传输速度。我该如何增加?
答案 0 :(得分:0)
USB具有内置流量控制功能,因此您应该能够尽快发送数据而不会丢失任何数据。您正在使用的USB堆栈中存在错误,或者存在用于将数据发送到USB堆栈的代码中的错误。如果您能识别并修复该错误,那么您应该能够更快地发送数据而不会丢失任何内容。
答案 1 :(得分:0)
可能是驱动程序或相关设置的错误。我的一个项目是使用STM32F103以大约600KBytes / s的速度通过USB发送数据,这个项目曾经用VCP完成,工作正常,直到Linux内核更新。新内核附带了一个驱动程序,可以高速随机丢弃数据,可能是因为缓冲区设置不同。
为了解决这个问题,我切换到libusb
并处理用户空间中的所有BULK数据包。它在可靠性和延迟方面都非常有效(如果使用异步API)。
我还使基于STM32F103的设备与flashrom
一起使用,并且可以通过VCP以超过800KBytes / s的速度传输,而不会有任何丢失或问题,所以我想这更多是关于缓冲区设置。
答案 2 :(得分:0)
我发现了问题。在我的代码中,3个定时器中断处于活动状态,并将它们设置为高优先级。 USB中断被设置为低优先级。当USB连接到计算机时,新代码将停止计时器的中断。 USB通讯现在稳定。非常感谢你的评论。