USB HID限制6+2鍵

PS/2按鍵壓下與放開,是分Make Code與Break Code送出,而USB介面下則完全不同。依據USB HID(Human Interface Devices)規範,它是將正在壓下的按鍵訊號送出,沒有壓下按鍵的訊號就不送出。壓下的訊號按鍵每一次的封包為8 Bytes,其中2 Bytes 為Modifier Keys與Reserved保留鍵。

Modifier Keys為1Byte即8 bit,每一個bit可以記錄Shift、Ctrl、Alt、Windows鍵,左右側各有1顆鍵共8鍵。Reserved保留鍵可以做為Caps Lock、Number Lock、Scroll Lock等等鍵使用。扣除Modifier Keys與Reserved Keys之後,其他按鍵最多只有6鍵可以輸出。

USB鍵盤按鍵定義

什麼是 N-key 與按鍵衝突?原理說明、改善技術、選購注意完全解析

▲由USB HID 1.11中可以明確看到USB鍵盤使用8 Bytes。

什麼是 N-key 與按鍵衝突?原理說明、改善技術、選購注意完全解析

▲Reserved Keys保留鍵可以讓廠商做為多種用途。

什麼是 N-key 與按鍵衝突?原理說明、改善技術、選購注意完全解析

▲Modifier Keys每1個bit各代表著不同按鍵訊號。

什麼是 N-key 與按鍵衝突?原理說明、改善技術、選購注意完全解析

▲其他按鍵的訊號送出的定義也與Scan Codes Tables Set 2不同,USB有自己的一套查表,詳細可以查詢USB HID Uasage Tables。

訊號先進先出不打結

在USB HID中,我們真正可以使用的按鍵只有6鍵。如果按下超過6鍵,或者送出Ghost Key時,鍵盤便會送出錯誤訊息而停止。有些廠商在這裡的處理方式為採用FIFO(First In First Out,先進先出),當已經滿6顆訊號時,再讀取使用者新輸入的第7鍵訊號,就捨棄原本的第1鍵訊號,持續保持同時6鍵輸出。

什麼是 N-key 與按鍵衝突?原理說明、改善技術、選購注意完全解析

▲USB按鍵送出範例:此範例以4 Bytes封包送出鍵盤訊號,其中1 Byte保留給Modifier Keys使用。如果鍵盤沒有動作時(None),送出的封包訊號與前一次相同。

解開HID封印可行

USB HID只是對USB設備設立的規範,USB裝置也能照著自己的規則走,所以USB鍵盤同時輸出6鍵還是可行,在這分享幾種USB鍵盤突破限制的方法。只是這些方法都需要付出額外的成本,早期鍵盤幾乎都是遵守USB HID規範,所以才會有許多人認為多鍵輸出在USB介面下是不可能的任務。

模擬多把鍵盤

但其實仍有辦法遵守USB HID規範,又能突破限制。最簡單的方法,就是利用鍵盤晶片,讓電腦在使用1把鍵盤情形下,誤認為同時連接多把鍵盤。就能將鍵盤按鍵,透過模擬的鍵盤分送訊號。原本限制的6顆鍵就能串聯起來,而重複的Modifier Keys與Reserved Keys位置,也能重新定義新按鍵送出,達成多顆鍵同時輸出。

此種方法穩定性較高,造成系統誤判的機率較低,許多鍵盤都採用這種方式。不過每多模擬1把鍵盤,至少就需要多1顆晶片,還要將晶片互接連接並將訊號分配控制,成本也隨之增加。通常採用此方法時會猜測玩家的按鍵需求,而非無上限地模擬鍵盤。

什麼是 N-key 與按鍵衝突?原理說明、改善技術、選購注意完全解析

▲由作業系統的裝置管理員中,可以觀察到微軟SideWinder X4鍵盤模擬出2把鍵盤。

更改按鍵定義宣告

USB鍵盤變數宣告中,原本每Byte是代表著不同按鍵,但是可依需要重新宣告變數。每一個Byte分開成8 bits來計算,每1個bit各代表著1個按鍵,所以總共可以代表8個按鍵訊號。延伸至USB鍵盤原本8 Byte的訊號資料中,就可以代表著64顆鍵。搭配模擬多把鍵盤方式,只要模擬出第2把鍵盤就能有128個訊號,可滿足鍵盤全鍵輸出的需求。此種方法可以很容易在USB介面下達到全鍵輸出,打破介面的限制。

穩定性最重要

鍵盤相關的技術每年都會進步,要達到一樣的目標會有許多種技術,使用時通常也不會採用單一種方法,而是混合搭配。筆者無法針對每一種方法都加以詳細介紹,只能將比較常見的方法提出來討論研究。

雖然有些方法可以達到超過6鍵以上輸出,但是無法保證在每台電腦都能正常輸出。透過USB HUB等連接器時,鍵盤通常發生問題的機會較高。最後在市場鋪貨的鍵盤,多數都是將問題發生率降到最低,或者已有其他的配套方式可使用。無論如何,能夠讓玩家順利輸出鍵盤訊號才會是最重要的。

土砲自己的NKRO鍵盤

