ターガス・ストアウェイキーボード解析結果

最終更新日:2000.11.19


前書き

Palm用に4つ折りできるキーボードが出ていることをご存知でしょうか。 広げると本当にフルサイズのキーボードになり、 折りたたむと持ち運びに便利な形になるというものです。

これの Visor用日本語キーボードが9月にターガス・ジャパンから発売となりまして、 実際に店頭(ヨドバシカメラ)で触ってみたのですが、 本当にフルサイズのキーボードでありながらコンパクトになるし、 薄いにも関わらずキータッチが実に良い(メカニカル・キーボード!)のです。

これがザウルスに使えないかなぁ・・・と思うのも当然でしょう。 そこで、使えるか使えないかはともかく早速1台購入して解析してみることにしました。

Visorも持ってないのにキーボードだけ買うというも何な話ですけど、ま、いいでしょう(笑)。

下調べ〜推測〜確認

まずは、Visorのクレードル端子の信号が何であるかを調べないといけません。 しかしこれは簡単にいきました。 メーカーからの技術情報にもありますし、 あちこちのWebサイトに情報があったからです(^^)。

【キーボードを手前に置いた場合の各端子名】

(左から) TxD, VDOCK, USB_D+, USB_D-, GND, HS1, KBD, RxD

この内、VDOCK, USB_D+, USB_D- の3本は未接続ですので考える必要はありません。 問題は残る5本の役割ですが・・・ここでキーボードの気持ちになって考えましょう。

まず、このピン数ではパラレル通信をしているとは思えません。 そうするとシリアル通信だろうからデータ送信用に1本、 それからVisorから電源供給するためのピンが1本、 GND はそのまま GND でしょう。

ここで信号の入出力方向を見てみると、 TxDのみVisorから外部機器の方向で、残りは外部機器からVisorの向きだそうです (例えば HS1 は、クレードルなどでHotSync開始ボタンとなっており、 スイッチを押すことで GND とショートするようになっています)。

そうなると、TxD に電源を供給してやれば HS1,KBD,RxD のどこからか データがシリアル通信で出てくるんじゃないかな?と考えるわけです (なお、Visorでは TxD, RxD は RS232Cのレベルではなく TTLレベルです)。

この推測をもとに色々試してみたところ、 TxD に電圧をかけることで RxD も High レベルになり、 更にキーを押したり離したりすることでそれがパタパタ動くことを確認しました。 HS1,KBDの方は特に反応が無いようで未だに不明ではありますが、 これでどうにかデータが取り出せそうです。

[2000.11.19 追記]

ATOCさんからの情報によると、HS1 は HotSync の開始を、 KBD は 外部キーボード接続を Visor に知らせるための端子で、 どちらも外部機器からVisorへの入力信号とのことです。 ザウルスへの接続であれば2本とも無視して良さそうです。

TxDから出力される電圧の方は、 Visorが外部機器用に 3V 3mA まで流せるということから 5V ではなく 3.3〜3.4V 程度となるようです。

プロトコルと動作

何かデータが来ているらしいこと、 TTLレベルのシリアル通信だということはわかりました。 しかしながら、ロジアナ等を持っていない筆者のこと、 どんなデータが来ているのか、はたまたいないのか確認できません。

そこで、よくあるシリアル通信パラメータ 9600bps,stop 1bit,data 8bit であると仮定してPICで受信プログラムを組み、 直接確認してみることにしました。 上にも書いたように、Visorのシリアル端子はTTLレベルですので、 PICであればダイレクトに接続できて簡単なんですよね。

都合良く、PICと直接接続できるLCDも買ってきていたので、 RxDからの信号で割込み受信を行い、結果をLCDに表示させてみました。

そうしたら・・・ビンゴ!

思ったとおりです(^^)。 キーを押した時離した時スキャンコードが1byte送られてきて、 離された時はスキャンコードのMSBが1になるという至極わかりやすいものでした。 SHIFTやCTRL等のキーも例外なく、1つのキーという扱いです。

