EC 所需知識 - PS2

EC 所需知識
軟體工程師的第一步,先把相關的規範(Specification)了解清楚,就像開發一套軟體之前要先了解需求,才能做出一套符合需求的體。相同的EC工程師就是需要把 LPC / SMBUS / PS2 / Smart Battery 的相關知識,清楚明瞭再進下一步。


PS2

早期的PC和鍵盤/滑鼠是透過PS2來傳送使用者按下鍵盤或移動滑鼠給鍵盤管理者[Keyboard Controller „KBC“]。KBC工程師需對PS2介面知識相當的瞭解,才能順利的和PS2的裝置溝通。因此,本篇文章將詳盡的介紹PS2相關所需要的知識。

PS2 INTERFACE

PS/2 Interface最早是由IBM製訂的標準。提供Keyboard、Mouse和系統連接溝通的介面。本篇文章將會由外觀、傳輸的訊號、Keyboard、Mouse及Keyboard Controller的動作指令詳細介紹。

  • PS2 SOCKET
 

在PS/2 Device和PS/2 Socket連接時,可能的話,先地線連接再連接電源,若先連接電源的話,有些PS/2 Device會電源初始化失敗,無法和系統連接成功,系統會誤認PS/2 Device沒有和系統連接。

  • PS2 HARDWARE





 

Clock
Data
Bus Status
High
High
閒置狀態
High
Low
禁止傳輸資料
Low
High
Host要求傳輸資料給裝置
           
最高的工作頻率為 33KHz,一般工作頻率在10-20KHz
Pin
Direct
Description
Clock
由PS/2 Device 產生
Data
Host->Device
由Falling Edge讀取資料
Data
Device->Host
由Rising Edge讀取資料

PS/2 Data Format
    • 1 start bit - always logical low
    • 8 data bits   - D0 to D7
    • 1 parity bit   - Odd parity
    • 1 stop bit - always logical high

Device to Host Communication

Host to Device Communication

PS2 MOUSE

由PS/2 Mouse的工作模式、Mouse的控制指令及Window如何設定及起動Mouse的程序來做說明。

  • 工作模式
    • Reset Mode – 當系統傳送指令0xFF給Mouse,Mouse即刻進入初始化工作模式, Mouse開始自我測試 ( Basic Assurance Test “BAT” )及預設值的設定。Mouse的預設值為
      • Sample Rate     - 100 samples / sec
      • Resolution - 4 counts / mm
      • Scaling        - 1:1

在自我測試及設定完預計值之後,Mouse會回傳0xAA及0x00給系統;反之在過程中有任何錯誤的話,Mouse會回傳0xFC讓系統知道Mouse初始化失敗。

  • Stream Mode –當Mouse移動或者左右按鍵被按下時,Mouse就會依照Sample Rate的時間,把移動或按鍵的資料傳送給系統。

  • Remote Mode –系統定時的下指令[0xEB]詢問Mouse的相對位移及按鍵狀態,每次指令後,Mouse會重新計算相對的偏移值。

  • Wrap Mode – 系統傳送無效的指令給Mouse時,Mouse就會回傳給系統告知此指令是無效的。

  • Mouse的資料封包
  • Microsoft Intelimouse
    • << Configuration setting >>
    • Set sample rate 200                                   0xF3 0xC8
    • Set sample rate 100                                 0xF3 0x64
    • Set sample rate 80                                   0xF3 0x50
    • Get Device ID [0xF2] wait for respond     ID=03

      BIT 7

      BIT 6

      BIT 5

      BIT 4

      BIT 3

      BIT 2

      BIT 1

      BIT 0

      Byte 1

      Y overflow

      X overflow

      Y sign bit

      X sign bit

      1

      Middle Btn

      Right Btn

      Left  Btn

      Byte 2

      X Movement

      Byte 3

      Y Movement

      Byte 4

      Z Movement [ 2’s completement ] 


  • Scrolling Wheel + 5 Button Mouse
    • << Configuration setting >>
    • Set sample rate 200                                      0xF3 0xC8
    • Set sample rate 200                                      0xF3 0xC8
    • Set sample rate 80                                        0xF3 0x50
    • Get Device ID [0xF2] wait for respond     ID=04

      BIT 7

      BIT 6

      BIT 5

      BIT 4

      BIT 3

      BIT 2

      BIT 1

      BIT 0

      Byte 1

      Y overflow

      X overflow

      Y sign bit

      X sign bit

      1

      Middle Btn

      Right Btn

      Left  Btn

      Byte 2

      X Movement

      Byte 3

      Y Movement

      Byte 4

      00

      5th Btn

      4th Btn

      Z3

      Z2

      Z1

      Z0


  • Mouse的系統指令
Mouse在收到每一筆系統的指令或資料都會回傳0xFA給系統,告知系統,讓系統傳送下一筆指令或資料。系統傳給Mouse的指令如下:

    • 0xE6 [ Set Scaling ] – 設定比率為1:1
    • 0xE7 [ Set Scaling ] - 設定比率為2:1
    • 0xE8 [ Set Resolution ] – 設定位移解析度,Mouse收到指令後,再取得設定值。

Byte Read from Host

Resolution

Byte Read from Host

Resolution

0x00

1 count/mm

0x01

2 count/mm

0x02

4 count/mm

0x03

8 count/mm

    • 0xE9 [ Status Request ] – 回傳Mouse的設定狀態給系統,Mouse收到指令後,再把3Bytes的狀態值傳給系統。

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

Byte 1

0

Mode

Enable

Scaling

0

Left Btn

Middle Btn

Right Btn

Byte 2

Resolution

Byte 3

Sample Rate

      • Scaling = 1為2:1 ; Scaling = 0為1:1

      • Mode = 1為Remote Mode ; Mode = 0為Stream Mode

    • 0xEA [ Set Stream Mode ] – 設定為Stream Mode。
    • 0xEB [ Data Request ] – 在Remote Mode時,系統用來詢問資料的指令,Mouse收到指令後,再把相對位址的值傳給系統。
    • 0xEC [ Reset Wrap Mode ] – 把位址計數值歸零。
    • 0xEE [ Set Wrap Mode ] -把位址計數值歸零並且進入Wrap Mode。
    • 0xF0 [ Set Remote Mode ] -把位址計數值歸零並且進入Remote Mode。
    • 0xF2 [ Get Device ID ] – 回傳Mouse的ID,Mouse收到指令後再回傳Mouse ID給系統。
    • 0xF3 [ Set Sample Rate ] – 設定取樣頻率。Mouse收到指令後,再取得取樣頻率值。取樣頻率值為10 ,20 ,40 ,60 ,80 ,100 and200 samples/sec
    • 0xF4 [ Enable Data Reporting ] – Mouse支援位移及按鍵狀態的傳遞。
    • 0xF5 [ Disable Data Reporting ] – Mouse停止位移及按鍵狀態的傳遞。
    • 0xF6 [ Set Default Value ] – 將Mouse的相關值設為預設值。Sampling Rate = 100、Resolution = 4 counts/mm、Scaling = 1:1及Disable Data Reporting。
    • 0xFE [ Resend ] – 要求系統重新傳送上一個指令
    • 0xFF [ Reset ] – Mouse初始化的指令


  • Mouse Initialization in Windows 98

由Mouse插入系統後,得到系統電源,Mouse先完成自我測試傳出0xAA 0x00告知系統,Mouse已經加入系統,系統會要求Mouse做自我測試後,偵測Mouse的ID後,才開始初始化設定Mouse,讓Mouse開始傳送資料給系統。


Host
Mouse
說明
Mouse Plug-In System
0xAA 0x00
Mouse電源的初始化完成
0xFF
0xFA 0xAA 0x00
Mouse自我測試完成
0xFF
0xFA 0xAA 0x00
Mouse自我測試完成
0xFF
0xFA 0xAA 0x00
Mouse自我測試完成
Check Mouse ID
0xF3
0xFA
設定Sample Rate
0xC8
0xFA
200 samples/sec
0xF3
0xFA
設定Sample Rate
0x64
0xFA
100 samples/sec
0xF3
0xFA
設定Sample Rate
0x50
0xFA
50 samples/sec
0xF2
0xFA 0x03
Scrolling mouse
Check Mouse ID
0xF3
0xFA
設定Sample Rate
0xC8
0xFA
200 samples/sec
0xF3
0xFA
設定Sample Rate
0xC8
0xFA
200 samples/sec
0xF3
0xFA
設定Sample Rate
0x50
0xFA
50 samples/sec
0xF2
0xFA 0x04
Scrolling Wheel + 5 Button Mouse
Check Mouse ID
0xF3
0xFA
設定Sample Rate
0x0A
0xFA
10 samples/sec
0xF2
0xFA 0x00
3 Button Mouse
初始化設定
0xE8
0xFA
設定Resolution
0x03
0xFA
8 counts/mm
0xE6
0xFA
設定Scaling 1:1
0xF3
0xFA
設定Sample Rate
0x28
0xFA
40 samples/sec
0xF4
0xFA
可以Data Reporting

  • Emulation Mouse Function

如何模擬Mouse移動及按鍵被按下的動作,首先,在Clock被拉Low的時侯表示Host傳送Data給Mouse,轉為接收資料,在系統傳送0xF4指令告知Mouse可以開始傳送Mouse移動及按鍵變化才能傳送資料給系統。Mouse的各種動作如下:

Emulated Action
Data send to host
Move up one
0x08 0x00 0x01
Move down one
0x28 0x00 0xFF
Move right one
0x08 0x01 0x00
Move left one
0x18 0xFF 0x00
Press left button
0x09 0x00 0x00
Release left button
0x08 0x00 0x00
Press middle button
0x0C 0x00 0x00
Release middle button
0x08 0x00 0x00
Press right button
0x0A 0x00 0x00
Release right button
0x08 0x00 0x00

PS2 KEYBOARD

PS2 Keyboard 最早是在1981年由IBM開發出來,運用在PC/XT的機器上使用的鍵盤,當時只有83個按鍵依照Scan Code Set1定義每個按鍵的按鍵值。直到1984年IBM又開發了新的鍵盤提供給PC/AT的機器使用,共有84-101個按鍵可支援多個語言,和舊的PC/XT並不相容,依照Scan Code Set 2去定義每個按鍵的按鍵值。到了1987年IBM又定義了新的鍵盤,更改了連接孔及按鍵值改採Scan Code Set 3,和PC/AT的鍵盤相容,但是新的鍵盤並沒有辦法取代PC/AT鍵盤,造成現行的鍵盤都以PC/AT為主。

以下依據各種Scan Code Set的不同做說明:
  • Scan Code Set 1 –
    • 根據鍵盤的位置來定義各個按鍵的按鍵值
    • 按鍵放開的按鍵值 = 按鍵按下的按鍵值 + 0x80,只使用1個byte
    • 控制按鍵 [i.e Ctrl,Shift,Fn,Insert,…] 使用 2 bytes
    • Windows 多媒體按鍵 scan code = E0 + 按鍵值,2 bytes
  • Scan Code Set 2 –
    • 按鍵放開的按鍵值 = 0xF0 + 按鍵按下的按鍵值,使用2 bytes
  • Scan Code Set 3 –
    • 控制按鍵 [i.e Ctrl,Shift,Fn,Insert,…] 使用 1 byte


  • 自我校正
在電源供電及系統傳送初始化指令[0xFF]時,鍵盤就會開始自我測試並且把鍵盤初始值如下:

    • Typematic delay 500 ms
    • Typemaic rate 10.9 cps
    • Scan code set 2
    • Set all keys typematic / make / break


當系統端使用初始化指令,初始鍵盤時,若初始化成功完成,鍵盤會以0xAA回應系統;如果失敗,鍵盤會以0xFC回應系統。

  • 鍵盤的指令
鍵盤在收到每一筆系統的指令或資料都會回傳0xFA給系統,告知系統,讓系統傳送下一筆指令或資料。系統傳給鍵盤的指令如下:

  • 0xE6 [ Set/Reset LEDs ] – 設定或清除鍵盤上的LED,系統的控制位元值的定義如下:

7

6

5

4

3

2

1

0

0

0

0

0

0

Caps Lock

Num Lock

Scroll Lock

  • 0xEE [ Echo ] - 鍵盤會回復0xEE給系統
  • 0xF0 [ Set Scan Code Set ] – 設定鍵盤的Scan Code Set,系統控制位元值的定義如下:

0x01

Scan Code Set 1

0x02

Scan Code Set 2

0x03

Scan Code Set 3

  • 0xF2 [ Get Device ID ] – 取得鍵盤的識別碼,一般值為 0xAB 0x83
  • 0xF3 [ Set Typematic Rate / Delay ] – 鍵盤敲打的速率及重覆的延遲時間。系統控制位元值的定義如下
    • The argument byte – Repeat Rate [CPS]

Bits 4-0

Rate

Bits 4-0

Rate

Bits 4-0

Rate

Bits 4-0

Rate

00h

2.0

08h

4.0

10h

8.0

18h

16.0

01h

2.1

09h

4.3

11h

8.6

19h

17.1

02h

2.3

0Ah

4.6

12h

9.2

1Ah

18.5

03h

2.5

0Bh

5.0

13h

10.0

1Bh

20.0

04h

2.7

0Ch

5.5

14h

10.9

1Ch

21.8

05h

3.0

0Dh

6.0

15h

12.0

1Dh

24.0

06h

3.3

0Eh

6.7

16h

13.3

1Eh

26.7

07h

3.7

0Fh

7.5

17h

15.0

1Fh

30.0


    • The argument byte – Delay [ Second ]

Bits 5 - 6

Rate

00b

0.25

01b

0.5

10b

0.75

11b

1.00

  • 0xF4 [ Enable ] – 鍵盤開始傳送資料給系統
  • 0xF5 [ Disable ] – 鍵盤禁止傳送資料給系統
  • 0xF6 [ Set Default ] – 設定為初始值,其內容為
    • Typematic rate / delay = 10.9 cps / 500 ms
    • Key type = all key typematic / make / break
    • Scan Code Set 2
  • 0xF7 [ Set All Keys Typematic ] – 設定所有的按鍵沒有Break Code
  • 0xF8 [ Set All Keys Make/Break ] – 設定所有的按鍵沒有repeat的功能
  • 0xF9 [ Set All Keys Make ] – 設定所有的按鍵只有Make Code
  • 0xFA [ Set All Keys Typematic/Make/Break ] – 設定覆正常狀態
  • 0xFB [ Set Key Type Typematic ] - 設定按鍵沒有Break Code
  • 0xFC [ Set Key Type Make/Break ] - 設定按鍵沒有repeat的功能
  • 0xFD [ Set Key Type Make ] - 設定按鍵只有Make Code
  • 0xFE [ Resend ] – 要求系統重新傳送前一次的指令給鍵盤
  • 0xFF [ Reset ] – 鍵盤重新自我測試及初始化

  • 鍵盤初始化的指令
由鍵盤插入系統後,得到系統電源,鍵盤先完成自我測試傳出0xAA告知系統,鍵盤已經加入系統,系統會要求鍵盤做自我測試後,偵測鍵盤的ID後,才開始初始化設定鍵盤,讓鍵盤開始傳送資料給系統。

Host

Keyboard

說明

Keyboard Plug-In System


0xAA

鍵盤電源的初始化完成

0xED

0xFA

設定鍵盤上的LEDs

0x00

0xFA

關閉鍵盤上的LEDs

0xF2

0xFA 0xAB 0x83

讀取鍵盤的識別碼

假設前次關機時,NUMLED功能是打開的

0xED

0xFA

設定鍵盤上的LEDs

0x02

0xFA

開啟鍵盤上的Num Lock LED

0xF3

0xFA

設定Typematic Rate及Delay

0x20

0xFA

500 ms / 30.0 repeats/sec

0xF4

0xFA

設定鍵盤開始工作

0xF3

0xFA

設定Typematic Rate及Delay

0x00

0xFA

250 ms / 30.0 repeats/sec


留言

這個網誌中的熱門文章

EC 所需知識 - SMBUS

EC 所需知識 - KBC

EC 所需知識 - LPC