我正试图加速一个相当迟钝的引导程序。目前我在一个USB HID输出端点上发送数据,而且由于它是低速设备,我显然限制为每10毫秒间隔一个8字节数据包,速度高达800字节/秒。更快的USB HID输出
是否有可能以某种方式增加报告频率?或者在一个界面中使用多个输出端点或作为复合设备的一部分?或者也许滥用控制端点发送更多数据?
更好的压缩方式总是我想的一种选择,但它是一个收益递减的领域,重新设计硬件以允许全速USB并不是真正的选择。
为了记录,我很乐意使用仅限Windows的解决方案。
我正试图加速一个相当迟钝的引导程序。目前我在一个USB HID输出端点上发送数据,而且由于它是低速设备,我显然限制为每10毫秒间隔一个8字节数据包,速度高达800字节/秒。更快的USB HID输出
是否有可能以某种方式增加报告频率?或者在一个界面中使用多个输出端点或作为复合设备的一部分?或者也许滥用控制端点发送更多数据?
更好的压缩方式总是我想的一种选择,但它是一个收益递减的领域,重新设计硬件以允许全速USB并不是真正的选择。
为了记录,我很乐意使用仅限Windows的解决方案。
或者也许滥用控制端点发送额外的数据?
您可以使用“供应商特定请求”。 TI TUSB3410芯片的工作方式AFAIK。许多USB堆栈已经安装了它们的挂钩。
但是,这需要主机端的驱动程序或libusb。
谁说你每10ms限制在一个8字节的数据包?我不知道我头顶的确切数字,但我知道你可以发送比这更大的数据包。我做了一个HID设备并使用了64字节的数据包。我想我可以做得更大,但是这个限制可能与硬件有关。你使用什么硬件?
另外,您是否咨询了USB in a NutShell?
对于低速设备,实际限制为每10ms 8个字节,对于高速设备,每个基于中断的端点每1ms需要64个字节。
因此,如果硬件支持它,首先尝试切换到高速模式。列表中的下一件事是使用多个端点。如果您真的想获得最高的传输速率,那么HID级别是一个不错的选择。
我能够通过在控制端点上使用SET_REPORT请求来加速上传数量级,而不是声明单独的中断端点。这样你就可以获得控制传输的全部带宽。
另外使用分成多个段的较大报告有助于减少所需的SETUP数据包数量。
感谢您的建议!我正在使用的PIC18 MCU应该很容易支持它们。我不想写驱动程序,但是使用现成的驱动程序肯定不是不可能的,特别是在通用HID报告保留为备用驱动程序的情况下。 – doynax 2012-01-12 19:39:28