USB2.0 数据传输块大小有限制吗?

USB2.0 数据传输块大小有限制吗?

每次使用一次 read() 或 write(),我们可以通过 USB 接口增加批量数据大小吗?例如,我想传输 1024 (1K) 字节的数据块,如果设备限制只有 64 字节,有什么方法可以增加 USB 上 read() 和 write() 系统调用的数据包大小吗?

在主机->设备环境中,通过 USB 传输的数据大小是否有限制?

答案1

在 USB 总线级别,数据包大小受到USB 规格 — USB 2.0 的限制如下:

  • 对于批量传输 - 高速端点为 512 字节,全速端点为 8、16、32 或 64 字节(根本不允许使用低速批量端点);
  • 对于中断传输 — 高速最多 1024 字节,全速最多 64 字节,低速最多 8 字节;
  • 对于等时传输 - 高速最多 1024 字节,全速最多 1023 字节(并且不允许低速)。

但是,由于内核驱动程序的缓冲,read() 和 write() 的限制可能不同;例如,在当前 Linux 版本中使用 usbfs 时,一次系统调用最多可以传输 16384 个字节。

答案2

我不是 USB 协议工程师,但是这个文件来自Intel EHCI USB 规范似乎表明允许的最大 USB 数据包大小为 1024 字节,而一次可以传输的最大数据块为 24576 字节,如第 35 页所示:

提供七个页面指针来支持 8 次同步传输的表达。七个指针允许使用此数据结构移动 3(事务)* 1024(最大数据包大小)* 8(事务记录)(24576 字节)

答案3

不,我认为这取决于驱动器的簇大小。您可以通过格式化来定义它。

相关内容