題 USB鍵盤只發送信號,還是從計算機接收信號?


鍵盤不需要來自電腦的任何信號,只需要電源,對吧?或者是否需要接收信號並發送信號?

編輯:我沒想到這個問題產生了這麼大的興趣!我問它是因為我有一個空閒的夢想,即​​建立一個複制信號的doohickey,這樣鍵盤就可以同時向兩台計算機發送相同的信件。由於(從我在答案中可以看出)計算機主動控制鍵盤就像任何其他設備一樣,這顯然是不可能的。實際上沒什麼大不了的,我還沒有建立它的技能!


82
2018-03-06 15:28


起源


例如它可能會收到鎖定鍵的狀態。許多鍵盤具有指示鎖定鍵狀態的LED。嘗試打開大寫鎖定,然後更換鍵盤,可能狀態仍然會被鎖定,這些信息需要來自電腦。 - Máté Juhász
即使PS / 2鍵盤也能從PC接收信號,否則它如何打開/關閉LED? - phuclv
@Devsman你不能這樣做,否則鎖定狀態將不同步,因為它可以被軟件更改。例如,如果您插入2個鍵盤並按下numlock,則另一個上的LED將切換。使用屏幕鍵盤也可以實現同樣的效果 - phuclv
切換LED codegolf.stackexchange.com/questions/110974/blink-the-caps-lock - Dohn Joe
USB設備必須具有雙向數據,這僅僅是由於初始握手的要求才能啟用特定設備類。 - Steve


答案:


來自 ”設備類定義 用於人機界面 設備(HID)“版本11.1“規格:

LED狀態和CAPS LOCK,NUM LOCK,SCROLL之間的同步   LOCK,COMPOSE和KANA活動由主持人維護,而不是由主持人維護   鍵盤。如果使用附錄B中的鍵盤描述符,LED指示燈狀態   由...設定 發出 通過一個5位絕對報告到鍵盤   Set_Report(輸出)請求。

要更改鍵盤LED,鍵盤會接受命令來執行此操作。因此它不是“僅輸入”設備(意味著它只向主機輸出數據)。

話雖這麼說,但是所有USB設備都需要在主機和設備之間進行來回對話的協商和枚舉過程。您不能擁有“只讀”USB設備。

即使在USB之前,PC鍵盤控制器也會接受命令,因為它除了讀鍵盤外還做了一些事情(參考):

如果鍵盤是單獨的外圍系統單元(例如在大多數現代台式計算機中),則鍵盤控制器不直接連接到鍵,而是通過某種串行接口從嵌入鍵盤的微控制器接收掃描碼。在這種情況下,控制器通常還通過電線將數據發送回鍵盤來控制鍵盤的LED。

IBM PC AT使用Intel 8042芯片與鍵盤連接。該計算機還控制對A20線路的訪問,以實現英特爾80286中芯片錯誤的解決方法。1 鍵盤控制器還用於啟動軟件CPU復位,以允許CPU從保護模式轉換到實模式1 因為除非重置CPU,否則286不允許CPU從保護模式進入實模式。這是一個問題,因為BIOS和操作系統服務只能由實模式的程序調用。

許多需要這種行為的軟件已經使用了這些行為,因此鍵盤控制器繼續控制A20線並執行軟件CPU復位,即使通過鍵盤控制器重置需要被Intel 80386切換到保護模式下的實模式,沒有CPU復位。


100
2018-03-06 15:34



如果我們在“信號”級別討論內容,即使我們忘記了枚舉和LED,USB輸入也是基於輪詢。除非主機要求,否則設備無法主動向主機發送數據。只是頻繁地輪詢輸入設備以詢問它是否有任何新的報告。 - Matti Virkkunen
你的意思是“只輸出”吧? - Daniel
不知道怎麼說tbh,鍵盤是“輸入”設備,“僅輸入”意味著它只向主機發送數據,但從不接收。取決於觀點是鍵盤還是主機。 - LawrenceC
@Daniel大多數人不會將鍵盤稱為“輸出”設備。外圍設備是外部連接的,因此我們從PC的角度出發,將其稱為輸入或輸出。這是我們想要使用的PC,而不是鍵盤,鼠標或其他外圍設備 - phuclv
@LưuVĩnhPhúc我知道,但他寫道 So it is not an "input-only" device (meaning it only outputs data to the host) 這讓我很困惑 - Daniel


任何USB設備無論其類別如何都需要雙向通信才能運行。每個USB設備(或 功能 在USB規範方面)表示為一組 端點 可以將其視為接受或接收數據的緩衝區。但是,即使只能發送數據的端點也會等待一個特殊的數據包 代幣 在他們回復之前: enter image description here

(圖片來自 這裡,灰色框表示USB主機,白色框表示USB功能)

甚至所謂的中斷傳輸也是以這種方式完成的,USB主機使用令牌包輪詢連接的設備。常規(批量)傳輸和中斷傳輸之間的區別在於輪詢時間很短並且在後一種情況下得到保證。但是,所有轉移都是由主機發起的。


55
2018-03-06 17:13





這個問題反映了一種常見的誤解,即當按下按鍵(或鼠標移動)時,USB設備會自動向PC發送某些東西,這就是為什麼如此高度關注的原因。實際上,USB設備在收到來自主機的相應請求之前不會發送任何內容。一個例外是來自掛起設備的喚醒過程。

