2011年09月29日

PS/2キーボード関係のメモ

PS/2→USB変換器を6製品試す』 の記事を読んだ。結論としては、気に入る『PS/2→USB変換器』はなかったとのこと。

これぐらいなら、電子工作で作れそうな気がする。市販品で気に入らないなら 気に入るような仕様で作れば良いから、実用として役に立つものになるかも知れない。

 − 電子工作を趣味としていても、実用として役に立つようなネタは少ないのでメモしておこう。

そういえば、私の愛用キーボードは、PS/2 の HHK lite2 でインターフェイスは PS/2 だ。そして KVM につなげている。で、PFU の サイトをみてみると ... HHK lite2 は、USB のみになっている。

http://www.pfu.fujitsu.com/hhkeyboard/lite2/

まぁ、USB でも困らないのだが、KVM を活かしたいなら 『USB→PS/2変換器』 が欲しくなる。これは、電子工作で作れるのだろうか?

どうせなら、USB→USB で自由にキーマッピングを変えられるものとかも良いかも知れない。

... そういえば PS/2 マウスのほうが絶滅しかかっている。マウスも対応したほうが良さそう。


こういう前提で構想を練ってみよう。

チップの選定

    これは、文句なしに ATmega32u2 。いままで作ったライブラリがある。ただ、HID(HumanInterfaceDevice) はサポートしていないから、そこから作る。公開されているものだと LUFA を使うのも良い。あと USB の D+/D- を PS/2 として使えるような 機能も持っているので、変換アダプタが使えそうなのが良い。(ATmega32u4 も良いのだが、この機能は持っていない)

    これで、HOST との接続はできる。あとは、デバイス側。PS/2 マスタ は、XCK を使った同期シリアルでいけそう。ただしオープンコレクタ出力でないといけないので、外部デバイスがいる。 ちなみに ATmega32u2 は、5V での動作が可能で レベル変換で苦労することはない。

      D+/D- を PS/2 として使う場合、VCC でプルアップされ 特殊なポートとして駆動が可能になるようだ。... PS/2 は 5V だから VCC も 5V でないといけない。

    問題は、USB HOST 。Low スピード 1.5Mbps での 送受信を Port を使って制御する。V-USB など Device でも制御できるのだから HOST も原理的には可能なのだろう。ただ、電圧の問題がある。

    VCC が 5V ということは、PORT も 5V 。... となると 例によってツェナーダイオードのお世話になるしかないのだろうか? ... しょうがないのでとりあえずその方針にしよう。

    OTG 機能を持った マイクロコントローラなら、HOST にできるが ... どちらの変換機にするか最初に決めないといけない。USB→USB も無理。ものづくりとしては、こちらのほうが面白いはず。

信号線の割り当て

    D+/D- USB なのは当然だが、PS/2 の場合どちらを ( CLOCK信号/DATA信号 にするのか決められない。アダプタが 2通りあるはず。) 自動で判別できれば良いのだが、そううまくいくのだろうか?

    PS/2 デバイス側

      TXD(PD3) は、NPN Tr か Nch Mos FET で DATA信号を駆動。RXD(PD2) は、DATA信号 に抵抗を通して接続。
      同じように XCK(PD5) をCLOCK信号駆動用にして、別の PORT(PD4) を読み込みように割り当てる。

      あ、USART を使うと TX/XCK の極性 が逆になってしまう。インバータが必要。

    USB HOST (デバイス側)

      D+ に INT0 を割り当てたほうが良さそうなので、 PD0 を割り当てる。D- は PD1 。

      ソフトだけで PS/2 マスタを制御するのなら、逆変換のアダプタで PS/2 キーボードを接続することは、可能。その場合外付け の回路もいらない。問題は間に合うかどうか。割り込みを使わないなら、あるいはいけるかも。ちなみに 処理できないときは、CLOCK を L にしておけば良いらしい。

    HWB(PD7) FW 書き換え用。

      忘れてはいけない。あと LED とかも欲しい。

      ちなみに、5V で動かすので、UVCC/VCC/AVCC は VBUS (5V) に直結。

