stm32f3 USB VCP 工作不稳定

stm32f3 USB VCP working unstable

我正在编程STM32F373RCT,我一直在尝试制作一个USB 虚拟comport 设备。如果我每秒发送大约 960 位的数据(我使用了一个定时器 (50Hz) 并且我在每个周期中传输 14 个字节),通信工作正常,但是如果我尝试发送超过这个的数据,一些数据就会丢失。我必须提高数据传输速度。我该如何增加?

USB 具有内置流量控制,因此您应该能够尽可能快地发送数据而不会丢失任何数据。您正在使用的 USB 堆栈或用于将数据发送到 USB 堆栈的代码中存在错误。如果您可以识别并修复该错误,那么您应该能够更快地发送数据而不会丢失任何东西。

可能是驱动或相关设置问题。我的一个项目使用 STM32F103 通过 USB 以 ~600KBytes/s 的速度发送数据,曾经使用 VCP 完成并且运行良好,直到 Linux 内核更新。新内核自带的驱动会高速随机丢弃数据,估计是缓冲区设置不同造成的。

为了解决这个问题,我切换到 libusb 并处理用户 space 中的所有 BULK 数据包。它在可靠性和延迟方面都运行良好(如果使用异步 API)。

我还制作了基于 STM32F103 的设备,可以与 flashrom 一起使用,并且可以通过 VCP 以超过 800KBytes/s 的速度传输而没有任何损失或问题,所以我想更多的是关于缓冲区设置。

我发现了问题。在我的代码中,有 3 个定时器中断处于活动状态并且它们设置为高优先级。 USB 中断被设置为低优先级。当 USB 连接到计算机时,新代码将停止定时器的中断。 USB 通信现在很稳定。非常感谢您的评论。