【问题标题】:What is the maximum speed of the STM32 USB CDC?STM32 USB CDC的最高速度是多少?
【发布时间】: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 全速数据速率。我怎样才能达到这个速度,或者至少是这个速度的一小部分?

【问题讨论】:

    标签: usb stm32 cdc


    【解决方案1】:

    不。如果您的代码“足够快”,则最大 CDC 速度约为 1MByte/sec。这可能需要设备端的大 (>1KB) FIFO。哦,PC端必须能够足够快地读取数据,例如有大缓冲区。

    64KByte/s 限制适用于使用中断端点的 USB HID。 USB CDC 接口使用更快的批量端点。

    【讨论】:

    • 感谢@Turbo J。如前所述,我使用 HAL 库,我使用函数 CDC_Transmit_FS() 将数据发送到 PC。我应该如何使用此功能才能达到 1MB/s?我有一个 2Kbyte 大小的大缓冲区,但是端点大小是 64 字节。我在示波器中看到usb每1毫秒发送一次数据。如果CDC函数使用端点发送数据,它可以每1ms发送64字节?我想错了吗?还有一个问题:是否有任何免费软件可以检查传入数据的波特率?谢谢
    • 您需要打开 COM 端口以供读取,以便每毫秒查看 SOF 以外的任何内容。一旦打开并被读取,您应该每隔几微秒看到一个 DATA 令牌。
    【解决方案2】:
    1. USB FS 帧为 1 毫秒,因此如果您将 64 个字节放入缓冲区(使用 HAL 函数) - 它将在下一帧中发送这 64 个字节。并且它不会再发送任何数据,直到另一个 1ms 帧

    2. 如何提高这一速度 -> 将您的数据聚合成更大的块,并在一个事务中发送更多数据(使用 HAL 库最高可达 8kB)。

    【讨论】:

    • 非常感谢您的有用回答。那么,我们可以说使用 HAL 库的最大速度是 8kB*64=512kByte/秒还是 4096Mbit/秒?是真的吗?我们如何才能达到接近全速,例如 8 Mbit/s 或 1MByte/s?谢谢
    • 你需要一个比STM提供的更好的USB库。请记住,Windows 本身会限制该速度,因为 VCOM 的内置实现不是很好
    • 再次感谢@PeterJ。使用 HAL 库,我可以达到 500kByte/秒的最大速度。有没有什么技巧可以使用 HAL 库来提高这个速度?或者你能给我介绍一下比 HAL 库更好的 usb 库吗?
    猜你喜欢
    • 2018-09-24
    • 2015-07-25
    • 2021-02-28
    • 2020-08-09
    • 2020-12-25
    • 1970-01-01
    • 2019-07-23
    • 2021-02-12
    • 1970-01-01
    相关资源
    最近更新 更多