据我所知,使用同步传输的 USB 端点有一个与其关联的“wMaxPacketSize”参数,内核使用该参数来保证端点的一定带宽。
如果我没记错的话,这个最大数据包大小可以在 0 到 1024 字节之间(对于高速传输)。此参数如何转换为 Linux 系统中高速 (EHCI) 控制器的带宽分配(以 Mbps 为单位)?
USB 带宽分配还取决于哪些其他因素(如果有)?
谢谢!
答案1
经过一番研究,我现在可以回答我自己的问题了。高速设备的最大同步数据包大小为 1024 字节。每个微帧最多可以有 3 个数据包,一个微帧的宽度为 125 微秒,这意味着每毫秒可以传输 8 个微帧。
这为我们提供了 3*1024*8*1000 = 23.438 MB/s 的最大带宽分配(编辑:用于表示 mbps)
wMaxPacketSize 参数是一个两字节值,其中包含存储的每个数据包的最大大小和每个微帧的数据包数量的位映射。
因此带宽分配如下:
(数据包/微帧) * (max_packet_size) * (8 微帧/毫秒) * (1000ms/s)
还需要注意的是,根据 USB 2.0 规范,只有总带宽的 80% 可以分配给周期性传输,例如同步传输和中断传输。