
我能找到的最快的 USB 鍵盤使用具有 1000 Hz 輪詢的 USB 2.0。
如果我只是看電影並且幾個小時不碰鍵盤,來回 USB 通信真的會繼續每毫秒重複一次嗎?或者我通常會進入某種 USB 睡眠狀態(例如,1 Hz 輪詢)?
我的理解是說,每毫秒,PC 應該以 IN 請求開始,然後鍵盤應該發送 DATA 回應(表示「沒有按下任何按鍵」),然後 PC 應該發送 ACK 回應。
所以,我問這個問題是因為這一切看起來都很浪費……但也許這沒什麼大不了的。
(這個問題是關於普通的Windows PC,但我對Android設備也很好奇。順便說一句,我認為PS/2如果不觸摸鍵盤,鍵盤就不會透過 PS/2 電纜進行任何來回通信,但如果我錯了,請糾正我。
答案1
如果不使用,USB 鍵盤的輪詢通常會變慢嗎
不,系統無法判斷鍵盤何時處於按下狀態“不曾用過”提前時間。
作為用戶,您知道您沒有使用鍵盤,但係統無法偵測到您的意圖。
為了確保所有連接裝置的一致和及時的服務,需要輪詢 USB 總線上的裝置。
事件驅動方案(例如使用中斷)需要更複雜的自適應解決方案,以避免低優先級或低活動設備的飢餓。
……來回 USB 通訊真的每毫秒都會重複嗎?
是的,這就是共享媒體上雙向通訊的 USB 協定的定義。
或者我通常會進入某種 USB 睡眠狀態(例如,1 Hz 輪詢)?
不會
。
自適應速率輪詢的實施可能會增加複雜性,並且回應時間也會相應受到影響。
請注意,此輪詢通常主要由主機 USB 控制器執行,而不是由 USB 主機的 CPU 執行。此輪詢對 PC 處理器或作業系統的影響或負載最小。
USB 是硬體和軟體中實現的標準。對於任何作業系統(包括 Windows 和 Android),作業系統軟體方面的實作預計都是相似的。
例如,USB設備的輪詢速率是由設備本身指定的,而不是由主機作業系統決定的。
該輪詢率在端點描述符,範圍可以是「低速/全速設備為 1ms,高速設備為 125us」。
我認為如果不觸摸鍵盤,PS/2 鍵盤就不會透過 PS/2 電纜進行任何來回通信
PS/2 介面使用時脈線來協商半雙工通訊的方向,而 USB 是依賴主從時間協定的共用半雙工匯流排。
PS/2 裝置可以隨時進行傳輸,除非 PC 主機將時脈線拉低,從而強制 PS/2 裝置停止傳輸。
答案2
如果我只是看電影並且幾個小時不碰鍵盤,來回 USB 通信真的會繼續每毫秒重複一次嗎?或者我通常會進入某種 USB 睡眠狀態(例如,1 Hz 輪詢)?
每毫秒,PC 應該以 IN 請求啟動
事實上,「溝通」並不是真正發生在每一個毫秒。但確實,低速 USB 主機每毫秒都會持續向匯流排發出「保持活動」脈衝。這稱為“USB 框架”。所以這裡沒有發生實際的通訊。
正如您正確指出的那樣,僅當主機發送輪詢(IN)請求時才會發生「通訊」。 Windows 的正常輪詢率為 8 毫秒,每 8 幀一次,但這取決於情況。如果使用專有驅動程序,例如“遊戲鍵盤”,正如您所說,輪詢可能每 1 毫秒發生一次。
是的,這是一個浪費的過程,確實如此。這就是大多數便攜式設備採用省電技術的原因。它們沒有降低輪詢速率,而是使用標準 USB_SUSPEND 函數。如果其內部演算法確定鍵盤或滑鼠沒有發出新訊息,主機將選擇性地暫停每個 HID(人機介面裝置)。進入 SUSPEND 狀態的延遲為 8 ms。如果我沒記錯的話,不活動逾時約 200 毫秒,之後 USB 線進入暫停狀態,無切換。
當您觸控鍵盤或滑鼠時,它們將產生「喚醒」事件,並且主機將恢復 USB 流量和通訊輪詢。是的,這個RESUME 比平常的輪詢需要更長的時間,15-20-50 毫秒,如果整個系統在某種程度上進入睡眠狀態,甚至會更長,因此用戶可能會對「鍵盤延遲」感到沮喪。但這種主動式管理的暫停功能確實可以節省電池壽命。
如果您只是在桌上型電腦上觀看電影,則不太關心功耗,並且鍵盤的輪詢可能永遠不會停止,儘管可能有一些配置設定可以實現更積極的節能。
與 USB 不同,PS/2 介面可以主動從鍵盤/滑鼠端產生通訊流量,因此該介面可以保持不活動狀態,而無需主機輪詢。