ST意法半导体
直播中

王静

7年用户 1519经验值
私信 关注
[问答]

为什么我在512字节数据缓冲区传输数据却得到1536字节呢

我正在使用 STM32L4R5ZI-P 开发板
我已将 USB 配置为仅具有 CDC 类的设备,其中 APP_TX_DATA_SIZE 为 2048,USBD_MAX_STR_DESC_SIZ 为 65536。
当我连续 1 毫秒传输 512 字节的数据缓冲区时,我得到 1536 字节,但是当传输 64 字节的数据缓冲区时,我得到前 1 毫秒的 320 字节,然后是 384 字节的其余毫秒。
问题:
为什么我在 512 字节数据缓冲区传输中得到 1536 字节而在 64 字节数据缓冲区传输中只有 384 字节?

回帖(1)

陈迪

2022-12-19 15:13:34
由于协议中的开销,您永远无法达到 12 Mbps。预计最大速度约为 8-10 Mbps,并且前提是您在 STM32 端和 PC 端正确执行所有操作。
为了最大化吞吐量,您需要确保传输之间的时间最短。这样做的一种方法是一次发送更多数据,这允许 USB 外围设备在没有 CPU 干预的情况下完成它的工作,至少在传输完成并且新的数据需要排队之前是这样。
另一块拼图是 PC 端。如果您填满了硬件缓冲区,传输将阻塞,直到您将其读出并且缓冲区再次有空间。有些程序读取此缓冲区的频率不够高,无法达到硬件能够达到的 ~8 Mbps。
正如 Uwe 所说,USB FS 每个数据包最多发送 64 个字节。这是硬件/协议限制。
请注意,1536 字节/1 毫秒是 12.288 Mbps,这是不可能的。最好在更长的时间内测量吞吐量以减少计时错误。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分