带报告 ID 的 USB 数据包长度

USB Packet Length With Report ID

我问这个问题是因为 USB HID 文档对此不是很明确。我的问题是关于全速 USB HID 设备及其各自的报告描述符。我有一个报告 ID 为 2 的设备。报告描述符中的报告计数设置为 64。现在,我目前的理解是,在传输 USB 数据包时,报告计数前面是报告 ID。这意味着...USB 数据包的大小将是报告计数中指定的大小加上报告 ID 的一个字节,总传输大小为 65 字节。我已经试过了,效果很好。

我的问题是,这是对 USB 规范的正确理解,还是我利用了一些稍后可以通过 Windows 更新或 Mac 更新等进行修补的东西... ?

根据 USB HID 规范,高速设备的 USB 事务限制为 64 字节。然而,这是过时的信息,因为高速设备每次传输可以达到 1024 字节。全速设备现在指定每次传输最多 64 个字节。它还指定 Report Count 是指报告传输中数据字段的数量。它没有说 USB 交易,只是说 报告传输

对于报告 ID,USB HID 规范指出,"Report ID items are used to indicate which data fields are represented in each report structure. A Report ID item tag assigns a 1-byte identification prefix to each report transfer."

这让我相信,虽然它说全速设备每次 USB 事务限制为 64 字节,但该限制并未考虑报告 ID。这是正确的吗?

不,报告 ID 算作一个数据。带有报告 ID 的剩余报告数据不得超过 63 个字节。

请注意,此限制仅在 全速 模式下由硬件强制执行。 高速 中断端点每次传输最多可达 1024 字节。

当前的 HID 规范版本 1.11 是从 2001 年开始的,因此早于 USB 2.0 高速。超过 64 字节的中断传输不可用。

您可能想要检查设备连接到旧 USB 1.1(全速)集线器后的行为。