雖然USB表面看起來很簡單,但實際上它的功能非常複雜。任何新的USB設備必須首先“枚舉”才能開始運行。順序如下:

  1. 插入鍵盤後,主機端口接收“連接狀態”信號(對於LS信號,D-通過鍵盤拉高)。

  2. 然後主機將端口設置為“端口復位”模式,USB PHY(物理層驅動器)沿D + / D-線向下發送“USB_RESET”(兩條線路都被驅動為低電平一段規定的時間)。有關FS / HS設備“端口復位”的一些信息可以是 在這裡找到

  3. 然後主機開始以1ms的間隔輸出幀邊界數據包。對於作為普通有線鍵盤的低速(LS)設備,這些只是“保持活動”脈衝,而對於FS,則生成特殊的SOF - 幀起始數據包。這些數據包使設備保持活動狀態,並防止它進入低功耗SUSPEND。

  4. 然後“枚舉”開始。主機發送獲取設備描述符的請求。請求被發送到“默認管道”,設備地址為“0”。 [此時只有一個這樣的設備 - 鍵盤 - 因為總線上的所有其他設備已經應該具有單獨分配的USB地址]

  5. 鍵盤返回所請求的信息,因此主機將能夠確定應該加載哪種類型的驅動程序。

  6. 主機發送一個事務,要求設備將其默認地址更改為新分配的地址。

  7. 然後主機開始與設備的新一輪通信,現在在新分配的地址。所有其他設備都忽略此通信,因為它不是針對它們的。

  8. 主機可能會從其他幾個描述符中讀取更多信息,並最終選擇“設備配置”。這就結束了枚舉過程。

  9. 根據USB設備類別,主機開始與設備通信。在鍵盤情況下,主機定期發送基本上“IN”的請求,基本上輪詢設備(即使這個定期管道被稱為“中斷”管道)。如果鍵盤按下/按下任何鍵,鍵盤將返回此信息。如果不是,則不會將數據返回給設備驅動程序。

簡而言之,每個USB設備必須從USB主機接收唯一的地址,並且兩個USB主機將難以與設備通信 - 總線衝突,地址不匹配,按鍵數據的隨機攔截等.USB協議使得無法共享兩個USB主機之間的設備。


17
2018-03-07 18:27



If keyboard has any key pressed/depressed, the keyboard will return this information  - 那麼幽靈鍵怎麼會出現?我的印像是鍵盤必鬚髮送鍵盤和按鍵事件,這可以解釋為什麼如果錯過了鍵盤事件你就會有鬼鍵...... - Shadow
@shadow,不知道你在問什麼。如果我記得,鍵盤的輪詢率是8毫秒。您正在異步按鍵,因此某些事件(make或break)可以進入不同的輪詢幀,某些事件將在IN請求正在進行時發生。一個好的鍵盤控制器應該正確處理所有事件交叉,並且不應該丟失事件。我不知道為什麼鍵盤會產生“鬼鍵”,但它與USB協議無關。 - Ale..chenski
Ghost鍵與物理鍵的連接方式有關。更便宜的鍵盤控制器沒有用於每個鍵的單個引腳,而是具有用例如尋址的網格系統。控制器斷言列線的行和列,並在行線上查找信號。在這種情況下,按兩個鍵,例如除了時間之外,E和S可以與按W和D無法區分。 - Ben


正如其他答案所解釋的那樣,USB需要雙向通信作為其工作方式的一部分。 PS / 2雖然允許雙向通信,但不需要它來將密鑰發送到計算機,但確實需要它來設置鍵盤LED。

從理論上講,您可以構建一個設備來複製PS / 2信號並將其發送到另一台計算機,並丟棄來自計算機的任何命令,這樣您就可以將按鍵發送到多台計算機,但鍵盤LED不會響應num lock,大寫鎖定和滾動鎖定狀態(或任何其他LED狀態的變化,例如在Linux中,鍵盤LED有時用於替代目的)。

我不確定這樣一個項目會有多複雜。自從我使用PS / 2以來已經有一段時間了,所以我不知道你是否可以簡單地橋接幾個電線/連接器,或者你是否需要一個有源設備(例如微控制器)來向一個方向傳遞命令但是丟棄它們在另一個。如果你有一個微控制器,你甚至可以使設備能夠解釋鍵盤LED命令並“組合”它們進行顯示(例如,如果LED在計算機上打開,則長時間閃爍,但在計算機2上關閉,短暫閃爍LED如果在計算機2上打開但在計算機上打開,如果在兩台計算機上都打開,則LED穩定亮起,如果在兩台計算機上打開,則LED熄滅)。那會更加先進。

此外,如果您的目標是能夠從另一台計算機控制一台計算機,或者從同一台桌面控制兩台計算機,或者其他什麼,您可能需要查看:

  • VNC(允許通過網絡控制另一台計算機)
  • RDP(也允許通過網絡控制另一台計算機,內置於Microsoft Windows但需要專業版)
  • KVM(一種允許您在兩台計算機之間切換一組外圍設備的硬件)

2
2018-03-09 08:41





在USB鍵盤之前,PS / 2鍵盤使用了更簡單的協議,可以將一個鍵盤連接到2個設備並使其工作。 只需一個簡單的Y連接即可。

較舊的USB鍵盤仍然內置PS / 2仿真模式;使用其中一個紫色連接器適配器可以將其插入計算機背面的PS / 2端口。 因此,在2台計算機上使用USB轉PS / 2分支電纜,然後紫色適配器返回USB鍵盤可能會正常工作。

較新的USB鍵盤放棄了傳統的PS / 2模式,因此不適用於這種情況。


1
2018-03-10 17:28