STM32 USB CDC的最大速度是多少?

9

我正在使用STM32L151通过USB CDC与PC通信。 我使用了STM32 HAL库创建我的项目。 我发现USB以1毫秒间隔发送数据,每次发送64字节。那么,USB CDC的最大速度是64 kbyte/s吗?这远低于USB全速数据传输速率12 Mbit/s。如何达到这个速度,或者至少达到这个速度的一部分?

2个回答

10

不行。如果你的代码足够"快",那么CDC的最大速度大约为1MByte/sec。这可能需要在设备端使用一个大的(>1KB)FIFO。哦,而且PC端必须能够足够快地读取数据,例如使用大缓冲区。

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


1
感谢@Turbo J。如之前所述,我正在使用HAL库,使用CDC_Transmit_FS()函数向PC发送数据。我该如何使用此函数达到1MB/s的速度?我有一个2K字节大小的大缓冲区,但端点大小为64字节。我在示波器上看到USB每1毫秒发送一次数据。如果CDC函数使用端点发送数据,它是否可以每1毫秒发送64字节?我想错了吗?还有一个问题:是否有任何免费软件可以检查传入数据的波特率?谢谢 - Mohammad
1
你需要打开COM端口才能读取,以便看到每毫秒之外的其他内容。一旦它被打开并正在被读取,你应该会每隔几微秒看到一个数据令牌。 - Turbo J

4
  1. USB FS帧为1毫秒,因此如果您将64字节放入缓冲区(使用HAL函数),它将在下一帧中发送这64字节。它在另一个1ms帧之前不会发送任何更多的数据。

  2. 如何增加传输速度 -> 将您的数据聚合到更大的块中,并在一个事务中发送更多的数据(使用HAL库,最多可达8KB)。


2
非常感谢您的有益回答。那么,我们可以说使用HAL库的最大速度将是8kB * 64 = 512kByte /秒或4096Mbit /秒吗?这是真的吗?我们如何接近完全速度,例如8 Mbit / s或1MByte / s?谢谢。 - Mohammad
1
你需要比STM提供的USB库更好一点。请记住,由于VCOM的内置实现不是很好,因此Windows本身会限制速度。 - 0___________
1
再次感谢@PeterJ。使用HAL库,我可以达到500kByte/秒的最大速度。是否有什么技巧可以使用HAL库提高这个速度?或者你能否向我介绍比HAL库更好的USB库呢? - Mohammad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接