2012-01-07 36 views
1

かなり低速のブートローダを高速化しようとしています。現在、私は1つのUSB HID出力エンドポイントでデータを送信しています。低速デバイスであるため、明らかに、800ミリ秒/秒の間、10ミリ秒ごとに1つの8バイトパケットに制限されています。高速なUSB HID出力

何とか報告頻度を増やすことはできますか?または、単一のインタフェースで、または複合デバイスの一部として複数の出力エンドポイントを使用することはできますか?あるいは、制御エンドポイントを悪用して追加のデータを送信することもできますか?

より良い圧縮は、私が考えている代替品ですが、リターンを減らすための領域であり、フルスピードUSBが本当にオプションではないようにハードウェアを再設計しています。

私はWindows専用のソリューションに満足しています。

答えて

2

また、制御エンドポイントを悪用して追加のデータを送信することはありますか?

「ベンダー固有のリクエスト」を使用できます。 TI TUSB3410チップはAFAIKのように機能します。多くのUSBスタックには、それらのフックがすでに配置されています。

これでは、ホスト側にドライバまたはlibusbが必要です。

+0

提案をありがとう!私が使用しているPIC18 MCUはそれらを非常に簡単にサポートするはずです。私はドライバを書くまでではありませんが、既製のものを使うことは確実です。特に、一般的なHIDレポートをフォールバックとして維持することで、疑問の余地はありません。 – doynax

1

あなたは、10ミリ秒ごとに8バイトのパケットに制限されていますか?私は頭の上から正確な数字を知ることはできませんが、それより大きいパケットを送ることができます。私はHIDデバイスを使い、64バイトのパケットを使用していました。私はもっ​​と大きくなるかもしれないと思うが、その限界はおそらくハードウェア特有のものだろう。どのハードウェアを使用していますか?

また、USB in a NutShellに相談しましたか?

+0

"USB in NutShell"の4ページには、次のように記載されています。 "低速デバイスの最大データペイロードサイズは8バイトです。 USB 2.0規格の51ページによれば、「低速エンドポイントはわずか10msから255msに限定されている」と述べている。私は彼らがどういう意味を誤って解釈しているかもしれない。 – doynax

+0

"低速" USBが1.5Mbit/sで動作することを考えれば、実際にテキストを誤って解釈する必要があります。 – Clifford

+1

これらは割り込み転送です。デバイスは、ホストに割り込むポーリング間隔を指定できます。そしてその範囲は10ms〜255msのようです –

0

実際の制限は、低速デバイスの場合は10バイトごとに8バイト、高速デバイスの場合は割り込みベースのエンドポイントごとに64バイトです。

ハードウェアがサポートしている場合は、まず高速モードに切り替えることをお勧めします。リストの次のものは、複数のエンドポイントを使用することです。あなたが本当に可能な限り最高の転送速度を望むなら、HIDクラスは悪い選択です。

0

別の割り込み出力エンドポイントを宣言するのではなく、コントロールエンドポイントでSET_REPORTリクエストを使用することで、アップロードのスピードを大幅に向上させることができました。そうすれば、コントロール転送に利用できるすべての帯域幅を得ることができます。

また、より大きなレポートを複数のセグメントに分割すると、必要なSETUPパケット数を減らすことができました。

関連する問題