2012-01-07 67 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數據包數量。