開発関係のメモ

    デバッグする環境は頭がいたい。

    まず、PS/2 キーボードやマウス を接続する方。PS/2 キーボードやマウス 自体の入手が難しい。まさか現役のキーボードで最初のテストをするわけにもいかないし。また、日本語キーボードは何通りかあって、くせがあったはず。PS/2 マウスは安いのを見付けたら買っておくのも良いかも知れない。

    次に HOST とのインターフェイス。PC しかない が、電源投入時にしか認識されない。また、最初のテストで PC を使うのは PC を壊すおそれがあり避けたい。


    http://www.dealextreme.com/p/slim-usb-2-0-to-ps-2-adapter-dongle-1440
    Slim USB 2.0 to PS/2 Adapter Dongle $2.58


    http://www.goodluckbuy.com/slim-usb-2-0-to-ps-2-adapter-dongle-1.html
    Slim USB 2.0 to PS/2 Adapter Dongle $2.64 (www.goodluckbuy.com)

    本末転倒にも思えるが、最初は、安物の『PS/2→USB変換器』を通してテストするのが良いのかも。起動後挿せば良いし、PCを壊すおそれも小さい。おかしくなったら抜けば良い。ただ、おそらく USキーボード専用で、(ちゃんとした)日本語キーボードのテストは無理だろう。

      だいたい PS/2 キーボードが US か日本語か 自動判別はできない。一方 USB キーボードは どちらか分かる(分かっていないといけない)はず。(自信なし)

      これらの種別の設定や キーマップの変更というのはサポートしたい。データは EEPROM に置くとして... 設定は、ツールなしで出来ると良さそう。アイディアとしては、NotePad を開いておいて メニューをキーコードの列を出力することで表示するとか...


    あとの問題は、ソフトの開発環境。別に ターゲットデバイスを用意する必要はない。ATmega32u2 ボードは既にある。( Teensy(1.0)互換ボード は今遊んでいる。)

    これだけで、まずは HID の開発ができる。その後は、2 pin だけで PS/2 デバイスを 制御してみる。PS/2 コネクタは持ってないし、ソフト USB 用として回路を組んで 逆変換アダプタで PS/2 キーボードやマウスをつないでみる。うまくいけば、まずは『PS/2→USB変換器』まで作れる。

    あと、USB に 変換アダプタを付けて PS/2 デバイスのテストはできる。PS/2 キーボードやマウスをつないで 『PS/2→PS/2』のテストもできそうだ。

    あとは、USB HOST のテスト。16 MHz という変則クロックだから V-USB をベースになんとかできるかやってみる。その前にツェナーを用意しないと。

PS/2 関係の製品について

構想2

    さて、ここまで読んでも、なにがしたいのかイメージできないと思う。
    どういう要素が使えるか、洗い出しただけに近いからイメージできないのも当然かも知れない。

    少しまとめてみることにする。

    1) 1:1 の変換

  • ATmega32U2 を使って USB or PS/2 - USB or PS/2 変換をするボードを作る。

  • ボード自体は、USB miniB - USB A メス のコネクタを付ける。

  • PS/2 に接続する場合は、USB - PS/2 , PS/2 - USB の変換コネクタを使う。

  • CPU は、5V 16 MHz で動作させる。-- UVCC/VCC/AVCC は VBUS (5V) に直結。

  • USB miniB の方は、普通に USB として配線する。

  • USB A メスの配線は、D+ = PD0/D- = PD1 。75 Ωぐらいの抵抗を通して接続し、3.3V の ツェナーダイオードで 電圧の制限をかける。

      PS/2 に変換するときは、3.3V までしか電圧が上がらない。が、たぶん大丈夫だろう。
      問題が起きるなら、ツェナーダイオードと GND の間に Nch MOSFET を入れたりすれば、良さそうではある。

      ツェナーダイオード の入手について :

      千石で リード部品 3.5〜3.7V or 3.2〜3.4V (リード部品 φ2.0 x 4.2mm) を扱っている。
      10 個 210 / 100個 630円。

      チップ部品なら、鈴商 とか。

      デジキーだと MM3Z3V3BCTあたり?

    このボードを使って、USB device, PS/2 device, USB HOST , PS/2 HOST のコードを作り別々にテストする。それが出来たら、実際の 『PS/2→USB変換器』や 『USB→PS/2変換器』 を作ってみる。PS/2 といっても キーボードとマウスは別のプロトコルだから、それぞれ別のものとしてファームウェアを作る。

    できたら、自動判別したいのだが、うまくいくかどうか分からない。最悪別々のファームウェアになる。また、『USB→USB変換器』や 『PS/2→PS/2変換器』も 対応できるようにしておきたい。

      ちなみに、『USB→PS/2変換器』は、ATmega32u2 っである必要はない。ATmega328p とかで十分。
      USB device を V-USB で作るのは無理(割り込み禁止で動作させたり出来ないため)


    2) 2:2 の変換

    次の段階では、キーボード、マウスを両方扱えるものを検討してみる。といっても 最初から考慮して設計しておかないと、ほとんど再設計になりそうだ。

参考資料
http://www.oadg.or.jp/ 『OADGテクニカル・リファレンス ハードウエア編』
http://ioiodesu.web.fc2.com/PS2/PS2.HTML PS/2 『マウス/キーボード プロトコルとインターフェース』

http://www.usb.org/developers/hidpage/
http://www2d.biglobe.ne.jp/~msyk/keyboard/layout/usbkeycode.html 『USBキーボードのキーコード』

追記: PS/2 コネクタ(メス)

DealExtreame で扱っていた
posted by すz at 23:35| Comment(2) | TrackBack(0) | 日記