當然如果要靠自己力量,土砲出一把N-Key Rollover鍵盤不是難事。內部電路比較好去掌握,介面部分則較為複雜不易更動。國外有玩家自行購買二極體,然後再焊接於PCB電路板上,將鍵盤矩陣的電路加上跳線再加以改造,使得每個按鍵都能獨立送出訊號。這位玩家使用型號為1N4148的二極體,有興趣你也可以試試。

國外玩家做法

圖片來源網頁:http://geekhack.org/

什麼是 N-key 與按鍵衝突?原理說明、改善技術、選購注意完全解析

▲圓圈代表按鍵,此圖為製作的重點。將按鍵獨立出來,並且焊上二極體。部分按鍵電路可依需要另外連接線路。

什麼是 N-key 與按鍵衝突?原理說明、改善技術、選購注意完全解析

▲真正電路板上的按鍵訊號很複雜,判斷上不容易。首先要將按鍵獨立出來,所以部分電路板上需要先截斷電路。 

什麼是 N-key 與按鍵衝突?原理說明、改善技術、選購注意完全解析

▲然後再焊上二極體,與連接跳線。

什麼是 N-key 與按鍵衝突?原理說明、改善技術、選購注意完全解析

▲全部完成後就製作出一把N-Key Rollover鍵盤。

(後面還有更多鍵盤功能的介紹!)

使用 Facebook 留言

姚小新
1.  姚小新 (發表於 2012年8月14日 12:23)
超專業文!推推!<( ̄︶ ̄)>
看完能大致了解 N-Key Rollover 等一些專有名詞啦!(≧▽≦)
0329501d3b414b94438f79de7e81a0ff?size=48&default=wavatar
2.  JL (發表於 2012年8月14日 12:33)
請教!
D3祕術師無限冰環, 若用N-KEY ROLLOVER鍵盤, 是否可以1,2,3同時按住不動即可?
老貓 iqmore
3.  老貓 iqmore (發表於 2012年8月14日 12:35)
此為75期我在電腦王雜誌所刊登的稿件,目前應該為T客邦人員上稿,如果是由原電子稿件上稿的話,麻煩再核對一下是否相同,怕有地方有錯誤沒改到。

目前發現有問題的地方為第4頁引用「國外玩家做法」的部分,在電腦王雜誌稿上有引用原始網址,不過在此卻將網址移除,並且將國外玩家的照片加上T客邦的浮水印。這2個部分請先幫忙處理吧,感謝。
老貓 iqmore
4.  老貓 iqmore (發表於 2012年8月14日 12:36)
※ 引述《JL》的留言:
> 請教!
> D3祕術師無限冰環, 若用N-KEY ROLLOVER鍵盤, 是否可以1,2,3同時按住不動即可?

鍵盤可以同時輸出3個訊號無誤,不過也要看遊戲支援度如何,至少在鍵盤層面是可以的。
Peggy
6.  Peggy (發表於 2012年8月14日 14:06)
※ 引述《老貓 iqmore》的留言:
> 此為75期我在電腦王雜誌所刊登的稿件,目前應該為T客邦人員上稿,如果是由原電子稿件上稿的話,麻煩再核對一下是否相同,怕有地方有錯誤沒改到。
>
> 目前發現有問題的地方為第4頁引用「國外玩家做法」的部分,在電腦王雜誌稿上有引用原始網址,不過在此卻將網址移除,並且將國外玩家的照片加上T客邦的浮水印。這2個部分請先幫忙處理吧,感謝。
>

已修正完畢,請老貓再看看還有沒有問題
F87c01b19112682e80c85d5829b8aa4c?size=48&default=wavatar
7.  Steve (發表於 2012年8月14日 14:20)
我不是很懂加了二集體有什麼差別?

電路通路狀況和沒加二極體時都一樣阿

哪位高手能解釋一下..?
Shinwill
8.  Shinwill (發表於 2012年8月14日 14:46)
※ 引述《Steve》的留言:
> 我不是很懂加了二集體有什麼差別?
> 電路通路狀況和沒加二極體時都一樣阿
> 哪位高手能解釋一下..?

第二頁有說
加二極體可以隔離電流倒灌,電流不會往回流
請注意第二頁紅色電流導通的部分,碰到二極體就被擋住了
老貓 iqmore
9.  老貓 iqmore (發表於 2012年8月27日 14:18)
※ 引述《Peggy》的留言:
> 已修正完畢,請老貓再看看還有沒有問題


還是沒有修正呀...
國外玩家做法的網頁還是沒放........... ╮(╯_╰)╭
Peggy
10.  Peggy (發表於 2012年8月29日 11:07)
※ 引述《老貓 iqmore》的留言:
> 還是沒有修正呀...
> 國外玩家做法的網頁還是沒放........... ╮(╯_╰)╭
>

原本標示的國外玩家做法的網頁疑似失效,已經看不到圖片了
http://geekhack.org/showwiki.php?title=Island:6731

因此改放該網站首頁的網址
請老貓確認一下這個網頁內容有沒有問題,若沒有問題的話我們再補上,謝謝

發表回應

謹慎發言,尊重彼此。按此展開留言規則