当初は、HS1 や KBD をフロー制御に使っているのでは?とも思いましたが、 もともと Visor 自体がシリアル通信でのフロー制御を持っていませんし、 問題なく受信できてるのでこれで良いのでしょう。

こうして1つ1つのキーを押して調べた結果、以下のようになりました。

【通信プロトコル】

Palmのシリアル端子は俗に言うRS232Cレベルですが、 Visorのシリアル端子はTTLレベルの電圧となっています (2000.11.19 ATOCさんより、Visorでは周辺機器用に TxD ラインから 3V 3mA まで流すことが可能であるという情報を頂きました。信号レベルも同様です)。

通信プロトコル自体は一般的な調歩式非同期通信の無手順ですので、 さほど面倒はありません。 データは一方的にキーボードからVisorへ RxD ピンで渡され、 フロー制御はありません。
  • 速度 9600 bps
  • データ 8 bit
  • ストップビット 1 bit
  • フロー制御は無い模様

【消費電力】

ターガス・ストアウェイキーボードは起動時とキーを押している間以外は ほとんど電力を消費していないようです。 恐らくはキーの上げ下げの変化以外はコントローラが眠るようになっているのでしょう。

動作時の電流を調べてみたところ、 複数のキーを同時に押した場合でも最大 0.5mA に達しませんでした。 通常時は 0.01 mA 程度にまでは落ちているようです。 LED 1個を光らせるのに 10〜20mA 流すことを考えると非常に少ない値です。

【make/breakコード】

キーが押されると下記のスキャンコードに従って 1byte 送信されます。 キーが離された場合には、同コードの最上位bitを立てた物が送られます。 具体的には、A のキーが押されたら $11 、 離されたら $91 が送信されます。

この時、今のキーでキーボードの全てのキーが離されたという場合には、 最後に送ったbreakコード(上の例だと $91)がもう1つ送信されます。 ”全て離された”という事を知らせているのかな?と思います。

オートリピートの処理はキーボード側には存在しませんので、 受け取る機器側のソフトで実現されます。

スキャンコード一覧

コードキー コードキー コードキー コードキー コードキー コードキー
$001 $10x $20 $30- $40* $50Delete
$012 $11a $21 $31\| $41Enter $51
$023 $12s $22Fn $32BS $42ToDo $52
$03z $13d $23Alt $33予定表 $43 $53
$044 $14f $24 $348 $44j $54
$055 $15g $25 $359 $45k $55
$066 $16h $26 $360~ $46l $56
$077 $17空白 $27 $37Space/New $47+ $57
$08Cmd $18Caps $28 $38@ $48?_ $58LShift
$09q $19tab $29 $39{ $49 $59RShift
$0aw $1aCtrl $2a $3a} $4aメモ帳
$0be $1b $2b $3bアドレス $4b
$0cr $1c $2cc $3cu $4cm
$0dt $1d $2dv $3di $4d<
$0ey $1e $2eb $3eo $4e>
$0f/^ $1f $2fn $3fp $4f終了

そして・・・

結局 HS1, KBD の2本は不明なまま(←2000.11.19 解決)ですが、 以上の情報で十分に利用可能なデータは引き出せたと思います。 当然ここまでくれば次は・・・・ですね(^^)。

それにしても、ワンチップマイコンは初めて扱いましたが実に便利な代物ですね。 特にこのPICは安いし扱いやすいしで便利に使うことができました。 とりあえず今回の解析でLCD制御やシリアル通信なども試せましたし、 色々面白い事ができそうです(^^)。

to be continued ...

[2002.02.06 追記]

 端子やプロトコルの公式情報は ThinkOutside社 のDeveloper Supportのページから入手可能です。 Palm, Visor, Jornada, iPaq 用キーボードの詳細が記述されてますので、 開発される方はそちらもご覧になると良いでしょう。