まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

PS/2キーボード変換器の製作(5)

キーボード⇔変換器⇔PC本体とのやり取りについて検討する。

 キーボードとPC本体、それぞれはPS/2インターフェースでシリアル通信を行う。このデータを加工するためには送受信するデータをいったんマイコン内部に蓄積しなければならない。2つのポートに関してポーリングを行うことになるので、以下の様な手順を考えた。

(1)キーボード⇔変換器について
 キーボードからの送信か、キーボードへの送信かを判定
 (1-a)キーボード→変換器
 0bit目を受信
 1bit目を受信
 2bit目を受信
 3bit目を受信
 4bit目を受信
 5bit目を受信
 6bit目を受信
 7bit目を受信
 8bit目(ODDパリティ)を受信
 キーボードからの受信バッファに蓄積
 キーボードからの受信モード解除
 (1-b)キーボード←変換器
 0bit目を送信
 1bit目を送信
 2bit目を送信
 3bit目を送信
 4bit目を送信
 5bit目を送信
 6bit目を送信
 7bit目を送信
 8bit目(ODDパリティ)を送信
 キーボードへの送信バッファから削除
 キーボードへの送信モード解除
(2)PC本体⇔変換器について
 本体からの送信か、本体への送信かを判定
 (2-a)PC本体→変換器
 0bit目を受信
 1bit目を受信
 2bit目を受信
 3bit目を受信
 4bit目を受信
 5bit目を受信
 6bit目を受信
 7bit目を受信
 8bit目(ODDパリティ)を受信
 PC本体からの受信バッファに蓄積
 PC本体からの受信モード解除
 (2-b)PC本体←変換器
 0bit目を送信
 1bit目を送信
 2bit目を送信
 3bit目を送信
 4bit目を送信
 5bit目を送信
 6bit目を送信
 7bit目を送信
 8bit目(ODDパリティ)を送信
 PC本体への送信バッファから削除
 PC本体への送信モード解除
 (3)キーボードからの受信バッファに蓄積がある場合
 データ変換
 PC本体への送信バッファに転送
 キーボードからの受信バッファから削除
 PC本体への送信モード設定
(4)PC本体からの受信バッファに蓄積がある場合
 キーボードへの送信モード設定
※(1)〜(4)繰り返し、これらのループを数十μS以内で回す(PS/2インターフェース観測後決定)

 ODDパリティのエラーがあった場合は?変換器で加工せずそのまま渡すことにより、PC本体とキーボード間で訂正してくれるので問題ない。

 各バッファの容量とマイコンの処理速度がどれくらいあれば収まるか?

PS/2キーボード変換器の製作(4)

US配列と日本語配列のキーの位置とスキャンコードは同じで、キートップの刻印が異なるだけである。これが問題で、キーボードの種類をパソコン側で見分けることができない。OSでキーボードの種類を設定するため、そのままキーボードを繋ぎ換えたら刻印どおりの記号が入らなくなる。

 SHIFTキーについては特別な扱いとなる。@マークを入力するには、日本語配列ではそのまま@だが、US配列だとSHIFT+2となる。つまり、US配列のキーボードでSHIFTが押された状態で2が押された時に、日本語配列で@に相当するスキャンコードを送出しなければならない。この時はいったんSHIFTキーを離したように見せかけた後、再度SHIFTキーのスキャンコードを送る。



英 [SFT] [2]        [2解除]         [SFT解除]

和 [SFT] [SFT解除][@][SFT] [SFT解除][@解除][SFT]  [SFT解除]

ALTキーやCTRLキー併用の場合は問題ない。機能が独立しているためだ。
あと、キーリピートが発生するが、変換にかかる時間がキーリピートの時間よりも充分に短ければ問題にならないだろう。

PS/2キーボード変換器の製作(3)

使用するマイコンだが開発キットを持っててひと通り使ったことのあるR8Cで検討。

サンハヤト SR8C15CP 
R8C/TinyマイコンSR8C15CP用書込み・I/Oボード MB-RS8 

SR8C15CPはDIP20ピンに封止したR8C/15マイコン。生産完了品だが手持ちがあるので使ってみる。
開発キットは9V300mAのアダプタが必要。液晶は持っている。

ルネサス開発環境 

PS/2キーボード変換器の製作(2)

 US配列と日本語配列の対応について作ってみた。今回はそのままタイプした場合とシフトキーを押した場合で対応づけている。
SHIFTキーを押している状態をマイコン側で保持して、ダマすことになる。ALTキーやCNTLキーを併用した場合も考慮する必要があるかも。

キートップとスキャンコード

和 英 code 英→和 変換後
漢 ~` 0x0E SHIFT+0x55/SHIFT+0x54
1! 1! 0x16 -
2" 2@ 0x1E 0x1E/0x54
3# 3# 0x26 -
4$ 4$ 0x25 -
5% 5% 0x2E -
6& 6^ 0x36 0x36/0x55
7' 7& 0x3D 0x3D/SHIFT+0x36
8( 8* 0x3E 0x3E/SHIFT+0x52
9) 9( 0x46 0x46/SHIFT+0x3E
00 0) 0x45 0x45/SHIFT+0x46
-= -_ 0x4E 0x4E/0x51
^~ =+ 0x55 SHIFT+0x4E/SHIFT+0x4C
\| 無 0x6A -
@` [{ 0x54 0x5B/SHIFT+0x5B
[{ ]} 0x5B 0x5D/SHIFT+0x5D
;+ ;: 0x4C 0x4C/0x52
:* '" 0x52 SHIFT+0x3D/SHIFT+0x1E
]} |\ 0x5D SHIFT+0x6A/0x6A
__ 無 0x51 -

以下は対応なし
無変換 - 0x67
前候補 - 0x64
カタカナ - 0x13

参考文献:PC周辺機器オリジナル設計ガイド2 Interface2005年12月号別冊付録

PS/2キーボード変換器の製作(1)

IBM-PC互換機のキーボードはUS配列と日本語配列の切り替えがOSを再起動しないとできない。(Macintoshは混在していてもそれぞれ認識して使うことができた) 
US配列を好む人は多いが、日本語配列の方が変換キーなどの機能が多いこと、一般的なご家庭用パソコンでは日本語配列しかないこと、WindowsをUS配列に設定するには若干の手間がかかることが問題となる。
 で、US配列のキーコードを日本語配列に見せかけるインターフェースを検討する。もし挫折しても資料は残るのでなんなりと役に立つでしょう。

PS/2 connector Wikipedia

 これによると5Vで275mAが取れる。信号線はDataとCLKで入出力を考えると4ポートあれば充分。  最近のマイコンで作るとしたら8PのAVRでもできそうだが、手持ちで以下のマイコンを検討する。

AVRマイコン ATTINY2313 

R8C/M12Aマイコン 

