/*
 * UZK - Keyboard & Mouse extender by USB
 *      (aka EZK on USB)
 *   by uratan! 2004.7.24
 *   revised 2007.3.25, 2007.7.10
 */

MINI EZ-USB のファームウェア

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 の両方で アプリケーションを起動した場合にアプリケーション同士が コミュニケーションするために用意しましたが、いまのところ 使うあてはありません。

一度書き込んでしまった ROM のクリア方法

基本的には発売元であるオプティマイズの web ページ の 説明の通りなのですが、 私なりの解釈の結果、以下の手順で一度書き込んでしまった ROM を クリアしています。

  1. EEPROM の 5番ピン (SDA) を GND にショートさせる。
  2. USB ケーブルを接続する。(これで Cypress のドライバにて認識)
  3. そのまま EEPROM の 5番ピン (SDA) を開放する。(なにも変化はない)
  4. Vend_Ax.hex での手順をプログラムしただけの 先頭バイトをクリアする専用ファームウェアを EZ-USB Control Panel よりダウンロードして実行
  5. ROM 先頭番地の内容が無効になったところで、USB ケーブルを抜き、
  6. 再度 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 のサンプルプログラムをとことん削っただけのものです)



- * - * - * -



        開発中


    uratan@st.rim.or.jp
upward