我正在使用 STM32L151 通过 USB CDC 与 PC 进行通信。我使用 STM32 HAL 库来创建我的项目。 我发现USB以1ms的间隔发送数据,每次发送64字节。那么,USB CDC的最大速度是64 kbyte/s吗?这远低于 12 Mbit/s 的 USB 全速数据速率。我怎样才能达到这个速度,或者至少是这个速度的一小部分?
不。如果您的代码“足够快”,则最大 CDC 速度约为
1MByte/sec
。这可能需要设备端有一个大的 (>1KB) FIFO。哦,PC端必须能够足够快地读取数据,例如有大缓冲区。
64KByte/s 限制适用于使用中断端点的 USB HID。 USB CDC 接口使用更快的批量端点。
USB FS 帧为 1 毫秒,因此如果您将 64 字节放入缓冲区(使用 HAL 函数),它将在下一帧中发送这 64 字节。并且直到另一个 1ms 帧才会发送更多数据
如何提高速度 -> 将数据聚合为更大的块,并在一个事务中发送更多数据(使用 HAL 库最多 8kB)。
对这个话题仍然感兴趣的人的答案: 我使用 MSC USB 类和 Python 使用 STM32G474RET6U MCU 成功实现了大约 770 kB/s 的传输速度。您可以在这里找到代码:GitHub 存储库。