更快的 USB HID 输出

问题描述 投票:0回答:5

我正在尝试加速一个相当缓慢的引导加载程序。目前我在单个 USB HID 输出端点上发送数据,因为它是一个低速设备,我显然每 10 毫秒间隔发送一个 8 字节数据包,速度高达 800 字节/秒。

是否有可能以某种方式增加报告频率?或者在单个接口中或作为复合设备的一部分使用多个输出端点?或者滥用控制端点来发送额外的数据?

更好的压缩总是我想的替代方案,但这是一个收益递减的领域,重新设计硬件以允许全速 USB 并不是真正的选择。

郑重声明,我很乐意使用仅限 Windows 的解决方案。

embedded usb hid
5个回答
2
投票

或者滥用控制端点发送额外的数据?

您可以为此使用“供应商特定请求”。 TI TUSB3410 芯片以这种方式工作 AFAIK。许多 USB 堆栈都有适合它们的挂钩。

然而,这需要主机端的驱动程序或 libusb。


2
投票

通过在控制端点上使用 SET_REPORT 请求,我能够将上传速度提高几个数量级,而不是声明一个单独的中断输出端点。这样你就可以获得所有可用于控制传输的带宽。

还使用分成多个部分的较大报告有助于减少所需的 SETUP 数据包数量。


1
投票

谁说你被限制在每 10 毫秒一个 8 字节的数据包?我不知道我头脑中的确切数字,但我知道你可以发送比这更大的数据包。我做了一个 HID 设备并使用 64 字节数据包。我想我可以变大,但这个限制可能是特定于硬件的。您使用的是什么硬件?

还有,你咨询过USB in a NutShell吗?


0
投票

对于低速设备,实际限制是每 10 毫秒 8 个字节,对于高速设备,每个基于中断的端点每 1 毫秒 64 个字节。

所以似乎首先要尝试的是切换到高速模式,如果硬件支持的话。列表中的下一件事是使用多个端点。如果你真的想获得尽可能高的传输速率,HID 类是一个糟糕的选择。


0
投票

我不确定 Windows,但大多数主机将以比规范要求更快的速度服务中断端点——甚至低至 2 毫秒/中断。尝试更改您的配置描述符以要求 2 毫秒的速率。

相信 这实际上是 allowed 规范 - 速率是 request 主机可以遵守或不遵守(例如,我读过,即使 10ms 是,一些主机将以 8ms 轮询请求)。您不能依赖您插入的任何随机主机都符合您的费率。

编辑:嗯,不,规范清楚地说“中断管道的端点指定其所需的总线访问周期。 […] 低速端点仅限于指定 10 毫秒到 255 毫秒。”尽管如此,这在实践中对我有用......

© www.soinside.com 2019 - 2024. All rights reserved.