Key Ichigo キイチゴ キーボードソフト編
概要
コンセプトは「ポケットIchigoJam」です。
キーデコーダはATMEGA328Pを使う。
素直なキーマトリクスだとピン数が足りないので一工夫必要でした。
FirmwareはArduinoIDEでつくる。
キー配列はフルキー同等にする。(10キー無し)
LCDもつけてポケットPC化する。(Vidoeコネクタは残す)
ついでにMJとかROM、 センサー用コネクタとかも載せてIoTにも対応。
28ピンソケットは対応。5ピンソケットは位置がずれます。
10㎝角の基板に全部載せます。
最小構成 |
LINKなど。
猫にコ・ン・バ・ン・ワ のページを参考にさせて頂きました。
ps2dev を使うとマウスとキーボードをエミュレートできるらしいのですが、すでに作ったことがあるので、ライブラリは使わずにコーディングします。
自分でP/S2をプログラムしてみたいので仕様をこちらで拝見しました。
https://www.technoveins.co.jp/technical/keyboard/
https://www.avrfreaks.net/sites/default/files/PS2%20Keyboard.pdf
名前はFB友につけて頂きました。ソフトのトラブルも解決ヒントをFBのIchigoJam-Fanでいただいています。そちらもよろしければご覧ください。
以下、整理します。というより丸写し。
PCとの通信ハンドシェーク
- PCがCLK=0にしている:PCがBUSY
- CLK=1、DATA=0:PCからの送信要求
- データ送信は、CLK=1のとき、データを出してキーボードからCLKを操作する。
今回は1キーのみの対応なので次のようなフローになります。複数のキーが押されたとき最初のキーが離れた時点で次のキーを受け付けるようになります。シフトやコントロールキーはいつでも応答します。
1キー打鍵キーボードの処理
- DATA=1ならキースキャンを開始する。
- DATA=0ならPCからコマンドを受信して処理し1に戻る。
- 押下を検知したら、そのスキャンコードを送信する。
- キーのリリースを待つ。タイムアウトしたらオートリピートコード送信する。
- 当該キーのリリースを検知したらリリースコードを送信する。
- スキャンを続けるか、または1に戻る。
- Shift,ALT,CTRLは1と4のところで押下をチェックして別途コードを送信する。
PC->キーボードへの命令
- 0xed + 0x00~0x07 : LED点灯制御(未確認)
- 0xee : ECHO Responce要求 (対応)
- 0xef~0xf2, 0xf7~0xfd: Nop (未対応)
- 0xf3 + 1byte : Set Typematic Rate/Delay(未対応)
- F4 : Enable キースキャン開始 (ACK返信)
- 0xf5:Default Disable、初期化しスキャン停止(未対応)
- 0xf6:Set Default、初期化(未対応)
- 0xfe:Resend 再送要求(未対応)
- 0xff:Reset。リセットしACKを返す。その後セルフテストを開始。(ACKを返す)
キーボードからPCへのコマンド
- 0x00:バッファオーバーフロー(バッファサイズ16バイト)(未対応)
- 0xaa:BAT Completed。Basic Assurance Testが正常終了した。(未対応)
- 0xee:ECHO RESPONCE。ECHOコマンドへの応答(対応)
- 0xf0:Break code prefix
- 0xfa:Ack。ECHO, RESEND以外のコマンドの正常受信に対する応答コード
- 0xfc: BAT Failure(未対応)
- 0xfd:セルフチェックでエラー発生(未対応)
- 0xfe:PCに対する再送要求(未対応)
さて、いくつかのメモです。
クロック周波数は10~16.7KHz( 周期100~ 60uS)です。送信時は80uSに調整しました。受信時は適当です。
キーボードからホストに送信するときは、CLK=1を確認してからデータを書いてクロックをLOWにしてHIGHに戻すことを繰り返します。SPIをプログラムで送信するのと同じです。
ホストからキーボードに送るプロトコルはこうなっています。
クロックを作るのはキーボードが行う。
HOST->DEVICEのスタートビットはHOSTが作る。
PCからキーボードへのデータの送り方。
PCは100uS以上クロックを0にする。
PCはDATAをLOWにする。(スタートビットに見える)
次にクロックを1にするとデータ送信要求状態となる。
キーボードは10mS以内にデータ読み出しを開始する。
これで条件がわかりました。あとはせっせとコーディングします。
PCからのコマンドは全てスルーしても一応動きますので、自作されるかたはまずそれから試せばよいと思います。
>>ハードウエア編につづく(予定)
ソフト編補足 2020年5月2日IchigoJamのモニタ出力のDefaultはNTSCなのです。KeyIchigoは128x64のLCDが搭載されていますが、そのままでは切り替えないとLCDは点きません。
そこで、キーボードコントローラにIchigoJamからリセットコマンドが送られたら通常のACKにつづけて「F1+SWITCH1,5+Enter」を送信するようにしました。
これで、電源を入れるとLCDが表示を始めるようになりました。