【发布时间】:2017-10-31 17:09:24
【问题描述】:
我正在使用 STM32L151 与使用 USB CDC 的 PC 进行通信。我使用 STM32 HAL 库来创建我的项目。 我发现 USB 以 1 ms 的间隔发送数据,每次发送 64 个字节。那么,USB CDC 的最大速度是 64 kbyte/s 吗?这远低于 12 Mbit/s 的 USB 全速数据速率。我怎样才能达到这个速度,或者至少是这个速度的一小部分?
【问题讨论】:
我正在使用 STM32L151 与使用 USB CDC 的 PC 进行通信。我使用 STM32 HAL 库来创建我的项目。 我发现 USB 以 1 ms 的间隔发送数据,每次发送 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)。
【讨论】: