?? 鍵盤編程筆記.txt
字號:
從鍵盤/鼠標發送到主機的數據在時鐘信號的下降沿當時鐘從高變到低的時候被讀取;
從主機發送到鍵盤/鼠標的數據在上升沿當時鐘從低變到高的時候被讀取.
不管通訊的方向怎樣,鍵盤/鼠標總是產生時鐘信號.
如果主機要發送數據,它必須首先告訴設備開始產生時鐘信號(這個過程在下一章節中被描述).
最大的時鐘頻率是33kHz ,而且大多數設備工作在10 ~20kHz
如果你要制作一個PS/2 設備,我推薦你把頻率控制在15kHz 左右,這就意味著時鐘應該是高40 微秒低40 微秒
所有數據安排在字節中每個字節為一幀包含了11 12 個位這些位的含義如下
1 start bit. This is always 0. 1 個起始位 總是為0
8 data bits, least significant bit first. 8 個數據位 低位在前
1 parity bit (odd parity). 1 個校驗位 奇校驗
1 stop bit. This is always 1. 1 個停止位 總是為1
1 acknowledge bit (Host-to-device communication only) 1 個應答位僅在主機對設備的通訊中
如果數據位中包含偶數個1 校驗位就會置1 如果數據位中包含奇數個1 校驗位就會置0 數據位中
1 的個數加上校驗位總為奇數這就是奇校驗這是用來錯誤檢測
當主機發送數據給鍵盤/鼠標時設備回送一個握手信號來應答數據包已經收到這個位不會出現在設
備發送數據到主機的過程中
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
設備到主機的通訊過程:
數據和時鐘線都是集電極開路結構,正常保持高電平.當鍵盤或鼠標等待發送數據時,它首先檢查時
鐘以確認它是否是高電平,如果不是,那么是主機抑制了通訊,設備必須緩沖任何要發送的數據直到重
新獲得總線的控制權(鍵盤有16 字節的緩沖區,而鼠標的緩沖區僅存儲最后一個要發送的數據包).如
果時鐘線是高電平,設備就可以開始傳送數據
設備到主機的通訊
如我在上一節提及的鍵盤和鼠標使用一種每幀包含11 位的串行協議這些位含義是
1 start bit. This is always 0. 1 個起始位 總是為0
8 data bits, least significant bit first. 8 個數據位 低位在前
1 parity bit (odd parity). 1 個校驗位 奇校驗
1 stop bit. This is always 1. 1 個停止位 總是為1
當時鐘為高數據線改變狀態 在時鐘信號的下降沿數據被鎖存
時鐘頻率為10 16.7kHz 從時鐘脈沖的上升沿到一個數據轉變的時間至少要有5 微秒.數據變化到時
鐘脈沖的下降沿的時間至少要有5 微秒并且不大于25 微秒這個定時非常重要你應該嚴格遵循它.
主機可以在第11 個時鐘脈沖停止位之前把線拉低導致設備放棄發送當前字節這是非常罕見的
在停止位發送后設備在發送下個包前至少應該等待50 毫秒這將給主機時間當它處理接收到的字節
時
抑制發送主機在收到每個包時通常自動做這個在主機釋放抑制后設備至少應該在發送任何
數據前等50 毫秒
1) 等待Clock = high
2) 延時 50 微秒
3) Clock s 仍舊為 high?
No—到第1 步
4) Data = high?
No—放棄 (并且從主機讀取字節)
5) 延遲 20 毫秒 (=40 微秒 to the time Clock is pulled low in sending the start bit.)
6) 輸出起始位 (0) \ 在發送所有這些位的每一位后
7) 輸出 8 個數據位 > 測試時鐘確認主機是否把它拉低了
8) 輸出校驗位 / 這說明主機要放棄這次傳送
9) 輸出停止位 (1)
10) 延遲30 毫秒 (=50 微秒 from the time Clock is released in sending the stop bit)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
主機到設備的通訊
被發送的包有點不同于主機到設備通訊過程
首先PS/2 設備總是產生時鐘信號如果主機要發送數據它必須首先把時鐘和數據線設置為請求
發送狀態如下示
通過下拉時鐘線至少100 微秒來抑制通訊
通過下拉數據線來應用請求發送然后釋放時鐘
設備應該在不超過10 毫秒的間隔內就要檢查這個狀態當設備檢測到這個狀態它將開始產生時鐘信
號并且時鐘脈沖標記下輸入八個數據位和一個停止位主機僅當時鐘線為低的時候改變數據線而數
據在時鐘脈沖的上升沿被鎖存這在發生在設備到主機通訊的過程中正好相反
在停止位發送后設備要應答接收到的字節就把數據線拉低并產生最后一個時鐘脈沖如果主機在第
11 個時鐘脈沖后不釋放數據線設備將繼續產生時鐘脈沖直到數據線被釋放然后設備將產生一個錯
誤
主機可以在第11 個時鐘脈沖應答位前中止一次傳送只要下拉時鐘線至少100 微秒
1) 把時鐘線拉低至少100 微秒
2) 把數據線拉低
3) 釋放數據線
4) 等待設備把時鐘線拉低
5) 設置/復位數據線發送第一個數據位
6) 等待設備把時鐘拉高
7) 等待設備把時鐘拉低
8) 重復 5-7 步 發送剩下的7 個數據位和校驗位
9) 釋放數據線
10) 等待設備把數據線拉低
11) 等待設備把時鐘線拉低
12) 等待設備釋放數據線和時鐘線
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -