PS/2プロトコルについて

PS/2キーボードをここしばらく制作しており,ある程度PS/2PS/2キーボードのプロトコルがわかってきたので,ちょっとまとめてみます.

参考にさせていただいたのは以下のサイトです.

PS/2について

今,キーボードを買うとだいたいがUSB接続のものですが,一昔前までPS/2という丸い紫色の端子(マウスは緑)の接続が一般的でした.
このPS/2は,大昔のPCであるIBM PS/2に使われていたマウスとキーボードのコネクタ形状,プロトコルが元となっており,
いわゆるPC/AT互換機の先駆け的PCだったためこのコネクタ形状,プロトコルが広まったのだと思います.

ただ,問題なのが,仕様書が無いのでネットにある断片を頼りにするほかないことです.

PS/2端子の形状・ピン

PS/2はミニDIN6ピンコネクタを端子形状としており,この6ピンのうち,4ピンをVcc, Gnd, Clock, Dataとして使っています.

ピン 説明
Vcc +
Gnd -
Clock クロック信号用(双方向)
Data データ信号用(双方向)

Vcc-Gnd間の電圧は5Vなので,マイコンの電源などにそのまま繋ぐことができます.
一方,Clock, Dataは双方向通信となっており,それぞれプルアップされ,オープンコレクタにつながっています.
なので実際にマイコンと接続するときはVcc, Gnd, Clock(read), Clock(write), Data(read), Data(write)の6ピンになります.
ここでClock(write)とData(write)はオープンコレクタなので,マイコン側の出力とClock, Dataピンの値は逆になるということに注意してください.

マイコン接続側 実際の値
Clock(write) = 0 Clock = 1
Clock(write) = 1 Clock = 0
Data(write) = 0 Data = 1
Data(write) = 1 Data = 0

PS/2 通信方法

シンプルなシリアル通信です.開始ビット,データビット,パリティビット,終了ビットの11ビットを送るだけです.
ただし,クロックは送受信の両方でキーボードがクロックを生成します.

S 開始ビット
D0〜7 データビット(LSB〜MSB)
P パリティビット(奇数パリティ
E 終了ビット
S D0 D1 D2 D3 D4 D5 D6 D7 P E
1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0

PCへの送信

  1. まずClockが1か(解放されているか)調べる.
  2. Clockが0だったらPCが通信を禁止しているので送信中止.
  3. Clockが1だったらDataが1か(解放されているか)調べる.
  4. Dataが0だったらPCがPCからキーボードへの送信を要求しているので中止.
  5. Dataが1だったら,前述の11ビットの通りに「Dataにビットをセット,クロックを生成(LOW→HIGH)」を11回繰り返す.
  6. もしクロックを生成する前にClockが0だった場合はPCが通信を禁止しているのですぐに中止する.

PCからの受信

  1. まずClockが1か(解放されているか)調べる.
  2. Clockが0だったらPCが通信を禁止しているので受信中止.
  3. Clockが1だったらDataが1か(解放されているか)調べる.
  4. Dataが0だったらPCがPCからキーボードへの送信を要求しているので6に進む..
  5. Dataが1だったら受信要求が無いので受信中止.
  6. 前述の11ビットの通りに「Dataから値を読み取り,クロックを生成(LOW→HIGH)」を11回繰り返す.
  7. ただし,受信の場合は最後のクロックの前にDataを1にしてからクロックを行い,その後Dataを0に戻す.これはPCへの受信完了の通知です.
  8. もしクロックを生成する前にClockが0だった場合はPCが通信を禁止しているのですぐに中止する.

キーボードの通信

キーボードはASCIIコードでやり取りを行いません.スキャンコードと呼ばれる独自のものになっています.スキャンコードには1,2,3の3種類がありますが
通常使われるのは2らしいので,他の1と3は今回はスルーしました.

キーが押されたときにメイクコード,キーが離されたときブレークコードが送信されます.たいていブレークコードはメイクコードにプレフィックス0xf0が付いている
だけです.

僕は今回PS/2→USB変換器を使ったので接続の確立は簡単でした.
この変換器の接続確立手順は

  1. PCから0xce(ラップ・モードの解除)を受信する.
  2. キーボードは0xfa(了解)を送信する.
  3. PCから0xfa(オートリピートの有効化)を受信する.
  4. キーボードは0xfa(了解)を送信する.
  5. 接続確立

USB-PS/2 変換ケーブル RC-U2MK

USB-PS/2 変換ケーブル RC-U2MK

こんな感じですかね.