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