/* * UZK - Keyboard & Mouse extender by USB * (aka EZK on USB) * by uratan! 2004.7.24 * revised 2007.3.25, 2007.7.10 */
EZ-USB(AN2131) のファームウェアのソース一式はこちらです。
ez-uzk-0190.lzh (version 0190, 2005.4.3)MINI EZ-USB 1個単体でも HID デバイスの出現までは確認できます。Cypress の web サイト "AN2131-DK001 EZ-USB Development Kit" よりダウンロードできた "EZ-USB Development Tools V2.61.700" にて作成いたしました。
プログラムのコンパイルには、上記の開発環境の他にも windows 版の make と awk と rm が必要です。これらは、 "Native Win32 ports of some GNU utilities" に含まれる make.exe, gawk.exe, rm.exe が使用できます。 (2007.7.10 上記サイトからはダウンロードできなくなっているようです。 こちらからどうぞ)
私は公式な USB の VID を付与されておりませんので、上記のファームウェアでは
VID = 0x0547 (Anchor Chips Inc.) PID = 0xFFFFを使用しています。PID に 0xFFFF を使用しているのは、 "EZ-USB Control Panel" と共存し、なおかつ、UZK として動作する時に OS 標準の HID デバイスドライバを使用するためです。
本ファームウェアで、MINI EZ-USB 上に「HID 複合デバイス」として 3つの デバイスを実現します。キーボードとして 1つ、マウスとして 1つ、制御用 として 1つ占有します。たとえば、Windows 2000 では、以下のような デバイスが出現します。
uart 接続された左右の MINI EZ-USB それぞれにこの 3つ、UZK 全体では 計の 6つのデバイスができますが、実際のデータの流れは以下に示す 4種類 のみ(左右で計 8種類)となります。以下の図では、左手が親 PC の UZK 制御 アプリケーション、右手が子 PC のつもりです。
1. キーストローク情報のパスヘッダ 'K' に付随して、USB キーボードの USAGE ID 8バイトを送ると、 それがそのまま子 PC のキーボードデバイスに転送されます。
2. キーボードの LED 制御情報のパス子 PC のキーボードデバイスが受け取った LED 制御 USAGE ID は、 ヘッダ 'L' に付随した 1バイトのデータとして読み出せます。
3. マウス情報のパスヘッダ 'M' に付随して、USB マウスの USAGE ID 8バイトを送ると、 先頭の 4バイトがそのまま子 PC のマウスデバイスに転送されます。
4. アプリケーション同士の情報交換のパスヘッダ 'C' に付随して送られた 8バイトのうち先頭の 1バイトが 子 PC の制御用デバイスに渡ります。このパスは親・子 PC の両方で アプリケーションを起動した場合にアプリケーション同士が コミュニケーションするために用意しましたが、いまのところ 使うあてはありません。
基本的には発売元であるオプティマイズの web ページ の 説明の通りなのですが、 私なりの解釈の結果、以下の手順で一度書き込んでしまった ROM を クリアしています。
- EEPROM の 5番ピン (SDA) を GND にショートさせる。
- USB ケーブルを接続する。(これで Cypress のドライバにて認識)
- そのまま EEPROM の 5番ピン (SDA) を開放する。(なにも変化はない)
- Vend_Ax.hex での手順をプログラムしただけの 先頭バイトをクリアする専用ファームウェアを EZ-USB Control Panel よりダウンロードして実行
- ROM 先頭番地の内容が無効になったところで、USB ケーブルを抜き、
- 再度 USB ケーブルを接続することで I2CS レジスタの認識も正しくなり、 「Load EEPROM が使えるようになる」
EZ-USB は、起動時に接続されたシリアル EEPROM が 1バイトアドレス 品なのか 2バイトアドレス品なのかを識別し、これを I2CS レジスタに 記憶しておく。EZ-USB Control Panel の EEPROM 関連の機能は、 このレジスタの内容によって EEPROM へのアドレスの供給バイト数を 自動選択するようになっている。
EEPROM を禁止したいがために 5番ピン (SDA) ショートした場合(上記 1)には、 I2CS レジスタ上は 1バイトアドレスの EEPROM という認識になり、 2バイトアドレスの 24LC64 へのアクセスができなくなる。 なのでまず強制的に 2バイトアドレスのアクセスで EEPROM の先頭を クリア(上記 4)し、 EEPROM 内容が無効になったところで再度 EZ-USB に EEPROM のアドレス長 の識別をさせる(上記 6)。「先頭バイトをクリアする専用ファームウェア」は こちらからどうぞ。 (とはいっても Vend_Ax のサンプルプログラムをとことん削っただけのものです)
- * - * - * -
開発中