2017-05-07 21:02 — asano
作りかけたまま放置していたPS/2-USBのキーボード変換器です。
そんなものいくらでも安く売っているのに何で作るのか、と思うかもしれませんが、普通とは逆でUSBキーボードをPS/2ポートに接続するための変換器です。探せば売っていなくはないのですが非常に高価(見つけたのは2万円ほど)です。
何が大変ってUSBキーボードを接続するためにはUSBホストの機能が必要になります。USBはホスト側はPC等に積むから複雑になってもかまわないという思想で作られているようで、ホストは手頃なコントローラも少なく情報もあまりありません。
私は幸いにも仕事でホストのエニュメレーションのコードを書いた経験もあり、何とかなるかと思って作り始めました。
左側は秋月電子のAKI-H8/3048をそのまま使用しています。さすがにアセンブリ言語で書く気にはなれなかったので、AVRなどではなくCで開発しやすいH8を選択しています。
右上の黒いのはミニDIN 6PのコネクタでPS/2用のものです。オス-オスのケーブルを持っていたのでメスコネクタを搭載しました。
赤いスイッチはリセットです。
その下の16×2のコネクタはROMエミュレータを接続するためのものです。H8/3048はROM内蔵なのですが、以下の理由で外部にROMエミュレータを接続することにしました。
- 内蔵Flash ROMの書き換え回数が100回までしか保証されていないこと。未知の部分の多いUSBのことを考えると100回では不足する恐れがあったため。
- 内蔵Flash ROMの書き換えに12V電源が必要なため。
- エミュレータならmakefileから書き込みしやすい。
完成後はもちろん内蔵ROMに書き込む予定でした。
CypressのSL811HSがUSBホストに対応したコントローラです。PCIバス用のものは多数ありますが、当時マイコンバスに接続できるホストコントローラはほとんど選択肢がありませんでしたね。
右下がUSBのAコネクタ。
その左の14ピンICは74HC04APです。
AKI-H8ボードの下はテスタ等であたりにくいので空けてあります。
AKI-H8のピンは大半が未使用です。
ROMを外付けにしたのでかなりのポートをバスとして使ってしまっていますが、ポートは余っているので問題ありません。PS/2インターフェイスに必要なのは2本だけです。
さて、ハードウェアはこれで完成ですが、問題はソフトウェアです。必要な機能はざっとこんな感じになると思います。
- USBの初期化とエニュメレーション
- キーのPress/Release情報をUSBから取得
- USB⇒PS/2のコード変換(必要なら)
- PS/2へのPress/Release情報の送信
これらの内、USB初期化とエニュメレーションはキーボードのみ・ハブ非対応の範囲でできて、キーコードの取得もできるところまで行っていました。
ところが簡単だと思っていたPS/2が意外に情報が少なくて実験を繰り返しているところで、変換器を必要としていた状況が変わって必要なくなってしまって作業を中断しました。
それ以来、放置したままになっています。今ではPS/2にこだわる必要性も少なくなってきたのでよほどのことが無い限りもう再開はしないと思いますね。
Add new comment