2012-01-07 124 views
1

我正试图加速一个相当迟钝的引导程序。目前我在一个USB HID输出端点上发送数据,而且由于它是低速设备,我显然限制为每10毫秒间隔一个8字节数据包,速度高达800字节/秒。更快的USB HID输出

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

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

为了记录,我很乐意使用仅限Windows的解决方案。

回答

2

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

您可以使用“供应商特定请求”。 TI TUSB3410芯片的工作方式AFAIK。许多USB堆栈已经安装了它们的挂钩。

但是,这需要主机端的驱动程序或libusb。

+0

感谢您的建议!我正在使用的PIC18 MCU应该很容易支持它们。我不想写驱动程序,但是使用现成的驱动程序肯定不是不可能的,特别是在通用HID报告保留为备用驱动程序的情况下。 – doynax 2012-01-12 19:39:28

1

谁说你每10ms限制在一个8字节的数据包?我不知道我头顶的确切数字,但我知道你可以发送比这更大的数据包。我做了一个HID设备并使用了64字节的数据包。我想我可以做得更大,但是这个限制可能与硬件有关。你使用什么硬件?

另外,您是否咨询了USB in a NutShell

+0

“NutShell中的USB”的第4页声明:“低速设备的最大数据有效载荷大小为8个字节”;并根据USB 2.0标准的第51页:“低速端点仅限于指定10毫秒到255毫秒”。我可能会误解他们的意思。 – doynax 2012-01-07 23:00:34

+0

鉴于“低速”USB在1.5Mbit/s下工作,您确实必须误解文本。 – Clifford 2012-01-08 20:00:49

+1

这些是中断传输。该设备可以指定一个轮询时间间隔,在该时间间隔内可以中断主机。而这个范围似乎是10ms到255ms – 2012-01-08 20:12:36

0

对于低速设备,实际限制为每10ms 8个字节,对于高速设备,每个基于中断的端点每1ms需要64个字节。

因此,如果硬件支持它,首先尝试切换到高速模式。列表中的下一件事是使用多个端点。如果您真的想获得最高的传输速率,那么HID级别是一个不错的选择。

0

我能够通过在控制端点上使用SET_REPORT请求来加速上传数量级,而不是声明单独的中断端点。这样你就可以获得控制传输的全部带宽。

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