PS/2キーボードインターフェース


各国キーボードとスキャンコード

Windowsは世界中で使用されているため、非常に多くの国のキーボードがあります。
Windowsパソコンでは、キーボードの各キーにスキャンコードと呼ばれる固有のIDをもっています。
キーコードは、キートップ表面に印刷された文字ではなく、キースイッチの位置に対して割り付けられています。
"A"と書かれたキートップのキーを押した場合でも、キーボードは"A"のコードを発行しているわけではありません。

キーボードは、キーを押した際、離した際にキーコードをパソコンへ送ります。
国やキーボードの種類によって、キー配置が異なります。
キーボードにはいくつかのモデルがありますが、スイッチ数と形状が同じであれば、キートップの印刷内容は異なっても、同じ位置のキースイッチは同じスキャンコードを持っています。
パソコンでは、キーボードから受け取ったスキャンコードからキー入力を組み立て、キーコードを作成します。
Windowsに設定された国コード及びキーボードタイプにより、どのスキャンコード(どこの位置のキー)を受け取った際に、どの文字(仮想キーコード)に変換するか決められています。
その為、その変換テーブルを切り替えることで各国のキーボードになることができます。
この作業はWindowsのキーボードドライバーが行っています。(DOS時代はBIOSが行っていました)

通常は、内部データであるスキャンコードを意識する必要は全くないのですが、特殊なアプリケーションを開発する場合、スキャンコードを調べる必要になる事があります。

具体的には、

  • テンキーから入力を判別したい場合。
  • シフトキーなど左右どちらが押されたか判別したい場合。

その他、キーボードの状態を直接サンプルすることでゲームなど特殊なアプリケーションを開発することができます。

 

キーボードインターフェースハードウェア

パソコンマザーボード上にはキーボードと通信を行う1ChipCPU(PC-ATの場合8042)が存在します。
このCPUはキーボードコントローラと呼ばれ、パソコンから見た場合、1つのインテリジェントI/Oとして動作します。

キーボードのキーが押された場合、キースキャンコードをパソコンへシリアル信号として送信します。
通信はクロックとデータが分離した2種類の信号線を用います。
データ信号線、クロック信号線ともに10kΩ(PC-ATの場合)で+5Vにプルアップされ、パソコン側、キーボード側両側からオープンコレクタのドライバ7407(PC-ATの場合)で駆動され ています。
2本の信号線の信号をドライブするタイミングにより、1組の信号ラインを用いて双方向の通信を行います。
通信が行われていない場合、両信号線とも"High"レベル(両側ともドライブしていない状態)です。

WindowsのキーボードはMini-DIN6Pinのコネクタで接続されています。
以前はDIN5Pinでしたが、現在は全てMini-DIN6Pinのコネクタとなっています。

DIN(5Pin) Mini−DIN(6Pin)   信号
2 1 Keyboard KB Data
  2    
4 3 PWR GND
5 4 PWR +5V
1 5 Keyboard KB Clock
  6    

 

キーボード信号の流れ

キースイッチが押された場合、キーボードはMake(キースキャン)コードをパソコンへ送ります。
離された場合、Breakコードをパソコンへ送ります。
キーを押されたときと離したときで異なった情報を送ることで、どのキーが押されているのかをパソコンへ知らせます。

押した際はMakeコードを発行し、離さされた時点でBreakコードを発行します。
そのままキースイッチが押し続けられた場合、Makeコードのみが連続して発行されます。
下記にEnterキーを押した際の実測波形を示します。

KB Data(上段)
KB Clock(下段)

EnterキーのMakeコード

EnterキーのBreakコード

KB Data(上段)
KB Clock(下段)

EnterキーのMakeコードの拡大1

EnterキーのMakeコードの拡大2

※測定用にかなり長い延長ケーブルをつけているため、大きなアンダーシュートが発生していますが、気にしないでください。(**;)

 

キーボードシリアルデータ構成

1つのデータは11ビットで構成されています。

流れ ビットストリーム 信号
開始 1 Start Bit ”HIGH"
  2 D0(LSB)
  3 D1
  4 D2
  5 D3
  6 D4
  7 D5
  8 D6
 終了 9 D7(MSB)
Mode1の信号の流れ
流れ ビットストリーム 信号
開始 1 Start Bit ”LOW"
  2 D0(LSB)
  3 D1
  4 D2
  5 D3
  6 D4
  7 D5
  8 D6
  9 D7(MSB)
  10 Parity(ODD)
終了 11 Stop Bit "HIGH"
通常の信号の流れ

キーボードデータを取得する際、KBクロックの立下りでKBデータをフェッチします。
上記拡大2のスコープ写真でEnterキーのMakeコードを読んでみると、"00101101011"となり、通信中のMakeコードが01011010(5Ah)であることがわかります。5AhはEnterキーの位置のキーである事がわかります。

 

キーボードとの通信

MS-DOSの時代ですとキーボードコントローラをBIOSやI/O制御することで、キーボードと通信ができました。
Windows下ではBIOSではなくWindowsが直接I/Oを管理しているため、アプリケーションからキーボードとの直接の通信はできなくなりました。

参考までに、PC-AT時代のキーボードとキーボードコントローラの通信コマンドを掲載します。

通信制御

パソコンがキーボードデータを受け取れない場合

    パソコンがクロック線を"L"にします。
    (その際、データ線は"H"でも"L"でもよい。)

パソコンがキーボードへデータを送る場合

    クロック線が"H"の状態で、データ線を"L"にします。

キーボードデータをパソコンへ送る場合

    上記要求がない場合、データビットを出力した後、キーボードがクロック線を"L"にします。

 

パソコンがキーボードへ発行するコマンドコード

コマンド コード(HEX) 内容 応答
Set/Reset Mode Indicator ED キーボードのLEDの点灯/消灯要求。これに続くオプションバイトでLEDを指定する。
2Byte目 指定LED
Bit2 Caps Lock LED
Bit1 Numeric Lock LED
Bit0 Scroll Lock LED
ACK
Echo EE キーボードが接続されている場合、キーボードはパソコンへ応答(ECHO Responce)を返す。 ECHO
NOP EF-F2,
F7-FD
   
Set Typematic Rate/Delay F3 ディレィの設定
Bit6 Bit5 ディレィ
0 0 250mS
0 1 500mS
1 0 750mS
1 1 1000mS

リピートレートの設定

Rate=1 / ((8 + (bit2:0) ) * (2 ** (bit4:3)) * 0.00417 )  MakeCode/Sec

Bit4 Bit3 Bit2 Bit1 Bit0 Rate
0 0 0 0 0 30.0
0 0 0 0 1 26.7
0 0 0 1 0 24.0
0 0 0 1 1 21.8
0 0 1 0 0 20.0
0 0 1 0 1 18.5
0 0 1 1 0 17.1
0 0 1 1 1 16.0
0 1 0 0 0 15.0
0 1 0 0 1 13.3
0 1 0 1 0 12.0
0 1 0 1 1 10.9
0 1 1 0 0 10.0
0 1 1 0 1  9.2
0 1 1 1 0  8.6
0 1 1 1 1  8.0
Bit4 Bit3 Bit2 Bit1 Bit0 Rate
1 0 0 0 0 7.5
1 0 0 0 1 6.7
1 0 0 1 0 6.0
1 0 0 1 1 5.5
1 0 1 0 0 5.0
1 0 1 0 1 4.6
1 0 1 1 0 4.3
1 0 1 1 1 4.0
1 1 0 0 0 3.7
1 1 0 0 1 3.3
1 1 0 1 0 3.0
1 1 0 1 1 2.7
1 1 1 0 0 2.5
1 1 1 0 1 2.3
1 1 1 1 0 2.1
1 1 1 1 1 2.0
Default Rate=10Char/Sec, Delay=500mS
ACK
Enable F4 キースキャンを開始する ACK
Default Disable F5 起動時の状態へ戻し、キースキャンを停止する  
Set Default F6 起動時の状態へ戻す ACK
Resend FE 再送要求 DATA
Reset FF キーボードリセットコマンド。正しく受け取った場合ACKを返す。その後キーボードはセルフテストを実行する。 ACK

 

キーボードがパソコンへ発行するコマンドコード

キースキャンコード以外にもキーボードから発行されるコマンドがあります。
システムバージョン等によって異なるようですが、PC-ATシステムでのキーボードコマンドコードの一覧を示します。

コマンド コード(HEX) 内容
Overrun 00 16バイトの受信バッファを超えた
BAT Completion AA BAT(Basic Assurance Test)が正しく終了した
ECHO Responce EE エコーコマンドへの応答を示す
Break Code Prefix F0 Breakコードのプリフィックス
Ack FA ECHO、RESEND以外のコマンドに対する正しく受け取られた応答メッセージ
BAT Failed FC BATが正しく終了できなかった
Disgnostic Failure FD セルフチェック時にエラー発生
Resend FE パソコンからの送信データ再送要求

 


参考文献:

  • Technical Reference(Personal Computer Hardware Reference Library / IBM)
  • PS/55ハードウェア  ハードウェア・インターフェース技術解説書(オーム社)

 

参考技術情報

主要販売製品

テクノベインズWebトップ 見積依頼 Webショップ 総合案内    

防塵 ファンレスPC

バーコードスキャナ
[CCDタイプ]

業務用プリンタ
[レシート・ラベルプリンタ]

カスタマディスプレィ

スマホでPOS機器
SmaSvr[スマサバ
]

スマホでチケット印刷
スマサバ・プリント

防塵 コネクタキャップ

バーコードスキャナ
[レーザータイプ]

レジプリンタ サプライ品
[レシート用紙]

業務用キーボード
[プログラマブルキーボード]

ソフト

POS
Facille
[ファシール]

ネットワーク接続 VFD表示機

タッチパネルLCD

キャッシュドロワ

コンバータ

Win7対応状況

 

 


Last Update : 2011/09/09


戻る トップページへ ご注文方法について 更新情報 
  テクノベインズ株式会社 〒113-0034 東京都文京区湯島3丁目31-4 ツナシマ第1ビル 電話:03-3832-7460 (平日:09:00-17:30) FAX:03-3832-7430
Techno Veins Co.,Ltd. Tsunashima Daiichi Bldg, 31-4, Yushima 3, Bunkyou, Tokyo, 1130034, JAPAN. Tel:+81 3-3832-7460 FAX:+81 3-3832-7430  sales@technoveins.co.jp (弊社地図)
©Copyright Techno Veins Co.,Ltd. 1987-2014. All rights Reserved.