PS/2接口協議解析及應用
PS/2接口協議解析及應用/摘要:文中詳細介紹了PS/2接口協議的內容、電氣特性和標準鍵盤的第二套鍵盤掃描碼集。給出了基于嵌入式系統的PS/2接口的軟、硬件實現方法,并介紹了工控PC外接雙鍵盤的解決方案。
1 PS/2連連接口標準的發展過程
--計算機數值數值工業的發展,作為計算機數值數值常用寫入設備的鍵盤也日新月異。1981年IBM推出了IBMPC/XT鍵盤及其連連接口標準。該標準定義了83鍵,應用5腳DIN連接器和簡便的串行協議。實際上,第一套鍵盤掃描碼集并沒有主機到鍵盤的命令。為此,1984年IBM推出了IBMAT鍵盤連連接口標準。該標準定義了84~101鍵,應用5腳DIN連接器和雙向串行通訊協議,此協議依照第二套鍵盤掃描碼集設定有8個主機到鍵盤的命令。到了1987年,IBM又推出了PS/2鍵盤連連接口標準。該標準仍舊定義了84~101鍵,但是應用6腳mini-DIN連接器,該連接器在封裝上更小巧,仍然用雙向串行通訊協議并而而且提供有可選用的第三套鍵盤掃描碼集,同時支持17個主機到鍵盤的命令。現在,市面上的鍵盤全部和PS/2及AT鍵盤兼容,只是功能不一樣而已。
2 PS/2連連接口硬件
2.1 物理連接器
一般,設定有五腳連接器的鍵盤稱之為AT鍵盤,而設定有六腳mini-DIN連接器的鍵盤則稱之為PS/2鍵盤。其實這兩種連接器全部只有四個腳有意義。它們分別是Clock(時鐘腳)、Data?數值腳 、+5V(電源腳)和Ground(電源地)。在PS/2鍵盤與PC機的物理連接上只要保證這四根線一一對應就可以了。PS/2鍵盤靠PC的PS/2端口提供+5V電源,另外兩個腳Clock(時鐘腳)和Data?數值腳 全部是集電極開路的,所以必須接大阻值的上拉電阻。它們平時保持高電平,有輸出時才被拉到低電平,之后自動上浮到高電平。現在對比常用的連接器如圖1所示。
2.2 電氣特性
PS/2通訊協議是一種雙向同步串行通訊協議。通訊的兩端經過Clock(時鐘腳)同步,并經過Data(數值腳)交換數值。任何一方如果想抑制另外一方通訊時,只需要把Clock(時鐘腳)拉到低電平。如果是PC機和PS/2鍵盤間的通訊,則PC機必須做主機,也就是說,PC機可以抑制PS/2鍵盤發送數值,而PS/2鍵盤則不會抑制PC機發送數值。一般兩設備間傳輸數值的大時鐘頻率是33kHz,大多數PS/2設備作業在10~20kHz。推薦值在15kHz左右,也就是說,Clock(時鐘腳)高、低電平的持續時間全部為40μs。每一數值幀含有11~12個位,具體含義如表1所列。
表1 數值幀格式說明
1個起始位 總是邏輯0
8個數值位 (LSB)低位在前
1個奇偶校驗位 奇校驗
1個停止位 總是邏輯1
1個應答位 僅用在主機對設備的通訊中
表中,如果數值位中1的個數為偶數,校驗位就為1;如果數值位中1的個數為奇數,校驗位就為0;--數值位中1的個數加上校驗位中1的個數總為奇數,因此總實行奇校驗。
2.3 PS/2設備和PC機的通訊
PS/2設備的Clock(時鐘腳)和Data?數值腳 全部是集電極開路的,平時全部是高電平。當PS/2設備等待發送數值時,它首先查驗Clock(時鐘腳)以確認其是否為高電平。如果是低電平,則認為是PC機抑制了通訊,此時它必須緩沖需要發送的數值直到重新獲取總線的控制權(一般PS/2鍵盤有16個字節的緩沖區,而PS/2鼠標只有一個緩沖區僅存儲后一個要發送的數值)。如果Clock(時鐘腳)為高電平,PS/2設備便開始將數值發送到PC機。一般全部是由PS/2設備產生時鐘信號。發送時一般全部是按照數值幀格式順序發送。其中數值位在Clock(時鐘腳)為高電平時準備好,在Clock(時鐘腳)的下降沿被PC機讀入。PS/2設備到PC機的通訊時序如圖2所示。
當時鐘頻率為15kHz時,從Clock(時鐘腳)的上升沿到數值位轉變時間至少要5μs。數值改變到Clock(時鐘腳)下降沿的時間至少也有5 μs,但不能大于25 μs,這是由PS/2通訊協議的時序規定的。如果時鐘頻率是其它值,功能數值的內容應稍作調動。
上述討論中傳輸的數值是指對特定鍵盤的編碼或者對特定命令的編碼。一般應用第二套掃描碼集所規定的碼值來編碼。其中鍵盤碼分為通碼(Make)和斷碼(Break)。通碼是按鍵接通時所發送的編碼,用兩位十六進制數來表示,斷碼通常是按鍵斷開時所發送的編碼,用四位十六進制數來表示。
3 PS/2連連接口的嵌入式系統編程方法
PS/2設備主要用來產生同步時鐘信號和讀寫數值。
3.1 PS/2向PC機發送一個字節
從PS/2向PC機發送一個字節可按照下面的步驟實行:
(1)檢驗測量試驗時鐘線電平,如果時鐘線為低,則延時50μs;
(2)檢驗測量試驗判別時鐘信號是否為高,為高,則向下執行,為低,則轉到(1);
(3)檢驗測量試驗數值線是否為高,如果為高則繼續執行,如果為低,則放棄發送(此時PC機在向PS/2設備發送數值,所以PS/2設備要轉移到接收程序處接收數值);
(4)延時20μs(如果此時正在發送起始位,則應延時40μs);
(5)輸出起始位(0)到數值線上。這里要注意的是:在送出每一位后全部要檢驗測量試驗時鐘線,以保證PC機沒有抑制PS/2設備,如果有則中止發送;
(6)輸出8個數值位到數值線上;
(7)輸出校驗位;
(8)輸出停止位(1);
(9)延時30μs(如果在發送停止位時釋放時鐘信號則應延時50μs);
經過以下步驟可發送單個位:
(1)準備數值位(將需要發送的數值位放到數值線上);
(2)延時20μs;
(3)把時鐘線拉低;
(4)延時40μs;
(5)釋放時鐘線;
(6)延時20μs。
3.2 PS/2設備從PC機接收一個字節
由于PS/2設備能提供串行同步時鐘,--如果PC機發送數值,則PC機要先把時鐘線和數值線置為請求發送的狀態。PC機經過下拉時鐘線大于100μs來抑制通訊,并而而且經過下拉數值線發出請求發送數值的信號,然后釋放時鐘。當PS/2設備檢驗測量試驗到需要接收的數值時,它會產生時鐘信號并記錄下面8個數值位和一個停止位。主機此時在時鐘線變為低時準備數值到數值線,可以在時鐘上升沿鎖存數值。而PS/2設備則要協作PC機才能讀到準確的數值。具體連接步驟如下:
(1)等待時鐘線為高電平。
(2)判別數值線是否為低,為高則錯誤退出,否則繼續執行。
(3)讀地址線上的數值內容,共8個bit,每讀完一個位,全部應檢驗測量試驗時鐘線是否被PC機拉低,如果被拉低則要中止接收。
(4)讀地址線上的校驗位內容,1個bit。
(5)讀停止位。
(6)如果數值線上為0(即還是低電平),PS/2設備繼續產生時鐘,直到接收到1而而且產生出錯信號為止(因為停止位是1,如果PS/2設備沒有讀到停止位,則表明此次傳輸出錯)。
(7 輸出應答位。
(8) 檢驗測量試驗奇偶校驗位,如果校驗失敗,則產生錯誤信號以表明此次傳輸出現錯誤。
(9)延時45 μs,以便PC機實行下一次傳輸。
讀數值線的步驟如下:
(1)延時20μs;
(2)把時鐘線拉低?
(3)延時40μs?
(4)釋放時鐘線?
(5)延時20μs?
(6)讀數值線。
下面的步驟可用來發出應答位;
(1)延時15μs;
(2)把數值線拉低;
(3)延時5μs;
(4)把時鐘線拉低;
(5)延時40μs;
(6)釋放時鐘線;
(7)延時5μs;
(8)釋放數值線。
--計算機數值數值工業的發展,作為計算機數值數值常用寫入設備的鍵盤也日新月異。1981年IBM推出了IBMPC/XT鍵盤及其連連接口標準。該標準定義了83鍵,應用5腳DIN連接器和簡便的串行協議。實際上,第一套鍵盤掃描碼集并沒有主機到鍵盤的命令。為此,1984年IBM推出了IBMAT鍵盤連連接口標準。該標準定義了84~101鍵,應用5腳DIN連接器和雙向串行通訊協議,此協議依照第二套鍵盤掃描碼集設定有8個主機到鍵盤的命令。到了1987年,IBM又推出了PS/2鍵盤連連接口標準。該標準仍舊定義了84~101鍵,但是應用6腳mini-DIN連接器,該連接器在封裝上更小巧,仍然用雙向串行通訊協議并而而且提供有可選用的第三套鍵盤掃描碼集,同時支持17個主機到鍵盤的命令。現在,市面上的鍵盤全部和PS/2及AT鍵盤兼容,只是功能不一樣而已。
2 PS/2連連接口硬件
2.1 物理連接器
一般,設定有五腳連接器的鍵盤稱之為AT鍵盤,而設定有六腳mini-DIN連接器的鍵盤則稱之為PS/2鍵盤。其實這兩種連接器全部只有四個腳有意義。它們分別是Clock(時鐘腳)、Data?數值腳 、+5V(電源腳)和Ground(電源地)。在PS/2鍵盤與PC機的物理連接上只要保證這四根線一一對應就可以了。PS/2鍵盤靠PC的PS/2端口提供+5V電源,另外兩個腳Clock(時鐘腳)和Data?數值腳 全部是集電極開路的,所以必須接大阻值的上拉電阻。它們平時保持高電平,有輸出時才被拉到低電平,之后自動上浮到高電平。現在對比常用的連接器如圖1所示。
2.2 電氣特性
PS/2通訊協議是一種雙向同步串行通訊協議。通訊的兩端經過Clock(時鐘腳)同步,并經過Data(數值腳)交換數值。任何一方如果想抑制另外一方通訊時,只需要把Clock(時鐘腳)拉到低電平。如果是PC機和PS/2鍵盤間的通訊,則PC機必須做主機,也就是說,PC機可以抑制PS/2鍵盤發送數值,而PS/2鍵盤則不會抑制PC機發送數值。一般兩設備間傳輸數值的大時鐘頻率是33kHz,大多數PS/2設備作業在10~20kHz。推薦值在15kHz左右,也就是說,Clock(時鐘腳)高、低電平的持續時間全部為40μs。每一數值幀含有11~12個位,具體含義如表1所列。
表1 數值幀格式說明
1個起始位 總是邏輯0
8個數值位 (LSB)低位在前
1個奇偶校驗位 奇校驗
1個停止位 總是邏輯1
1個應答位 僅用在主機對設備的通訊中
表中,如果數值位中1的個數為偶數,校驗位就為1;如果數值位中1的個數為奇數,校驗位就為0;--數值位中1的個數加上校驗位中1的個數總為奇數,因此總實行奇校驗。
2.3 PS/2設備和PC機的通訊
PS/2設備的Clock(時鐘腳)和Data?數值腳 全部是集電極開路的,平時全部是高電平。當PS/2設備等待發送數值時,它首先查驗Clock(時鐘腳)以確認其是否為高電平。如果是低電平,則認為是PC機抑制了通訊,此時它必須緩沖需要發送的數值直到重新獲取總線的控制權(一般PS/2鍵盤有16個字節的緩沖區,而PS/2鼠標只有一個緩沖區僅存儲后一個要發送的數值)。如果Clock(時鐘腳)為高電平,PS/2設備便開始將數值發送到PC機。一般全部是由PS/2設備產生時鐘信號。發送時一般全部是按照數值幀格式順序發送。其中數值位在Clock(時鐘腳)為高電平時準備好,在Clock(時鐘腳)的下降沿被PC機讀入。PS/2設備到PC機的通訊時序如圖2所示。
當時鐘頻率為15kHz時,從Clock(時鐘腳)的上升沿到數值位轉變時間至少要5μs。數值改變到Clock(時鐘腳)下降沿的時間至少也有5 μs,但不能大于25 μs,這是由PS/2通訊協議的時序規定的。如果時鐘頻率是其它值,功能數值的內容應稍作調動。
上述討論中傳輸的數值是指對特定鍵盤的編碼或者對特定命令的編碼。一般應用第二套掃描碼集所規定的碼值來編碼。其中鍵盤碼分為通碼(Make)和斷碼(Break)。通碼是按鍵接通時所發送的編碼,用兩位十六進制數來表示,斷碼通常是按鍵斷開時所發送的編碼,用四位十六進制數來表示。
3 PS/2連連接口的嵌入式系統編程方法
PS/2設備主要用來產生同步時鐘信號和讀寫數值。
3.1 PS/2向PC機發送一個字節
從PS/2向PC機發送一個字節可按照下面的步驟實行:
(1)檢驗測量試驗時鐘線電平,如果時鐘線為低,則延時50μs;
(2)檢驗測量試驗判別時鐘信號是否為高,為高,則向下執行,為低,則轉到(1);
(3)檢驗測量試驗數值線是否為高,如果為高則繼續執行,如果為低,則放棄發送(此時PC機在向PS/2設備發送數值,所以PS/2設備要轉移到接收程序處接收數值);
(4)延時20μs(如果此時正在發送起始位,則應延時40μs);
(5)輸出起始位(0)到數值線上。這里要注意的是:在送出每一位后全部要檢驗測量試驗時鐘線,以保證PC機沒有抑制PS/2設備,如果有則中止發送;
(6)輸出8個數值位到數值線上;
(7)輸出校驗位;
(8)輸出停止位(1);
(9)延時30μs(如果在發送停止位時釋放時鐘信號則應延時50μs);
經過以下步驟可發送單個位:
(1)準備數值位(將需要發送的數值位放到數值線上);
(2)延時20μs;
(3)把時鐘線拉低;
(4)延時40μs;
(5)釋放時鐘線;
(6)延時20μs。
3.2 PS/2設備從PC機接收一個字節
由于PS/2設備能提供串行同步時鐘,--如果PC機發送數值,則PC機要先把時鐘線和數值線置為請求發送的狀態。PC機經過下拉時鐘線大于100μs來抑制通訊,并而而且經過下拉數值線發出請求發送數值的信號,然后釋放時鐘。當PS/2設備檢驗測量試驗到需要接收的數值時,它會產生時鐘信號并記錄下面8個數值位和一個停止位。主機此時在時鐘線變為低時準備數值到數值線,可以在時鐘上升沿鎖存數值。而PS/2設備則要協作PC機才能讀到準確的數值。具體連接步驟如下:
(1)等待時鐘線為高電平。
(2)判別數值線是否為低,為高則錯誤退出,否則繼續執行。
(3)讀地址線上的數值內容,共8個bit,每讀完一個位,全部應檢驗測量試驗時鐘線是否被PC機拉低,如果被拉低則要中止接收。
(4)讀地址線上的校驗位內容,1個bit。
(5)讀停止位。
(6)如果數值線上為0(即還是低電平),PS/2設備繼續產生時鐘,直到接收到1而而且產生出錯信號為止(因為停止位是1,如果PS/2設備沒有讀到停止位,則表明此次傳輸出錯)。
(7 輸出應答位。
(8) 檢驗測量試驗奇偶校驗位,如果校驗失敗,則產生錯誤信號以表明此次傳輸出現錯誤。
(9)延時45 μs,以便PC機實行下一次傳輸。
讀數值線的步驟如下:
(1)延時20μs;
(2)把時鐘線拉低?
(3)延時40μs?
(4)釋放時鐘線?
(5)延時20μs?
(6)讀數值線。
下面的步驟可用來發出應答位;
(1)延時15μs;
(2)把數值線拉低;
(3)延時5μs;
(4)把時鐘線拉低;
(5)延時40μs;
(6)釋放時鐘線;
(7)延時5μs;
(8)釋放數值線。