■「やまけん」さんによるCE-KB1の解析結果
このデータは「やまけん」さんの許諾がない限り転載禁止扱いとさせていただきます。
1998.5.23版
by やまけん(匿名希望)
以下は,ザウルスポケット(MI-110M)と携帯キーボードCE-KB1との間の通信プロトコルを独自に解析したものである.
この解析結果に従って,キーボードコントローラを作ったところ,正常に動作しているので,ほぼ間違いはないと思われるが,ドキュメント化の過程で間違いが入っている可能性はあるし,機種の製造ロットなどによって仕様変更されている可能性もある.
●信号線割り当て
ケーブルは
Vcc (3V,つまり電池2本分の出力)
Data
Clock
GND
の4本からなる.ClockもDataも常にキーボードがドライブする.電源は Zaurusから供給される.
ピン割り当て.(ケーブル側でなくて,CE-KB1のメスコネクタを外から見たところ.)
┌─────────┐
│┌───────┐│
││ ││
││ V D C G ||
││ ┌┐ ││
│└─┘└────┘│
└─────────┘Vcc
Data
Clock
GND
●信号構成
通常は,ClockがHで,DataがLの状態にある.
データは 8 bit x 2を一つの単位として送られる.
1つのClockは,L: 26μS, H: 26μSで構成される.つまりクロックは 52μS周期で送られる.
ClockがLになると同時にDataにデータが出力され,次にClockがLになって次のデータが出力されるまでDataは保持される.おそらく,Zaurusは Clock: L→Hの立ち上がりでデータを取り込んでいると思われる.
データは,LSBからMSBの順に送られる.
8bit分の送信が終わると,74μSの待ち (C:H, D:Lの状態) が入り,次の8bitが送信される.
典型例: (後述するALIVEパターン)
A B
←→ ←→
C ──┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌──┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌──
└┘└┘└┘└┘└┘└┘└┘└┘ └┘└┘└┘└┘└┘└┘└┘└┘
┌─┐ ┌───────────────┐
D ────────┘ └─────────┘ └─
A = 52μS
B = 74μS (Bの手前の26μS分の CがHighになっている状態は,クロックの後半部分)
左がLSB,右がMSBである.
●データ構成
最初の1バイトは,上位4ビットと下位4ビットから構成される.
上位4ビットは,キーボードの状態を表す.これをここでは状態ニブルと呼ぶ.bit7: REPEAT オートリピートの時に1
bit6: SHIFT シフトキーが押されている時に1
bit5: CTRL コントロールキーが押されている時に1
bit4: 0 (立ち上がりシーケンスの時のみ1になる特殊なビット)
下位4ビットは,状態ニブルと次の2バイト目の中の1のビット数である.
ここでは,下位4ビットを,SUMニブルと呼ぶ.
2バイト目は,キーに対応したコードである.
●送信コード
キーが押されなくても,1秒に1回必ずコードが送られる.これをALIVEコードと呼ぶ.ALIVEコードは,キーコード部分が 0xFFである.状態ニブルは,その時のキーボードの状態を反映する(後述).
・キーの押し下げ
キーが押されると,そのキーに対応したコードが送られる.キーコードは原則として,そのキーのアスキーコードである (キーコード表参照).
ただし,コントロールキーとシフトキーは,特別なキーであり,キーコードを持たない.これらのキーは,キーボードの状態であり,キーコードとは別に送られる.この2つのキーを状態キーと呼ぶ.
状態キーだけが単独に押されると,その状態を反映した状態ニブルで,キーコード部分が0xFFというデータが送信される.このコードもALIVEコードと呼ぶ.・キーの開放
(通常のキー,状態キーに関係なく) キーを離すと,ALIVEコードが送られる.
その後,1秒間隔でALIVEコードが送られる.・キーのオートリピート
通常のキーを押し続けると,自動的にコードが繰り返し送信される.これをキーのオートリピートという.オートリピートで送られるコードは最初の押し下げ時と同じものであるが,状態ニブルのREPEATビットが立つ点だけが異なる.
キーを押し下げて最初にコードが送信されてから,700ミリ秒後にオートリピートによる最初のコードが送られる.その後は60ミリ秒間隔で,コードが送られる.
状態キーはオートリピートしない.状態キーを押した時にALIVEコードが送信されるが,その後,キーを押し続けても1秒間隔でALIVEコードが送信される.・複数のキーの押し下げ
普通のキーを押したままで,状態キーを押すと,状態ニブルはその新しい状態で,キーコードは押されている普通のキーのものを持ったコードが送られる.
普通のキーを押したままで,別の普通のキーを押すと,押されるたびに,通常通りのコードが送られる.離されると,ALIVEコードが送られる.何が離されたのかはわからない.
●電源オンからのシーケンス
0: | 電源オン. |
0: | 同時にCがオン. |
4μ秒後: | Dがオン |
12.6m秒後: | Dがオフ. |
72msec後: | 状態ニブルが0xF,コードがz
(0x5A), k(0x4B), y(0x59),0(0x30)というシーケンスが3回送信される. シーケンス内のコードの間隔は,200μ秒程度.シーケンスの間隔は11ミリ秒である.状態ニブルのbit4が立つのはこの時だけである. |
83msec後: | 2回目のシーケンス.上述. |
94msec後: | 3回目のシーケンス.上述. |
620msec後: | ALIVEパターンの送信. |
その後は,1秒間隔でALIVEパターンが送信され,通常状態となる |
●電源について
電源は Zaurusから供給されるが,新規入力モードや修正モードで,外部キーボードを選択した状態でのみ供給される.その状態が終わると,直ちに電源が断たれる.次に電源が入った時には,また電源オンのシーケンスから開始する.
また,電圧は,乾電池からの供給のため安定化されていない.Zaurusはかなり広い電圧幅で動く.少なくとも3.2V〜2.6V位は動くらしい.キーボードコントローラが,Vccから電源を貰う場合は注意すること.
●キーコード表
キー | CODE | ||||||||
後退 | 08 | 3 | 33 | G | 47 | W | 57 | 音訓 | 77 |
TAB | 09 | 4 | 34 | H | 48 | X | 58 | 前候 | 78 |
RET | 0D | 5 | 35 | I | 49 | Y | 59 | 変換 | 79 |
ESC | 1B | 6 | 36 | J | 4A | Z | 5A | 取消 | 7A |
→ | 1C | 7 | 37 | K | 4B | [ | 5B | 採用 | 7B |
← | 1D | 8 | 38 | L | 4C | \ | 5C | 入力 | 7C |
↑ | 1E | 9 | 39 | M | 4D | ] | 5D | 削除 | 7F |
↓ | 1F | : | 3A | N | 4E | ^ | 5E | SHIFT | FF |
SPACE | 20 | ; | 3B | O | 4F | \(?) | 60 | CTRL | FF |
, | 2C | @ | 40 | P | 50 | 記号 | 70 | ||
- | 2D | A | 41 | Q | 51 | CAPS | 71 | ||
. | 2E | B | 42 | R | 52 | 半角 | 72 | ||
/ | 2F | C | 43 | S | 53 | ひら | 73 | ||
0 | 30 | D | 44 | T | 54 | カナ | 74 | ||
1 | 31 | E | 45 | U | 55 | 英数 | 75 | ||
2 | 32 | F | 46 | V | 56 | 機能 | 76 |