■「やまけん」さんによる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