- 相關推薦
PS/2接口協(xié)議解析及應用
摘要:文中詳細介紹了PS/2接口協(xié)議的內(nèi)容、電氣特性和標準鍵盤的第二套鍵盤掃描碼集。給出了基于嵌入式系統(tǒng)的PS/2接口的軟、硬件實現(xiàn)方法,并介紹了工控PC外接雙鍵盤的解決方案。通過使用模擬開關CD4052巧妙地解決了工控PC外接雙鍵盤的沖突問題。關鍵詞:PS/2接口;串行通訊;單片機;鍵盤;CD4052
1PS/2接口標準的發(fā)展過程
隨著計算機工業(yè)的發(fā)展,作為計算機最常用輸入設備的鍵盤也日新月異。1981年IBM推出了IBMPC/XT鍵盤及其接口標準。該標準定義了83鍵,采用5腳DIN連接器和簡單的串行協(xié)議。實際上,第一套鍵盤掃描碼集并沒有主機到鍵盤的命令。為此,1984年IBM推出了IBMAT鍵盤接口標準。該標準定義了84~101鍵,采用5腳DIN連接器和雙向串行通訊協(xié)議,此協(xié)議依照第二套鍵盤掃描碼集設有8個主機到鍵盤的命令。到了1987年,IBM又推出了PS/2鍵盤接口標準。該標準仍舊定義了84~101鍵,但是采用6腳mini-DIN連接器,該連接器在封裝上更小巧,仍然用雙向串行通訊協(xié)議并且提供有可選擇的第三套鍵盤掃描碼集,同時支持17個主機到鍵盤的命令。現(xiàn)在,市面上的鍵盤都和PS/2及AT鍵盤兼容,只是功能不同而已。
。玻校樱步涌谟布
。玻蔽锢磉B接器
一般,具有五腳連接器的鍵盤稱之為AT鍵盤,而具有六腳mini-DIN連接器的鍵盤則稱之為PS/2鍵盤。其實這兩種連接器都只有四個腳有意義。它們分別是Clock(時鐘腳)、Data?數(shù)據(jù)腳?、+5V(電源腳)和Ground(電源地)。在PS/2鍵盤與PC機的物理連接上只要保證這四根線一一對應就可以了。PS/2鍵盤靠PC的PS/2端口提供+5V電源,另外兩個腳Clock(時鐘腳)和Data?數(shù)據(jù)腳?都是集電極開路的,所以必須接大阻值的上拉電阻。它們平時保持高電平,有輸出時才被拉到低電平,之后自動上浮到高電平,F(xiàn)在比較常用的連接器如圖1所示。
。玻搽姎馓匦
。校樱餐ㄓ崊f(xié)議是一種雙向同步串行通訊協(xié)議。通訊的兩端通過Clock(時鐘腳)同步,并通過Data(數(shù)據(jù)腳)交換數(shù)據(jù)。任何一方如果想抑制另外一方通訊時,只需要把Clock(時鐘腳)拉到低電平。如果是PC機和PS/2鍵盤間的通訊,則PC機必須做主機,也就是說,PC機可以抑制PS/2鍵盤發(fā)送數(shù)據(jù),而PS/2鍵盤則不會抑制PC機發(fā)送數(shù)據(jù)。一般兩設備間傳輸數(shù)據(jù)的最大時鐘頻率是33kHz,大多數(shù)PS/2設備工作在10~20kHz。推薦值在15kHz左右,也就是說,Clock(時鐘腳)高、低電平的持續(xù)時間都為40μs。每一數(shù)據(jù)幀包含11~12個位,具體含義如表1所列。
表1數(shù)據(jù)幀格式說明
1個起始位總是邏輯08個數(shù)據(jù)位(LSB)低位在前1個奇偶校驗位奇校驗1個停止位總是邏輯11個應答位僅用在主機對設備的通訊中
表中,如果數(shù)據(jù)位中1的個數(shù)為偶數(shù),校驗位就為1;如果數(shù)據(jù)位中1的個數(shù)為奇數(shù),校驗位就為0;總之,數(shù)據(jù)位中1的個數(shù)加上校驗位中1的個數(shù)總為奇數(shù),因此總進行奇校驗。
。玻常校樱苍O備和PC機的通訊
PS/2設備的Clock(時鐘腳)和Data?數(shù)據(jù)腳?都是集電極開路的,平時都是高電平。當PS/2設備等待發(fā)送數(shù)據(jù)時,它首先檢查Clock(時鐘腳)以確認其是否為高電平。如果是低電平,則認為是PC機抑制了通訊,此時它必須緩沖需要發(fā)送的數(shù)據(jù)直到重新獲得總線的控制權(一般PS/2鍵盤有16個字節(jié)的緩沖區(qū),而PS/2鼠標只有一個緩沖區(qū)僅存儲最后一個要發(fā)送的數(shù)據(jù))。如果Clock(時鐘腳)為高電平,PS/2設備便開始將數(shù)據(jù)發(fā)送到PC機。一般都是由PS/2設備產(chǎn)生時鐘信號。發(fā)送時一般都是按照數(shù)據(jù)幀格式順序發(fā)送。其中數(shù)據(jù)位在Clock(時鐘腳)為高電平時準備好,在Clock(時鐘腳)的下降沿被PC機讀入。PS/2設備到PC機的通訊時序如圖2所示。
當時鐘頻率為15kHz時,從Clock(時鐘腳)的上升沿到數(shù)據(jù)位轉變時間至少要5μs。數(shù)據(jù)變化到Clock(時鐘腳)下降沿的時間至少也有5μs,但不能大于25μs,這是由PS/2通訊協(xié)議的時序規(guī)定的。如果時鐘頻率是其它值,參數(shù)的內(nèi)容應稍作調整。
上述討論中傳輸?shù)臄?shù)據(jù)是指對特定鍵盤的編碼或者對特定命令的編碼。一般采用第二套掃描碼集所規(guī)定的碼值來編碼。其中鍵盤碼分為通碼(Make)和斷碼(Break)。通碼是按鍵接通時所發(fā)送的編碼,用兩位十六進制數(shù)來表示,斷碼通常是按鍵斷開時所發(fā)送的編碼,用四位十六進制數(shù)來表示。
。常校樱步涌诘那度胧杰浖幊谭椒
。校樱苍O備主要用于產(chǎn)生同步時鐘信號和讀寫數(shù)據(jù)。
。常保校樱蚕颍校脵C發(fā)送一個字節(jié)
從PS/2向PC機發(fā)送一個字節(jié)可按照下面的步驟進行:
(1)檢測時鐘線電平,如果時鐘線為低,則延時50μs;
(2)檢測判斷時鐘信號是否為高,為高,則向下執(zhí)行,為低,則轉到(1);
(3)檢測數(shù)據(jù)線是否為高,如果為高則繼續(xù)執(zhí)行,如果為低,則放棄發(fā)送(此時PC機在向PS/2設備發(fā)送數(shù)據(jù),所以PS/2設備要轉移到接收程序處接收數(shù)據(jù));
(4)延時20μs(如果此時正在發(fā)送起始位,則應延時40μs);
。ǎ担┹敵銎鹗嘉唬ǎ埃┑綌(shù)據(jù)線上。這里要注意的是:在送出每一位后都要檢測時鐘線,以確保PC機沒有抑制PS/2設備,如果有則中止發(fā)送;
。ǎ叮┹敵觯競數(shù)據(jù)位到數(shù)據(jù)線上;
。ǎ罚┹敵鲂r炍;
。ǎ福┹敵鐾V刮唬ǎ保;
。ǎ梗┭訒r30μs(如果在發(fā)送停止位時釋放時鐘信號則應延時50μs);
通過以下步驟可發(fā)送單個位:
(1)準備數(shù)據(jù)位(將需要發(fā)送的數(shù)據(jù)位放到數(shù)據(jù)線上);
。ǎ玻┭訒r20μs;
。ǎ常┌褧r鐘線拉低;
。ǎ矗┭訒r40μs;
(5)釋放時鐘線;
。ǎ叮┭訒r20μs。
。常玻校樱苍O備從PC機接收一個字節(jié)
由于PS/2設備能提供串行同步時鐘,因此,如果PC機發(fā)送數(shù)據(jù),則PC機要先把時鐘線和數(shù)據(jù)線置為請求發(fā)送的狀態(tài)。PC機通過下拉時鐘線大于100μs來抑制通訊,并且通過下拉數(shù)據(jù)線發(fā)出請求發(fā)送數(shù)據(jù)的信號,然后釋放時鐘。當PS/2設備檢測到需要接收的數(shù)據(jù)時,它會產(chǎn)生時鐘信號并記錄下面8個數(shù)據(jù)位和一個停止位。主機此時在時鐘線變?yōu)榈蜁r準備數(shù)據(jù)到數(shù)據(jù)線,并在時鐘上升沿鎖存數(shù)據(jù)。而PS/2設備則要配合PC機才能讀到準確的數(shù)據(jù)。具體連接步驟如下:
。ǎ保┑却龝r鐘線為高電平。
(2)判斷數(shù)據(jù)線是否為低,為高則錯誤退出,否則繼續(xù)執(zhí)行。
。ǎ常┳x地址線上的數(shù)據(jù)內(nèi)容,共8個bit,每讀完一個位,都應檢測時鐘線是否被PC機拉低,如果被拉低則要中止接收。
。ǎ矗┳x地址線上的校驗位內(nèi)容,1個bit。
(5)讀停止位。
。ǎ叮┤绻麛(shù)據(jù)線上為0(即還是低電平),PS/2設備繼續(xù)產(chǎn)生時鐘,直到接收到1且產(chǎn)生出錯信號為止(因為停止位是1,如果PS/2設備沒有讀到停止位,則表明此次傳輸出錯)。
(7輸出應答位。
。ǎ福z測奇偶校驗位,如果校驗失敗,則產(chǎn)生錯誤信號以表明此次傳輸出現(xiàn)錯誤。
。ǎ梗┭訒r45μs,以便PC機進行下一次傳輸。
讀數(shù)據(jù)線的步驟如下:
。ǎ保┭訒r20μs;
(2)把時鐘線拉低?
。ǎ常┭訒r40μs?
。ǎ矗┽尫艜r鐘線?
。ǎ担┭訒r20μs?
。ǎ叮┳x數(shù)據(jù)線。
下面的步驟可用于發(fā)出應答位;
。ǎ保┭訒r15μs;
。ǎ玻┌褦(shù)據(jù)線拉低;
。ǎ常┭訒r5μs;
。ǎ矗┌褧r鐘線拉低;
。ǎ担┭訒r40μs;
。ǎ叮┽尫艜r鐘線;
(7)延時5μs;
(8)釋放數(shù)據(jù)線。
。从糜诠た貦C的雙鍵盤設計
工控機通常要接標準鍵盤,但是為了方便操作,常常需要外接一個專用鍵盤。此實例介紹了在工控PC機到PS/2總線上再接入一個自制專用鍵盤的應用方法。
該設計應能保證兩個鍵盤單獨工作,而且相互不能影響。因此,不能直接把專用鍵盤和標準鍵盤一起接到工控PC的PS/2口。鑒于這種情況,本設計使用模擬開關CD4052并通過時分復用工控PC的PS/2口,來使在同一個時刻只有一個鍵盤有效,從而解決上述問題。其硬件原理圖如圖3所示。其中P2口和P1口用于鍵盤掃描電路(圖中未畫出),P0.0為數(shù)據(jù)端,P0.1為時鐘端,P0.2為模擬開關選通端。由于專用鍵盤不需要接收工控PC機的命令,所以軟件中并不需要寫這部分相應的代碼。
通過軟件可在專用鍵盤復位后把P0.2清0,以使模擬開關CD4052打開相應的通道。這時工控PC的標準鍵盤將開始工作。標準鍵盤可以完成工控PC剛啟動時對外設檢測的應答。復位后的專用鍵盤不停地掃描有沒有按鍵,如果有鍵按下則識別按鍵,并且按照預先的設計進行編碼,同時調用發(fā)送程序并通過PS/2口發(fā)送到工控PC。此時模擬開關關閉相應通道(將P0.2置1),專用鍵盤接入工控PCPS/2口的時鐘線和數(shù)據(jù)線而工作,但標準鍵盤被模擬開關從PS/2的時鐘線和數(shù)據(jù)線中斷而不工作,這樣,雙鍵盤便可時分復用同一個工控PC機的PS/2口。相應的發(fā)送子程序如下:
。#洌澹妫椋睿澹模粒裕粒校埃坝茫校埃白鰯(shù)據(jù)線
。#洌澹妫椋睿澹茫蹋耍校埃庇茫校埃弊鰰r鐘線
#defineINHIBITP02用P0.2做CD4052的INH端
。#洌澹妫椋睿澹校希遥裕遥校庇茫校笨谧鲎x入口
。#洌澹妫椋睿澹校希遥裕祝校灿茫校部谧鰧懗隹诳梢詫崿F(xiàn)64個自定義鍵
。觯铮椋洌螅澹睿洌ǎ酰悖瑁幔颍妫酰睿悖簦椋铮睿妫铮颍螅澹睿洌幔悖瑁幔颍洌-ta***/
{
。酰悖瑁幔颍,temp,char_temp;
bitflag_check=1;
。桑危龋桑拢桑裕剑;//disablestandardkeyboard
delay_ms(3);
。簦澹恚穑剑;
。妫铮(i=0;i<8;i++)//findthenumberof1inthisucharxisoddornot
{
char_temp=temp&0x01;
。椋(char_temp==0x01)
{
。妫欤幔鏮check=!flag_check;
}
temp=temp>>1;
}
。茫蹋耍剑;//send1toP1thenreadP1
。鳎瑁椋欤(!CLK)//ifCLKislowwait
{
;
}
。茫蹋耍剑;DATA=1;//send1toP1thenreadP1
。椋(CLK==1)
{
delay_us(30);//
}
。椋(CLK==1&&DATA==1)//senddata
{
。模粒裕粒剑;//startbit0
delay_us(10);
。茫蹋耍剑;
。洌澹欤幔鵢us(5);//
。簦澹恚穑剑;
。妫铮(i=0;i<8;i++)//send8bitsLSBfirst
{
。茫蹋耍剑;
。洌澹欤幔鵢us(5);
char_temp=temp&0x01;
。椋(char_temp==0x01)
{
。模粒裕粒剑;
}
。澹欤螅
{
DATA=0;
}
。模粒裕粒(bit)(temp&0x01);
。蹋樱
。洌澹欤幔鵢us(10);
CLK=0;
。洌澹欤幔鵢us(5);
temp=temp>>1;
}
。茫蹋耍剑;//sendcheckbit
。洌澹欤幔鵢us(5);?
DATA=flag_check;
delay_us(10);?
。茫蹋耍剑;
delay_us(5)
。茫蹋耍剑;//sendstopbit
。洌澹欤幔鵢us(5);?
。模粒裕粒剑;
。洌澹欤幔酰?10??
。茫蹋耍剑?
。洌澹欤幔鵢us(5);?
。茫蹋耍剑;
。洌澹欤幔鵢us(30);??
。茫蹋耍剑;DATA=1;//send1toP1thenreadP1
。椋(CLK==1&&DATA==0)
{
return;//pcissendingdatatomcu,goto
。颍澹悖澹椋觯椋睿纾妫酰睿悖簦椋铮
}
INHIBIT=0;//enablestandardkeyboard
}
。到Y論
PS/2接口協(xié)議是現(xiàn)在大多數(shù)鍵盤、鼠標與PC機通訊的標準協(xié)議。其中鼠標對PC機的通訊更為簡單,只是傳輸數(shù)據(jù)的內(nèi)容不一樣而已。充分理解PS/2接口協(xié)議,可以幫助設計者自主開發(fā)一些工控機上的專用鍵盤等外設,并能夠按照用戶的要求開發(fā)出專用的多功能鍵盤。該工控機的雙鍵盤設計目前已被某工控公司所采納,并已作為組件加入到產(chǎn)品當中。
【PS/2接口協(xié)議解析及應用】相關文章:
解析熱力環(huán)流的應用08-25
PCI總線接口芯片9050及其應用08-06
PCI接口芯片s5935及其應用08-06
USB總線接口芯片CH371及其應用08-06
PCI總線通用接口芯片CH361及其應用08-06
SOCKET 接口編程在期貨交易系統(tǒng)中的應用08-06
串行接口中文圖形點陣液晶顯示模塊的應用08-06