為什麼 USB 鍵盤會有鍵沖而 PS2 的鍵盤能全鍵無沖?
其實很簡答的一個問題。
衝突這個詞語,是針對USB而言的。
以下針對機械鍵盤或者比較老的那些鍵盤,以前很老的鍵盤通常都是機械式的。機械式即為每個鍵擁有獨立的開關的。而不像現在貼片式鍵盤。
首先說說PS/2吧。IBM發明的~ ~!
PS/2協議下,鍵盤是每次發生按鍵/抬鍵動作,都會發送數據信號給主機。
按下一個鍵這個動作所包含的數據(通碼)為1或2個位元組,抬起一個鍵(斷碼)則是2或3個位元組。如果按住一個鍵不放,則會不停地向主機循環發送通碼,直到抬起按鍵發送斷碼。
PS/2的工作頻率規範為10-20kHz,每位數據的傳輸時間大約是40-80微秒,加上中間的保留延遲,每個位元組會佔用0.5-1ms的傳輸時間。延遲小。
在PS/2規範的鍵盤下,每按一次鍵,發送一次信號。各個鍵盤的信號不一樣,但可以同時發射。
第一個位元組:8位分別表示左右的Ctrl、Shift、Alt、Win各自是否被按下。這8個鍵統稱為(modifer key),因為規範已經事先定義好每一位的含義,從而得以能夠只用一個位元組就表示8個鍵的狀態。
第二個位元組:保留(無用)
其餘6個位元組:當前正按下的6個(一般按鍵,比如字母、數字等)(如果按了7個以上,根據鍵盤主控晶元內置的程序,可能取最先按的6個,也可能取最後按的6個)。
即每1-8ms,可以發送最多14個按鍵的狀態信息。
最多能發送14個按鍵,扣除Ctrl、Alt、Win、Shift一共8個鍵外,還剩下6個字母、數字等按鍵啦。
這個是USB規範的痛。
看你掃描電路怎麼做了,為省成本,做個矩陣掃描,最常見的就是3鍵避位了。然後幾個控制鍵單獨掃描,這樣就可以滿足大部分需求,鍵盤畢竟是成本很低的東西。
當然,成本允許,每個鍵都獨立掃描,那也行,反正hid協議也支持。只是掃描電路貴一點而已。所以不是ps2就行,以前10塊錢的ps2鍵盤,三鍵一起按也滴滴叫1. PS2/USB 均可做到無衝突,但是 USB 需要特殊處理,(模擬多個 usb 鍵盤,並不需要hub)
2. 掃描電路,如果使用矩陣掃描電路,不可避免會產生衝突(同時按下位於矩形連接框頂點的3個鍵,第四個鍵將無法識別),傳統的做法是通過走線布局,把可能同時按下的4個鍵不放在矩形框里,所謂的防鬼鍵演算法.(大部分鍵盤都是這樣,並不是任意4個鍵不能同時按,是特定的4個鍵不能同時按).土豪掃描電路可以每個鍵配一個掃描IO口,就怎麼也不會衝突了.(當然實際沒必要,矩陣掃描折中一下就可以了)
3. 薄膜鍵盤和機械鍵盤和有無衝突無關,薄膜鍵盤一般低成本,自然不會選擇土豪掃描電路
前面的回答很好,不過還有一個很關鍵的因素,所謂的全鍵無衝突,只有在ps2介面機械鍵盤上才能真正實現,一方面是因為ps2介面的原因,還有一方面是機械鍵盤在每個鍵位上裝了一個二極體,用於更好地確定單個鍵位的信號不和其他鍵位衝突。
這一點,薄膜鍵盤是怎麼也無法實現的,所以,哪怕薄膜鍵盤用ps2介面,也做不到全鍵無衝突。
1,USB HID協議僅支持6鍵無沖,但是可以靠多枚舉鍵盤的方式做全鍵無沖。PS2可以全鍵無沖。
2,鬼鍵衝突問題每個鍵上串個幾分錢的二極體就是。103鍵也就兩三塊錢。
我覺著按照這個方式安排矩陣的話,應該不會出現物理上的按鍵衝突,我還是覺著是usb協議本身的問題。
圖片來自:
圖片來自:How to make a keyboard (開源鍵盤GH60的作者的文章)
ps一下,鍵盤的按鍵衝突在安排鍵盤矩陣的時候還是比較難懂的,主要是解決這個問題的辦法除了多加二極體,還有一種是在程序上動手腳,比如檢測到多鍵按下的時候根本不向電腦發送數據,而且還極有可能某些組合鍵能發送,某些組合鍵不能發送,這就是廠家的程序設計的問題了。順便說一下 原作者說
I will try to describe the problem of NKRO in PS/2 and USB in the further parts.
(The term NKRO means n key rollover and it"s used to describe a keyboard that can support any combination of keys pressed together no matter what.
翻譯:NKRO是指n鍵輪迴,被用來描述支持任意多按鍵的組合鍵,而且還是那種任何組合鍵都能支持的那種)
但是他並沒有填坑,所以,不用打開鏈接去看了。
最簡單的做法應該是Diode Per Key了
Gost key 鬼鍵。採用83053矩陣做最大避免 硬體設計的必然結果 常規辦公完全夠用 按鍵在矩陣的排布非常講究
Ps 2 usb 和這個沒任何關係@司馬狂徒 模擬多個鍵盤不需要內置HUB,HID Descriptor里想寫幾個Keyboard的TLC就可以寫幾個。
看到大神們都說了解決方案,但是到底解決後成本需要多少?貴一兩塊沒問題。解決的成本不需要超過一百吧
上面一堆說用USB模擬多個鍵盤的,還內置hub。。。請問真的有去好好研究過USB HID協議嗎?Descriptors寫好了想多少鍵無衝突都行。只有標準的USB鍵盤(即支持boot模式的USB鍵盤)才是6鍵無衝突,這種鍵盤的報告描述符格式在協議里都定死了,所以只能6鍵無衝突。當然可以通過一些小trick讓鍵盤在boot時是標準鍵盤,boot完畢後轉用自定義的報告描述符,但此時已經不是傳統意義上的「標準USB鍵盤」了
內容補充:
1. PS/2 USB 都可以實現全鍵無沖
2. 模擬多個設備,就是內置HUB的方式容易造成各種意外
3. 兩個人在鍵盤上玩遊戲,比如拳皇的時候,這個時候就會超過10個紙頭啦
前面回答得有點問題。
原本,什麼是無沖呢? 為什麼會沖呢?
按鍵到電腦接受到,需要通過幾個環節,每個環節出問題,都有可能造成衝突,英語叫 jamming.就是同時按下幾個鍵,有的鍵沒被偵測到.
1. 通訊協議. ps/2和usb, 速率都可以達到毫秒級, 所以都可以實現無沖.
2. 按紐/開關. 機械鍵盤的機械開關, 薄膜鍵盤用的塑料薄膜, 他們是開關,不決定是否無沖
3. 關鍵是電路. 機械鍵盤可以有衝突,薄膜鍵盤也可以做成無沖(連接方式要變)
話說回來,人的手指只有10個,10沖其實就足夠了.
目前號稱全鍵無沖的, 我有點不信, 要把具體型號的電路看一下才能了解.
推薦閱讀: