隨著IBM PC機的發展,鍵盤也分為XT, AT, PS/2鍵盤以至于后來的USB鍵盤. PC系列機使用的鍵盤有83鍵、84鍵、101鍵、102鍵和104鍵等多種。XT和AT機的標準鍵盤分別為83鍵和84鍵,而286機以上微機的鍵盤則 普遍使用101鍵、102鍵或104鍵。83鍵鍵盤是最早使用的一種PC機鍵盤,其鍵號與掃描碼是一致的。這個掃描碼被直接發送到主機箱并轉換為 ASCII碼;隨著高檔PC機的出現,鍵盤功能和按鍵數目得到了擴充,鍵盤排列也發生了變化,產生的掃描碼與83鍵鍵盤的掃描碼不同。為了保持PC系列微 機的向上兼容性,需將84/101/102/104鍵鍵盤的掃描碼轉換為83鍵鍵盤的掃描碼,一般將前者叫作行列位置掃描碼,而將后者稱為系統掃描碼。顯 然,對于83鍵鍵盤,這兩種掃描碼是相同的。
鍵盤是由一組排列成矩陣方式的按鍵開關組成,通常有編碼鍵盤和非編碼鍵盤兩種類型,IBM系列個人微型計算機的鍵盤屬于非編碼類型。微機鍵盤主要由單片 機、譯碼器和鍵開關矩陣三大部分組成。其中單片機采用了INTEL8048單片微處理器控制,這是一個40引腳的芯片,內部集成了8位 CPU、1024×8位的ROM、64×8位的RAM、8位的定時器/計數器等器件。由于鍵盤排列成矩陣格式,被按鍵的識別和行列位置掃描碼的產生,是由 鍵盤內部的單片機通過譯碼器來實現的。單片機在周期性掃描行、列的同時,讀回掃描信號線結果,判斷是否有鍵按下,并計算按鍵的位置以獲得掃描碼。當有鍵按 下時,鍵盤分兩次將位置掃描碼發送到鍵盤接口;按下一次,叫接通掃描碼;釋放時再發一次,叫斷開掃描碼。因此可以用硬件或軟件的方法對鍵盤的行、列分別進 行掃視,去查找按下的鍵,輸出掃描位置碼,通過查表轉換為ASCII碼返回。
鍵盤是與主機箱分開的一個獨立裝置,通過一根5芯電纜與主機箱連接,系統主板上的鍵盤接口按照鍵盤代碼串行傳送的應答約定,接受鍵盤發送來的掃描碼;鍵盤 在掃描過程中,7位計數器循環計數。當高5位(D6一D2)狀態為全“0”時,經譯碼器在O列線上輸出一個“0”,其余均為“1”;而計數器的低二位 (D1D0)通過4選1多路選擇器控制0—3行的掃描。計數器計一個數則掃描一行,計4個數全部行線掃描一遍,同時由計數器內部向D2進位,使另一列線1 變低,行線再掃描一遍。只要沒有鍵按下,多路選擇器就一直輸出高電平,則時鐘一直使計數器循環計數,對鍵盤輪番掃描。當有一個鍵被按下時,若掃描到該鍵所 在的行和列時,多路選擇器就會輸出一個低電平,去封鎖時鐘門,使計數器停止計數。這時計數器輸出的數據就是被按鍵的位置碼(即掃描碼)。8048利用程序 讀取這個鍵碼后,在最高位添上一個“O”,組成一個字節的數據,然后從P22引腳以串行方式輸出。在8048檢測到鍵按下后,還要繼續對鍵盤掃描檢測,以 發現該鍵是否釋放。當檢測到釋放時,8048在剛才讀出的7位位置碼的前面(最高位)加上一個“1”,作為“釋放掃描碼”,也從 P22引腳串行送出去,以便和“按下掃描碼”相區別。送出“釋放掃描碼”的目的是為識別組合鍵和上、下檔鍵提供條件。
同時,主機還向鍵盤發送控制信號,主機CPU響應鍵盤中斷請求時,通過外圍接口芯片8255A一5的PA口讀取鍵盤掃描碼并進行相應轉換處理和暫存;通過PB口的PB6和PB7來控制鍵盤接口工作。
從用途上看,鍵盤可分為臺式機鍵盤、筆記本電腦鍵盤和工控機鍵盤三大類;其中臺式機鍵盤從按鍵結構上又可分為兩類,即機械鍵盤和電容鍵盤(又稱有觸點鍵盤 和無觸點鍵盤)。機械鍵盤存在著開關容易損壞、易污染、易老化的缺點,現已基本淘汰。電容鍵盤在可靠性上比前者有質的飛躍,使用壽命較長,目前大多為電容 鍵盤。
早期的鍵盤是由美國IBM公司推出的,當時采用的計算機鍵盤為83鍵鍵盤。不久IBM又推出了84鍵的鍵盤設計標準,將鍵盤分為三個區,即功能區、打字鍵 區及負責光標控制和編輯的副鍵盤區,這種鍵盤主要區域的劃分標準一直沿用至今。隨著微軟Windows視窗操作系統的廣泛應用,IBM公司于1986年首 次推出了101鍵的標準鍵盤,除添加了F11、F12兩個功能鍵之外,還在鍵盤的中部多加了一組專用的光標控制和編輯的鍵,使鍵盤功能得到了進一步擴充, 成為當時業界的標準鍵盤。后來,為與微軟的Win95操作系統相配合,IBM又推出了104鍵鍵盤,新增了3個功能鍵(亦稱Windows快捷鍵或熱鍵 <HotKey>),使以前需要打開好幾個窗口才能完成的某些功能,通過快捷鍵的設定直接啟動菜單完成,而不必再點擊鼠標,這樣就使計算機的 操作更加便易。目前,這種104鍵的鍵盤(亦稱Win95鍵盤)的設計已成為業界和市場上最為普遍、最為流行的一種標準,業界通稱為標準鍵盤。實際上,所 謂的標準鍵盤并沒有標準,只因其應用較為廣泛而被業界通稱為標準鍵盤。由于軟件的不斷升級更新,為配合軟件的需要,所謂的標準鍵盤的鍵數也在隨之擴增,并 因其又被業界所通常采納而又被業界通稱為標準鍵盤。
但是,無論是機械鍵盤或者電容鍵盤,還是從早期的83鍵鍵盤發展到目前通稱的標準鍵盤104鍵鍵盤,其應用都是主要依賴于硬件CPU和軟件操作系統。以下就鍵盤的構造及工作原理等問題進行介紹。
(一)鍵盤構造及工作原理
PS/2設備履行一種雙向同步串行協議。換句話說,每次數據線上發送一位數據并且每在時鐘線上發一個脈沖就被讀入。設備可以發送數據到主機,而主機也可以發送數據到設備,但主機總是在總線上有優先權,它可以在任何時候抑制來自設備的通信,只需把時鐘線電平拉低即可。
鍵盤的內部結構主要包括控制電路板、按鍵、底板和面板等。電路板是整個鍵盤的控制核心,位于鍵盤的內部,主要擔任按鍵掃描識別、編碼和傳輸接口工作;它將各個鍵所表示的數字或字母轉換成計算機可以識別的信號,是用戶和計算機之間主要的溝通者之一。
鍵盤主要由鍵開關矩陣、單片機和譯碼器三大部分組成。鍵開關矩陣即鍵盤按鍵由一組排列成矩陣方式的按鍵開關組成,所輸入的信號由按鍵所在的位置決定。單片 機即鍵盤內部采用的Intel 8048單片機微處理器,這是一個40引腳的芯片,內部集成了8位CPU、1024×8位的ROM、64×8位的RAM以 及8位的定時器/計數器等。譯碼器即信號編碼轉譯裝置,把鍵盤的字符信號通過編碼翻譯轉換成相應的二進制碼。由于鍵盤排列成矩陣格式,被按鍵的識別和行列 位置掃描碼的產生,是由鍵盤內部的單片機通過譯碼器來實現的。根據鍵盤向主機送入的二進制代碼類型,可把鍵盤分為編碼鍵盤和非編碼鍵盤兩種。IBM PC機的鍵盤屬于非編碼鍵盤,其特點是不直接提供所按鍵的編碼信息,而是用較為簡單的硬件和一套專用程序來識別所按鍵的位置,并提供與所按鍵相對應的中間 代碼,然后再把中間代碼轉換成要對應的編碼。這樣,非編碼鍵盤就為系統軟件在定義鍵盤的某些操作功能上提供了更大的靈活性。
計算機鍵盤通常采用行列掃描法來確定按下鍵所在的行列位置。所謂行列掃描法是指,把鍵盤按鍵排列成n行×m列的n*m行列點陣,把行、列線分別連接到兩個 并行接口雙向傳送的連接線上,點陣上的鍵一旦被按動,該鍵所在的行列點陣信號就被認為已接通。按鍵所排列成的矩陣,需要用硬件或軟件的方法輪轉順序地對其 行、列分別進行掃描,以查詢和確認是否有鍵按動。如有鍵按動,鍵盤就會向主機發送被按鍵所在的行列點陣的位置編碼,稱為鍵掃描碼。單片機通過周期性掃描 行、列線,讀回掃描信號結果,判斷是否有鍵按下,并計算按鍵的位置以獲得掃描碼。鍵被按下時,單片機分兩次將位置掃描碼發送到鍵盤接口:按下一次,叫接通 掃描碼;按完釋放一次,叫斷開掃描碼。這樣,通過硬件或軟件的方法對鍵盤分別進行行、列掃視,就可以確定按下鍵所在位置,獲得并輸出掃描位置碼,然后轉換 為ASCII碼,經過鍵盤I/O電路送入主機,并由顯示器顯示出來。
鍵盤要增加鍵數是很容易的,任何矩陣鍵盤通過增加鍵盤的行或列便可實現增加按鍵數。如64 鍵的鍵盤排列成8行×8列的行列點陣,128鍵的鍵盤排列成8行×16列的行列點陣,256鍵的鍵盤排列成16行×16列的行列點陣,這在1992年7月 出版的《微處理機為基礎之設計》出版物上已作介紹(此對比文獻在2001年12月13日已遞交)。因此,鍵盤結構采用矩陣式早已是公有技術。
(二)鍵盤的按鍵增加及功能改進
隨著計算機CPU(硬件)和Windows操作系統(軟件)的不斷升級換代,計算機的發展進入到了包括多媒體在內的高速多功能時代。與此相適應,計算機鍵 盤也出現了一些新的變化,主要表現在鍵盤鍵數的增加及功能的整合。美國蘋果(Apple)公司早在1992年就曾推出過設有調整音量按鍵的鍵盤。時下流行 的多媒體鍵盤,也叫多功能鍵盤,其特征是增加了一些快捷鍵(或功能鍵),通過設定主板BIOS或軟件設定,使這些新增的鍵可以實現開關電腦、休眠啟動、 CD播放、音量調整、一鍵上網等特殊功能。此外還出現了一些多功能集成的鍵盤,如將掃描儀、錄音設備或手寫板、鼠標等整合為一體的鍵盤,以及帶有文字編輯 或指紋識別功能的智能鍵盤等。
如前所述,IBM定義的101鍵鍵盤與微軟(Microsoft)所定義的三鍵共同形成的104 鍵Win95鍵盤一般被稱作標準鍵盤,那么標準鍵盤的104鍵之外如何增加按鍵擴充功能呢?從目前鍵盤發展情況看,可以有多種方法。單就增加鍵盤按鍵的設 定技術看,一般來講,按鍵的增加取決于三個方面的因素:一是CPU能識別,二是操作系統能響應,三是鍵盤內部電路結構能安排。從前面的介紹可知,CPU和 操作系統這兩個因素是計算機必備的現成技術,不成問題。這樣,增加鍵盤按鍵的關鍵就在于鍵盤的內部結構。以下兩種方法可以直接簡便地增加鍵盤按鍵。
目前PC機鍵盤按鍵一直沿用IBM的行列矩陣方式布局排列,稱為掃描矩陣,其內部電路結構的核心是8048(包括其后續升級系列)單片機微處理器。根據單 片機微處理器特定的I/O(即Input/Output輸入/輸出)電路,IBM將鍵盤按鍵的行列矩陣定義為8行×16列=128鍵,而現行的標準鍵盤只 使用了其中的104鍵,故尚有128-104=24鍵的陣點閑余,尚未定義。因此,增加按鍵的方法之一是,直接在這尚未定義的24個閑余按鍵陣點中繼續定 義新鍵以擴增新的功能鍵。方法之二是,通過改變單片機微處理器I/O電路的配線方式,可以把IBM的原8行×16列掃描矩陣變為(8+n)行×16列,如 (8+1)行×16列=144鍵等,這樣就會在128鍵之外獲得新增加的一行16個鍵位,再根據需要為其定義功能。以上兩種方法都可以達到增加104鍵的 標準鍵盤的按鍵數的目的。簡而言之,第一種方法是在原掃描矩陣8行×16列的行列點陣中尚未利用的24個點上,根據需要可任意增加1至24個新鍵;第二種 方法是在單片機微處理器原掃描矩陣8行×16列基礎上再增加一行,變為9行×16列掃描矩陣,再根據需要任意增加新鍵,并不會帶來單片機微處理器本身原有 功能的更新。如IBM 的83鍵盤發展到原來的標準鍵盤101鍵,其要增加的鍵數只要通過增加鍵盤的行或列,并在增加的行列陣點上進行定義便可實現;而原來的101鍵的標準鍵盤 后發展到目前的104鍵的標準鍵盤,其增加的3個鍵數可以不增加鍵盤的行和列,只要在原掃描矩陣中尚未定義的點上直接定義就可以。無論是第一種方法還是第 二種方法,都已經屬于公有技術領域的技術。
什么是鍵盤的鍵位沖突?
簡單的說,也就是當你同時按下鍵盤上的幾個鍵的時候,這幾個鍵不能同時反映出來,這就叫做鍵盤的鍵位沖突。例如說,你能想象當你按下Ctrl-Alt-Del時,系統只能接收到前兩個鍵,而死活不承認你按了Del鍵嗎?
當然,現實中是不會有這樣的鍵盤的,按不下Ctrl-Alt-Del的鍵盤根本就沒法出廠,但其他一些常見的鍵位沖突就不稀奇了。例如,經常有一些鍵盤不能同時對例如A-S-空格這樣的按鍵組合作出反應,這樣在FPS游戲中,使用者就會大為吃虧。
對于鍵位沖突問題,電腦用戶中有兩種完全不同的態度,絕大多數人根本意識不到鍵位沖突問題的存在,直到遇到沖突的時候才叫苦不迭,并且大呼“為什么他就能 做這個動作?”;而另一部分人,特別是一些游戲高手,又在孜孜不倦的尋找“沒有鍵位沖突的鍵盤”。這兩種人都是對鍵位沖突的原因認識不清楚的。
鍵位沖突的直接起因,是鍵盤的非編碼結構。在2月號的專題中,我們提到過現在的鍵盤幾乎都是非編碼的薄膜接觸式鍵盤,那么什么是非編碼鍵盤呢?在專題里我們沒有詳細的解釋,下面我們就來詳細說明一下非編碼鍵盤的原理與結構。
傳統的鍵盤,是編碼式鍵盤,它的每個鍵按下時都會產生唯一的按鍵編碼,并且通過專有的一組導線傳輸到鍵盤接口電路,由于其線路和編碼的唯一性,這種鍵盤是不存在鍵位沖突的問題的,但是編碼鍵盤結構復雜,現在已經很少使用了。
而現代的薄膜接觸式鍵盤,任何一個按鍵都有上下兩層薄膜的觸點,我們將它拆開來仔細看一看(如圖),就會發現在任何一層薄膜上,導線數都遠少于按鍵數,而 且每一條導線都同時連通多個按鍵的觸點,而且,上層和下層的任何兩條導線都最多只在一個按鍵上重合。也就是說,上層的1號導線可能會同時經過1、2、3、 4、5……等按鍵,而下層的1號導線可能同時經過1、Q、A、Z……等按鍵,且兩條導線只在1鍵上重合。
什么是鍵盤的鍵位沖突?簡單的說,也就是當你同時按下鍵盤上的幾個鍵的時候,這幾個鍵不能同時反映出來,這就叫做鍵盤的鍵位沖突。例如說,你能想象當你按下Ctrl-Alt-Del時,系統只能接收到前兩個鍵,而死活不承認你按了Del鍵嗎?
當然,現實中是不會有這樣的鍵盤的,按不下Ctrl-Alt-Del的鍵盤根本就沒法出廠,但其他一些常見的鍵位沖突就不稀奇了。例如,經常有一些鍵盤不能同時對例如A-S-空格這樣的按鍵組合作出反應,這樣在FPS游戲中,使用者就會大為吃虧。
對于鍵位沖突問題,電腦用戶中有兩種完全不同的態度,絕大多數人根本意識不到鍵位沖突問題的存在,直到遇到沖突的時候才叫苦不迭,并且大呼“為什么他就能 做這個動作?”;而另一部分人,特別是一些游戲高手,又在孜孜不倦的尋找“沒有鍵位沖突的鍵盤”。這兩種人都是對鍵位沖突的原因認識不清楚的。
鍵位沖突的直接起因,是鍵盤的非編碼結構。在2月號的專題中,我們提到過現在的鍵盤幾乎都是非編碼的薄膜接觸式鍵盤,那么什么是非編碼鍵盤呢?在專題里我們沒有詳細的解釋,下面我們就來詳細說明一下非編碼鍵盤的原理與結構。
傳統的鍵盤,是編碼式鍵盤,它的每個鍵按下時都會產生唯一的按鍵編碼,并且通過專有的一組導線傳輸到鍵盤接口電路,由于其線路和編碼的唯一性,這種鍵盤是不存在鍵位沖突的問題的,但是編碼鍵盤結構復雜,現在已經很少使用了。
而現代的薄膜接觸式鍵盤,任何一個按鍵都有上下兩層薄膜的觸點,我們將它拆開來仔細看一看(如圖),就會發現在任何一層薄膜上,導線數都遠少于按鍵數,而 且每一條導線都同時連通多個按鍵的觸點,而且,上層和下層的任何兩條導線都最多只在一個按鍵上重合。也就是說,上層的1號導線可能會同時經過1、2、3、 4、5……等按鍵,而下層的1號導線可能同時經過1、Q、A、Z……等按鍵,且兩條導線只在1鍵上重合。
這樣,根據上層薄膜和下層薄膜所經過的按鍵,就可以排出一個類似下面的表格:
|
上層導線1 |
上層導線2 |
上層導線3 |
上層導線4 |
上層導線5 |
…… |
下層導線1 |
1 |
2 |
3 |
4 |
5 |
…… |
下層導線2 |
Q |
W |
E |
R |
T |
…… |
下層導線3 |
A |
S |
D |
F |
G |
…… |
下層導線4 |
Z |
X |
C |
V |
B |
…… |
…… |
…… |
…… |
…… |
…… |
…… |
…… |
在非編碼鍵盤的接口控制電路中,就存儲著這樣一張表格,當按下某個按鍵,例如“Q”時,那么在這一點上,上下兩個觸點就會連通,反映到接口電路中,就會檢 測到上層導線1與下層導線2被連通了。相對應在表中一查,就會知道,被按下的是字母“Q”,然后通過接口輸出其ASCII碼。
與老式的編碼式鍵盤相比,非編碼鍵盤的結構要簡單許多,省略了復雜的編碼電路和蜘蛛網似的走線,而且更重要的是,由于非編碼式鍵盤將按鍵結構和輸出鍵碼分 離,所以當需要制造不同鍵位排列的鍵盤時,不需要重新設計鍵盤線路,而只要將控制電路中的鍵位排列表格重新刷新就可以了。例如在德文鍵盤上,子母“Y”和 “Z”的位置是互調的,那么如果要把一條英文鍵盤生產線改造成德文鍵盤生產線,什么都不用改變,只須在控制芯片中刷進一個新的排列表,將“上層導線1-下 層導線4”的位置寫作“Y”,“Z”字也作同樣處理就行了,顯然比重新布線要簡單了很多。這也就是為什么非編碼式鍵盤大行其道的原因。
但是非編碼式鍵盤帶來的就是“鍵位沖突”的問題。以上面的按鍵排列表為例,當按下一個按鍵時,鍵盤肯定會正常識別的;當按下兩個按鍵時,例如同時按下 “Q”與“D”,此時上層導線1與下層導線2連通,而上層導線3與下層導線3連通,系統完全可以正常識別;或者同時按下“Q”與“E”,此時,上層導線 1、下層導線2、上層導線3同時連通,系統同樣可以正常識別出是按下了這三個按鍵。
但在同時按下3個或3個以上按鍵時,情況就復雜了。
在一種情況下,例如同時按下“Q”、“D”、“B”時,此時,從表中我們可以看出,上層導線1-下層導線2、上層導線3-下層導線3、上層導線5-下層導線4都分別連通,此時系統完全可以正常識別出按下了這三個按鍵。
但當按下的第三個按鍵不是“B”,而是“E”呢?
此時,我們可以發現,由于第三組連通的導線變成了上層導線3-下層導線2,所以,此時反映到接口控制芯片的信號是:上層導線1-下層導線2-上層導線3-下層導線3統統被連通到了一起。
但是,問題就在于,除了按下的第三個按鍵是“E”以外,如果按下的第三個鍵是用來連通上層導線1和下層導線3的“A”,也會有同樣的信號組合?事實上, “Q”、“E”、“A”、“B”四個按鍵中按下任何三個都會有同樣的信號組合,那么此時接口電路怎么判斷呢?究竟是按下了哪三個按鍵或者是同時把四個按鍵 都按下了呢?
這個時候,大多數鍵盤選擇的方式,就是按照一個固定的規則輸出固定的按鍵組合代碼,對于其他可能的組合方式統統予以忽略,換句話說,在上面的鍵盤中,可能 無論你怎么按這四個按鍵,它可能永遠只會輸出“Q”-“E”-“D”的組合,盡管可能你按下的實際是“Q”-“A”-“D”(這里只是一個假設,實際上為 了避免誤碼,大多數鍵盤根本只輸出兩個按鍵而已)。于是,“鍵位沖突”就出現了。
由于非編碼鍵盤的固有結構,“鍵位沖突”是不可避免的。于是就需要鍵盤的設計者絞盡腦汁修改鍵盤的線路排列和待查表格,盡量使可能會有的常用組合按鍵避開 沖突鍵位——盡管要做到所有的按鍵都不發生沖突是不可能的,但你總不能讓Ctrl-Alt-Del相互沖突吧?那這樣的鍵盤還怎么用?還有如果四個方向鍵 相互沖突,那賽車類的游戲還怎么玩?
不過,由于市場上的游戲實在太多,每個游戲都可能會有自己常用的按鍵組合,甚至每個人都有自己的習慣按鍵,鍵盤的設計者當然不可能面面俱到,有經驗的設計 師可能會考慮得多一些,至少對最常見的游戲和最常見的按鍵設置能夠保證不出現問題,但要考慮到所有情況當然是不可能的。
所以,當你購買鍵盤的時候,絕對不要忽略“鍵位沖突”的問題,一定要把鍵盤裝到電腦上,試一試自己常玩的游戲是否能夠正常使用(只有實際試用才能試出鍵位 沖突問題,由于它與鍵位表相關,所以看外表是看不出來的)。同時,一些游戲高手朋友也不要白費心機去尋找什么“沒有鍵位沖突的鍵盤”了,只要它依然是非編 碼鍵盤,那么鍵位沖突就是不可避免的,只要它的鍵位沖突不對你所玩的游戲構成影響,這就足夠了。
PS/2協議分析
The PS/2 mouse and keyboard implement a bidirectional synchronous serial protocol.
PS/2鼠標和鍵盤執行一個雙向同步串行協議。
The bus is "idle" when both lines are high (open-collector).
總線空閑時,兩條線都是高電平(集電極開路)。
This is the only state where the keyboard/mouse is allowed begin transmitting data.
在這種狀態下,鍵盤/鼠標才允許開始傳輸數據。
The host has ultimate control over the bus and may inhibit communication at any time by pulling the Clock line low.
主機對總線有最高的控制權,在任何時候通過將時鐘線拉低就可以禁止通信。
The device always generates the clock signal.
時鐘信號總是由設備端生成的。
If the host wants to send data, it must first inhibit communication from the device by pulling Clock low.
如果主機想發送數據,它必須先將時鐘拉低來禁止來自設備端的通信。
The host then pulls Data low and releases Clock.
然后主機再拉低數據線,釋放時鐘。 注釋:釋放時鐘,就是再恢復時鐘為高
This is the "Request-to-Send" state and signals the device to start generating clock pulses.
這就是"請求發送(Request-to-Send)"狀態,提示 設備端 開始生成時鐘信號。
Summary: Bus States
Data = high, Clock = high: Idle state.
Data = high, Clock = low: Communication Inhibited.
Data = low, Clock = high: Host Request-to-Send
總結:總線狀態
數據 0 1
0 ---------通信禁止-----------
時鐘
1 主機要求發送 總線空閑
The clock and data pins are bidirectional, open-collector
signals that are pulled to 5 V by pullup resistors in the keyboard.
時鐘和數據 引腳時 雙向 集電極開路的信號,可以被鍵盤內部的上拉電阻 拉高到5V
Data sent from the device to the host is read on the falling edge of the clock signal; data sent from the host to the device is read on the rising edge.
從設備發送給主機的數據時在時鐘信號的下降沿讀取的;從主機發給設備的數據是在上升沿讀取的。
The clock frequency must be in the range 10 - 16.7 kHz. This means clock must be high for 30 - 50 microseconds and low for 30 - 50 microseconds..
時鐘頻率必須在10-16.7KHz之間。這意味著時鐘必須是 高電平持續30~50毫秒,低電平持續
30~50毫秒。
If you're designing a keyboard, mouse, or host emulator, you should modify/sample the Data line in the middle of each cell. I.e. 15 - 25 microseconds after the appropriate clock transition.
如果你設計一個鍵盤 鼠標 或者 主機模擬器,你必須 在每個單元的中間時刻 (也就是,在時鐘跳變之后的15~25毫秒后) 修改/取樣數據線.
Again, the keyboard/mouse always generates the clock signal, but the host always has ultimate control over communication.
重復一遍,鍵盤/鼠標 總是 生成時鐘信號, 而 主機 控制著整個通信過程。
Timing is absolutely crucial. Every time quantity I give in this article must be followed exactly.
時序是非常重要的。在本文中給出的時間數必須嚴格遵循。
設備發送數據到主機
The Data and Clock lines are both open collector.
數據和時鐘線都是集電極開路的。
A resistor is connected between each line and +5V, so the idle state of the bus is high.
在+5V 和每根線 之間連接著一個電阻,所以 總線的空閑狀態 是 高電平。
When the keyboard or mouse wants to send information, it first checks the Clock line to make sure it's at a high logic level.
當鍵盤或者鼠標想發送數據時,它首先必須檢查時鐘線 ,確認它處于高電平。
If it's not, the host is inhibiting communication and the device must buffer any to-be-sent data until the host releases Clock.
如果不是,主機禁止通信,設備必須緩沖任何要發送的數據,直到主機釋放時鐘。
The Clock line must be continuously high for at least 50 microseconds before the device can begin to transmit its data.
在設備開始傳輸數據之前,時鐘線 必須持續為 高電平的 時間 必須 至少50ms
The keyboard/mouse writes a bit on the Data line when Clock is high, and it is read by the host when Clock is low.
當時鐘為高電平時,鍵盤/鼠標寫一個bit到數據線上;當時鐘為低電平時,主機從數據線上讀取這個bit 。
The Data line changes state when Clock is high and that data is valid when Clock is low.
當時鐘位高時,數據線 改變狀態;
當時鐘位低時,(數據線上的)數據是有效的。
The clock frequency is 10-16.7 kHz.
時鐘頻率是10-16.7KHz
The time from the rising edge of a clock pulse to a Data transition must be at least 5 microseconds.
從時鐘脈沖的上升沿到數據跳變 的時間必須至少 5ms
The time from a data transition to the falling edge of a clock pulse must be at least 5 microseconds and no greater than 25 microseconds.
從數據跳變 到時鐘脈沖的下降沿 必須 至少5ms,且不超過25ms
The host may inhibit communication at any time by pulling the Clock line low for at least 100 microseconds.
主機可在任何時間禁止通信,只需要將時鐘線下拉位低電平超過100ms即可
If a transmission is inhibited before the 11th clock pulse, the device must abort the current transmission and prepare to retransmit the current "chunk" of data when host releases Clock.
如果在第11個脈沖時禁止傳輸,設備必須中止當前的傳輸,準備重新傳輸當前的數據"chunk(塊)"當主機釋放時鐘時
A "chunk" of data could be a make code, break code, device ID, mouse movement packet, etc.
一個數據塊可能時 通碼,斷碼,設備ID,鼠標移動包 等等。
For example, if a keyboard is interrupted while sending the second byte of a two-byte break code, it will need to retransmit both bytes of that break code, not just the one that was interrupted.
舉個例子,如果當發送 一個兩字節斷碼的 第2個字節時,鍵盤被中斷,它將需要重新發送
此斷碼的兩個字節,而不僅僅時被中斷掉的那個字節。
If the host pulls clock low before the first high-to-low clock transition, or after the falling edge of the last clock pulse, the keyboard/mouse does not need to retransmit any data.
如果在第一個 高->低 時鐘跳變 時,(或者在 最后一個時鐘脈沖的下降沿 之后)主機將時鐘拉低,鍵盤/鼠標 不必重新傳輸任何數據。
However, if new data is created that needs to be transmitted, it will have to be buffered until the host releases Clock.
但是,如果新產生的數據需要傳輸,它必須將數據緩沖,知道主機釋放時鐘。
Keyboards have a 16-byte buffer for this purpose. If more than 16 bytes worth of keystrokes occur, further keystrokes will be ignored until there's room in the buffer.
鍵盤有一個16字節的緩沖區。如果有超過16個字節的擊鍵存在,更多的擊鍵將被忽略。直到
緩沖區有空地。
Mice only store the most current movement packet for transmission.
鼠標只能緩沖最近的一個要傳輸的(移動)數據包。
|
Time to auxiliary device inhibit after clock 11 to ensure the auxiliary device does not start another transmission
The auxiliary device checks the 'clock' line. If the line is inactive, output from the device is not allowed.
輔助設備(指 鍵盤) 檢查 時鐘線 ,如果時低電平,禁止發送數據
The auxiliary device checks the 'data' line. If the line is inactive, the controller receives data from the system.
設備檢查數據線,如果是 低電平,那么控制器從系統接收數據
The auxiliary device checks the 'clock' line during the transmission at intervals not exceeding 100 microseconds. If the device finds the system holding the 'clock' line inactive, the transmission is terminated. The system can terminate transmission anytime during the first 10 clock cycles.
設備在傳輸過程中 檢查 時鐘 線 間隔不超過100us。 如果設備發現 主機系統 將電平拉低,就終止傳輸。 在傳輸過程的前10個時鐘周期的任何時候,主機系統可以中止傳輸。
A final check for terminated transmission is performed at least 5 microseconds after the 10th clock.
終止傳輸的最后一個檢查 要持續至少5us
The system can hold the 'clock' signal inactive to inhibit the next transmission.
系統拉低時鐘線,將禁止下一次傳輸
The system can set the 'data' line inactive if it has a byte to transmit to the device. The 'data' line is set inactive when the start bit (always 0) is placed on the 'data' line.
系統如果有一個字節要傳輸給設備,可以拉低數據線。當開始位(總是0)放置到數據線時,數據線被拉低。
The system raises the 'clock' line to allow the next transmission.
系統拉高時鐘將允許下一次傳輸
Host-to-Device主機到設備的通信
First of all, the PS/2 device always generates the clock signal.
首先,PS/2設備總是產生時鐘信號
If the host wants to send data, it must first put the Clock and Data lines in a "Request-to-send" state as follows:
如果主機想發送數據,它必須先將時鐘線和數據線設置成"Request-to-send"狀態:
1) Inhibit communication by pulling Clock low for at least 100 microseconds.
拉低時鐘線至少100us來禁止通信
2) Apply "Request-to-send" by pulling Data low, then release Clock.
拉低數據線,請求 "Request-to-send", 然后釋放時鐘 .
The device should check for this state at intervals not to exceed 10 milliseconds.
設備應該在不超過10ms(注意,是毫秒)的間隔內就要檢查一次這個狀態。
When the device detects this state, it will begin generating Clock signals and clock in eight data bits and one stop bit.
當設備檢測到這個狀態,它將開始產生時鐘信號,
The host changes the Data line only when the Clock line is low, and data is read by the device when Clock is high.
只有當時鐘線 為低的時候,主機才可以改變數據線(也就是將數據寫入到數據線)。數據將在時鐘為高電平的時候 被 設備讀取。
After the stop bit is received, the device will acknowledge the received byte by bringing the Data line low and generating one last clock pulse.
在收到停止位之后,設備將通過拉低數據線,生成最后一個時鐘脈沖 來 應答收到的字節
If the host does not release the Data line after the 11th clock pulse, the device will continue to generate clock pulses until the the Data line is released (the device will then generate an error.)
在第11個時鐘脈沖之后,如果主機并沒有釋放數據線,設備將繼續產生時鐘脈沖,直到數據線被釋放(然后 設備將產生一個錯誤)
The host may abort transmission at time before the 11th clock pulse (acknowledge bit) by holding Clock low for at least 100 microseconds.
在第11個脈沖之前(回應位),主機可以隨時中止傳輸,只要拉低時鐘持續100us即可
|
T9 == Time from inactive to active CLK transition, used to time when the auxiliary device samples DATA
FreeScale(Moto)提供的時序圖
主機到鍵盤的數據傳輸
1.主機 通過拉低 時鐘線 來 啟動一個主機到鍵盤的數據傳輸。大約35us后,主機拉低數據線
。這個事件序列 就是 通知 鍵盤,主機要傳輸一個命令了。在數據信號的下降沿大約 125us 后 時鐘信號釋放,就被鍵盤內部的上拉電阻拉為高電平 。
2. 在時鐘信號的上升沿 約 1ms ,數據傳輸開始。這個期間,數據線保持低電平。鍵盤拉低時鐘線,clocking in the low data line. 這個就做傳輸的起始位。
3. 鍵盤用時鐘驅動 8個數據位從主機傳輸到自己這邊。 這個時鐘有50%的占空比(duty cycle).高電平和低電平的時間都在30~50us之間。主機在每個周期的低電平的時候改變數據線上的數據。在每個時鐘的上升沿5~25us之后鍵盤 開始從數據線上取樣,取出主機發來的數據。
4.數據位之后是一個奇偶校驗位(采用奇校驗)
5.最后是停止位
6.如果鍵盤讀到一個高電平的停止位,鍵盤就在 取樣停止位的那個時鐘的下降沿 之后的低電平期間 拉低數據線。這個行為叫做 鍵盤給主機的應答信號。
鍵盤拉高時鐘之后,也拉高數據線。
7.在收到一個字節后,鍵盤對接收的數據執行一個奇偶校驗。如果奇偶校驗錯誤,或者接收的數據無法識別為有效的命令,那么鍵盤請求重新發送(發送0xFE給主機)
1. 鍵盤發送數據前,首先必須讓時鐘 和數據線都在鍵盤內部的上拉電阻作用下 拉成高電平。然后鍵盤拉低數據線,5-25us之后,鍵盤拉低時鐘線。在時鐘的下降沿,開始傳輸起始位The falling edge of the clock line clocks in the transfer’s start
bit.
2. 鍵盤用時鐘驅動 8個數據位到主機。 這個時鐘有50%的占空比(duty cycle).高電平和低電平的時間都在30~50us之間。鍵盤在每個周期的高電平的時候改變數據線上的數據。這個改變出現在時鐘的上升沿的5us后 和 下降沿的5us前。鍵盤的數據在時鐘的下降沿被鎖存進主機。
3.數據位之后是一個奇校驗位
4.最后是停止位。在時鐘的下降沿 0~50us之間 主機拉低時鐘 來鎖存停止位。這就告訴鍵盤主機現在忙,不能在接收 其他的鍵盤傳輸數據。在處理完接收的數據,準備好接收下一個數據之前,主機釋放時鐘。
6.在鍵盤傳輸數據到主機的過程中,主機任何時候都可以中斷這個傳輸,發送一個命令到鍵盤。主機拉低時鐘和數據線 即可中止傳輸。所以,鍵盤在時鐘為 低電平的時候必須取樣數據線。(無論什么時候輸出高數據位的時候)。在產生時鐘的上升沿時,必須讀取時鐘。
在任何時候發現這兩個條件不滿足,就拉高時鐘和數據線,放棄這次傳輸,并準備從 主機接收命令。
Moto 香港公司的 Derek Lau
當時鐘 高電平是,發送給主機的數據被主機讀取。在空閑狀態,時鐘和數據線都被拉為高電平。主機 拉低 時鐘最少100ms(?還是us)開始發送數據給鍵盤:
1.主機等待,直到沒有外部設備傳輸被處理
2.主機 拉低時鐘
3.主機拉低數據作為開始位
4 .主機釋放時鐘
5.設備拉低時鐘
6.主機發送數據
7.設備釋放時鐘,讀取數據
8.設備檢查時鐘線,如果時鐘為低,中止傳輸
9.重復 5-7步,發送 數據1-到數據0,以及 奇校驗位
10. 設備拉低時鐘
11. 主機釋放數據
12.設備時鐘時鐘
13.設備讀取數據線,想得到停止位,如果數據線為低(不是停止位),產生錯誤
14.設備拉低 時鐘和數據線
15.設備釋放 時鐘和數據線
從設備發送到主機的數據,在時鐘的下降沿被讀取。在發送數據前,設備檢查通過檢測時鐘信號為高來得知 主機是否貯備好:
1.鍵盤(設備)等待時鐘為高(約50ms?us)
2.如果數據為 低,終止
3.鍵盤 發送數據
4.鍵盤拉低時鐘為低
5.鍵盤釋放時鐘為高
6.鍵盤 讀取時鐘線,如果時鐘為低,中止傳輸
7.重復 4-6步,傳輸數據0-數據7,奇校驗位和停止位
8.鍵盤釋放時鐘為高
評論
查看更多