※いづれも秋月電子

 キーボードと本体は双方向の通信なので、コードを書き換える部分以外はスルーパスする方針。ハンドシェイクはこのアダプタ側では行わないことにする。
  SHIFTキーを押した状態での記号、例えば数字の2についてはUS配列で@、日本語配列で”となるが、これを差し替えるには現在SHIFTキーを押している状態かどうかを保持しないといけない。US配列での日本語入力切り替えで使うALT+`も同様で、ALTの状態を保持しないといけない。使わないかも知れないがCTRLもあるし、それぞれ左右に存在する。

 PS/2キーボードの資料については以下が見つかったが、詳細なタイミングなどは本+実機確認。

Sazanami Online:PS/2 インターフェイスの研究 
KeyCordLsit.pdf

TIのAndroid Development KitとGingerBread2.3.4イメージ

Android Development Kit for Sitara Microprocessors
こちらからBeagleBoard-xM用のイメージをダウンロードし、8GBのmicroSDカードに書き込んだ。
TI_Android_DevKit TI_Android_GingerBread_2_3_4_DevKit_2_1 Product Download Page
Prebuild ImadeのBeagleBoard-xMをダウンロード。

ダウンロードしたbeagleboard-xm.tar.gzを展開し、microSDカードに書きこむ。(例:/dev/sdc)

$ tar xvzf beagleboard-xm.tar.gz
$ cd beagleboard-xm
$ LOCALE=C
$ sudo ./mkmmc-android.sh /dev/sdc
 
mkmmc-android.shを正常に動作させるためにLOCALEをきちんと設定すること。

こうして作ったmicroSDカードをBeagleBoard-xMに取り付けて動作確認。
2.3イメージと同様にRev.Cでは赤っぽい画面で操作できなかった。Rev.Bは動作したがネットワークが使えない。

LatticeのCPLD開発キット MachOX2 Pico $29

Latticeから$29と安価なCPLD評価キットが出ている。元はキャンペーン価格だったのが定着したみたい。Lattice直販のほか、DigiKeyでも扱っている。型番:LCMXO2-1200ZE-P-EVN
MachXO2 Pico Development Kit 


pico
写真のとおりとても小さい。7cm×7cm以下。付属品はUSBケーブルとCR2032ボタン電池。ソフトウェアはすべてLatticeのサイトからダウンロードする。

 搭載するCPLDはLCMXO2-1200ZEで中間のグレード。MachXO2
 7セグメントの液晶4桁、静電式タッチスイッチ4つ、1MbitのSPIフラッシュメモリ、電力測定用のA/Dコンバータ、温度センサ付き。ボタン電池を入れて単体で動作させると温度計のような動作をした。8bitデータを扱うMico8マイクロプロセッサのマクロが使える(命令は18bit長)。
 以下はLattice社による紹介ビデオ。MachXO2って「まっは おーえっくすつー」って読むんだ。「まっちょつー」だと思ってた。





 そんなわけでこれ読みながらぼちぼち始めてみる。

FPGA/PLD設計スタートアップ2011/2012 2011年 05月号 [雑誌]FPGA/PLD設計スタートアップ2011/2012 2011年 05月号 [雑誌]
ディジタル・デザイン・テクノロジ編集部

CQ出版 2011-04-15
売り上げランキング :

Amazonで詳しく見る
by G-Tools

BeagleBoard-xM(Rev.B)+Android2.2/Android2.3イメージで動作確認

 ソースからビルドしようとして環境構築やらパッチやらで色々失敗続きだったが(kernel.orgが応答しない)、バイナリイメージがあるということがわかりさっそく試してみた。
以下の記事をほぼそのまま実行した。
Beagle Board xMでAndroidを動かす(ビルド済イメージ編)
 

☆Android2.2
 実行環境はUbuntu10.04(32bit)/VirtualBox。まずバイナリイメージを取得する。

$ wget http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/02_00_00/exports/beagleboard-xm.tar.gz

 これで取得したbeagleboard-xm.tar.gzを展開し、展開先へ移動する。

$ cd beagleboard-xm

 インストール用のmicroSDカードをUSBカードリーダーなどに挿す。VirtualBoxではうまく認識しないことがあるが、ホストOS(Windows7 64bit)ごと再起動すると直ることがある。
 dfなどでmicroSDカードのデバイス名を確認する。ここでは/dev/sdeとする。
 microSDカードを再フォーマットし、パーティションを設定し、イメージをコピーするシェルスクリプトmkmmc-android.shを実行する。事前に言語設定を変えておかなければならない。
 このシェルスクリプトはmicroSDカードの容量に合わせてパーティションを設定してくれる。今回は4GB/8GBのものを使用したが自動的にサイズを合わせてくれた。

$ export LANG=C
$ sudo ./mkmmc-android.sh /dev/sde
[sudo] password for takesita:
Assuming Default Locations for Prebuilt Images
All data on /dev/sde now will be destroyed! Continue? [y/n]
y
[Unmounting all existing partitions on the device ]
umount: /dev/sde: not mounted
[Partitioning /dev/sde...]
Disk /dev/sde doesn't contain a valid partition table
DISK SIZE - 3963617280 bytes
CYLINDERS - 481
[Making filesystems...]
[Copying files...]
[Copying all clips to data partition]
[Done]
$



☆Android 2.3
 以下のバイナリイメージを取得する。あとの手順はAndroid2.2と同じ。
$wget http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_DevKit_1_0/exports/beagleboard-xm.tar.gz



ベンチマークも内蔵しているが、実行には一時間程度かかる。
動画再生も問題なくできたが、音量が小さかった。これは使ったスピーカーのせいだろう。

☆問題点
・BeagleBoard-xM Rev.Cでは画面が赤っぽく、メニューが出てから操作ができない。



 ※BeagleBoard-xM Rev.B+Android2.3での問題点
・オンボードイーサネット動かず(設定に出てこない、存在しないWi-Fiのみ)
・マウスのスクロールホイールが利かない

☆今回のまとめ
・mkmmc-android.sh は便利に使えそう。SDカードのパーティション作成でもう悩まなくて良い
・とりあえず Rev.Bでは動いた
 

Windows8 Developer Previewをインストールしてみる

 Windows8 Developer Previewが公開されたので早速ダウンロードして試してみた。
Windows Dev Center 
ここから Windows Developer Preview with developer tools English,64-bit(x64)をダウンロードする。
ちょっと問題があって、isoイメージのファイルサイズが4.8GBとDVD一層を少し越えてしまう。二層のDVD-R媒体がないので、代わりに8GBのUSBメモリにイメージを書きこむことにする。以下の記事を参考にした。中身を消しても良いUSBメモリを用意する。
Windows 7のインストールUSBメモリを作る(Windows 7 USB/DVD Download Tool編)
 
実は、先に以下のdiskpartを使ったやり方を試してみたのだが、1本のファイルサイズが4GBを越えるものがあってコピーできなかった。(exFATならできたかも知れないが未確認)

diskpartを使ってWindows Vista/7のインストールUSBメモリを作る 

 では、isoイメージを書き込んだUSBメモリをターゲットとなるPCに接続し、USBメモリからブート。インストール手順はWindows7やWSH2011と変わらない。
 ターゲットPCはFUJITSU PRIMERGY TX100 S1にUSBサウンドアダプタ、英語キーボードを取り付けたもの。CPUはCore2Quad Q9400に交換、HDDは300GB。
Win8_01

これまでにわかったこと:
 ・インターネットに接続できる環境が必要。Live IDが必要。自分のホームディレクトリ名はLive IDで決まる。
・Windowsキーを押すとMetro画面と以前のDesktop画面が切り替わる。
・DVDプレーヤーはない。
・英語版だが、日本語キーボード選択可能。日本語テキストの表示と日本語IMEによる入力ができる。

 ・タッチパネル液晶による操作はDesktop画面では可能。Metroでは触った瞬間にブラックアウトして再起動した。
・ワコムのタブレットはドライバなしで認識し、使用できた。
・ネットワークから切り離してもLive IDでログインできる。(パスワードはどこかに覚えているようだ)
・ディスプレイの解像度は800×600。1280×1024に設定できるが、設定が記憶されないこともある。
使用した液晶パネル:[EIZO]ナナオ◇FlexScan L761T-C
 
とりあえず以上。 

BeagleBoard-xM Rev.C + Windows Embedded Compact 7

Windows Embedded Compact 7が付属したBeagleBoard-xM Rev.C が発売されたので入手した。
 なんと$149ですよ。Arrow Electronics

 BeagleBoardxM-C-01
手前に「C」のラベルが見えますね。
BeagleBoardxM-C-03
裏側。2811xM211。

HDMI-DVI変換ケーブル、USBマウス/キーボード、スピーカー、+5V電源を用意して動作確認。
WinCE7-01
起動画面。15秒程で以下の画面が表示され操作できる。Angstrom(組み込みLinux)よりも速い。
 WinCE7-02
起動時に音が出ます。操作画面はWindowsXPに近い。英語版。
WinCE7-03
コマンドプロンプトから中身を見てみた。
[スタートメニュー]にSuspendはあるが、キーボードやマウスを操作しても復帰しない。実質シャットダウン?

開発元:MPC Data Creative Software Solutions

とりあえず動作確認のみ。


記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