MacOS XでCypress EZ-USB

About Cypress EZ-USB Cypress EZ-USBについて

Cypress AN2131SC/2135SC(通称、EZ-USB)は、電子工作ファンの間で人気があるUSBコントローラ搭載のワンチップCPUです。 EZ-USBは、ファームウェアをROMではなく、チップ内蔵のRAMに格納します。 そして、USBインターフェースを通じて、ホストからファームウェアをRAMへダウンロードして実行するのが特徴です。 特殊なライターを必要とせず、USBインターフェースさえあれば手軽にファームウェアを開発できるのが人気の理由でしょう。

しかし、Cypressから提供されているEZ-USB開発キットは、Windows版のみしかありません。 ここではMacOS X上でEZ-USBのファームウェアを作成した例を紹介したいと思います。 Cypressから提供されている開発キットではなく、 オープン・ソースの組み込み向けクロスCコンパイラ(SDCC)とAppleが配布するサンプル・ローダ(Ezload)を使用します。

Ingredients 必要なもの

How to install SDCC SDCCのインストール

SDCCをソース・コードからビルドしてもいいのですが、 MacOS X版のバイナリ・パッケージが 用意されているので、それを利用するのが簡単です。 なお、SDCC 2.4.0のバイナリ・パッケージに含まれるINSTALL.TXTには、 解凍したパッケージの中身を/usr/localへコピーするように記載されています。 しかし、MacOS X版のバイナリ・パッケージの場合には、/Developer/SDCCへコピーするのが正解のようです。 次のコマンドでパッケージの解凍とコピーを行います。

 % tar zxvf sdcc-2.4.0-macosx.tar.gz
 % sudo mkdir /Developer/SDCC
 % sudo cp -rp sdcc/bin sdcc/share /Developer/SDCC

あとは、shellの実行時パスに/Developer/SDCC/binを追加します。 MacOS X 10.3の場合、標準のlogin shellはbashですから、~/.bash_profileまたは~/.profileに次の行を追加します。

 PATH=$PATH:/Developer/SDCC/bin

Build Ezload Ezloadのビルド

Ezloadは、SDCCで作成したファームウェアのIntel Hex形式ファイルをUSBインターフェースを通じて、 EZ-USBへダウンロードするコマンド・ライン・ツールです。 Xcodeのサンプル・コードの一部として、Appleより配布されています。 Xcodeをインストールすると、/Developer/Examples/IOKit/usb/Ezloader Exampleディレクトリに、 Ezloadのプロジェクトとソース・コードが格納されます。 このプロジェクトをXcodeでビルドし、Ezloadを作成します。 ビルドしたら、Ezloader Example/build/Ezloadファイルを/Developer/SDCC/binへコピーしておきます。

Prepare the hardware ハードウェアの用意

まず、EZ-USBチップが必要です。 EZ-USBを使用したワンボードのキットがいくつか市販されています。 MINI EZ-USB(オプチマイズ)AN2131SC基板(IPI)などが代表的なものです。 こうしたキットなら、比較的容易に入手できると思います。

また、市販のUSBデバイスの中には、コントロール用のチップとしてEZ-USBを採用しているものがあります。 こうした市販のデバイスを流用する方法もあります。 私も、EZ-USBを搭載したプリンストン・テクノロジのスマートメディア・カードリーダ(PRD-SM2)を利用しました。 旧製品ということで、格安(980円)で 入手することができました。 ただし、すでに後継機のPRD-SM3が発売されているので、今後はPRD-SM2の入手は困難となっていくと思われます。 (こちらのページによると、 後継機のPRD-SM3はEZ-USBを使用していないので、今回の目的には使えないらしいです。)

さて、ここでは例として、EZ-USBチップのPC2ピンへ接続したLEDを点滅させるファームウェアを作ってみたいと思います。 EZ-USBのPCポートの最大出力電流は1.6mAしかないので、LEDを直接ドライブするのは無理があります。 そこで、次のようなドライブ回路を作成します。

LEDのドライブ回路

なお、PRD-SM2の場合には、すでにPC2ピンにスマートメディアのアクセス表示用のLEDが接続されています。 別途、LEDを接続する必要はありません。 (本当は、たまたまPC2にLEDが接続されていたので、テストでそれを点滅させることにしたわけですが・・・)

Build the firmware ファームウェアの作成

ソース・コードのコンパイルとリンクを行います。 ファームウェアのソース・コードは、ここからダウンロードできます。

 % sdcc led.c

Intel Hex形式のled.ihxというファイルができます。

Download the firmware ファ−ムウェアのダウンロード

ファームウェアのロードには、Ezloadコマンドを使用します。

 % Ezload vendorID productID vendorID2 productID2

vendorIDproductIDは、 EZ-USBチップの初期状態(ファームウェア・ロード前の状態)のベンダーIDとプロダクトIDです。 このIDでUSBバスに接続されている複数のデバイスの中からEZ-USBを識別します。 初期状態のEZ-USB(AN213xシリーズ)では、ベンダーIDとプロダクトIDは、それぞれ1351(= 0x0547)と8497(= 0x2131)となっています。 EZ-USBを使用したキットでは、この値のままとなっているものが多いはずです。 一方、PRD-SM2のような市販のデバイスでは、EZ-USBに接続したシリアルROMによって、そのデバイス独自のIDが設定されています。 PRD-SM2では、ベンダーIDとプロダクトIDは、それぞれ1996(= 0x07CC)と3(= 0x0003)となっています。

ロードするファームウェアのファイル名は、 vendorIDproductIDの値によって決まります。 たとえば、vendorIDとして4660(= 0x1234)を productIDとして22136(= 0x5678)を指定した場合、 Ezloadはカレント・ディレクトリの12345678.HEXというファイルをロードします。 カレント・ディレクトリに12345678.HEXファイルがなかった場合には、 さらに環境変数HEXPATHまたはPATHに登録されたディレクトリでファイルを探します。

ファームウェアのロードが完了すると、EzloadはvendorID2productID2を持つ USBデバイスが検出されるのを待ち続けます。 デバイスが検出されると、vendorID2productID2で指定されたコマンドを 環境変数PATHに登録されたディレクトリで探し、それを実行しようとします。 たとえば、vendorID2として39083(= 0x98AB)を productID2として52719(= 0xCDEF)を指定した場合、 98ABCDEFというコマンドが(もしあれば)実行されます。 ホスト側のデバイスとの通信プログラムをこの名前にしておくと、 ファームウェアのロード完了と同時にプログラムが起動することになるので、デバッグのときには便利です。

今回のファームウェアは、LEDを点滅するだけで、ホストとの通信は行いません。 従って、vendorID2productID2は指定する必要はありません。 ファームウェアのファイルは、あらかじめ07CC0003.HEX(PRD-SM2の場合)というファイル名にリネームして、 カレント・ディレクトリへコピーしておきます。 そして次のコマンドで、ファームウェアのロードを行います。

 % Ezload 1996 3

ロードは、ほぼ瞬時に完了します。完了と同時に新しいファームウェアがスタートして、LEDの点滅がはじまります。

Go to the next step 次のステップ

EZ-USBを使って、USB接続の赤外線リモコン受信機を制作しました。 市販のビデオ用リモコンからの赤外線信号を受信すると、 あらかじめ登録しておいたMacOS XアプリケーションやAppleScript Appletを起動します。 リモコンからiTunesを制御・・・とか、CSチューナーの赤外線リモコン機能を使って自動録画・・・なんてことができます。 この赤外線リモコン受信機は、近日中に制作記を公開したいと思っています。

赤外線リモコン受信機の写真

References 参考資料

Cypress Semiconductor Corporation
EZ-USBのメーカーであるCypressのサイト。データシートなどの技術資料を配布しています。
The EzHID Firmware Project
EZ-USBとSDCCを使って、いろいろな入力装置をUSBバスに接続するプロジェクト。 SDCCによる開発サンプルとして参考にさせていただきました。
8052.com
EZ-USBはIntelの組み込み用プロセッサ8051互換の CPUコアを搭載しています。この8051およびそのメモリ拡張版である8052に関する総合サイト。 8051/8052のチュートリアルは、わかりやすくまとまっています。
X1リソースセンター
私がEZ-USBを試してみるきっかけとなったサイト。 こちらのページでPRD-SM2にEZ-USBが 使われていることを知りました。 またこのサイトでは、独自の解析に基づくPRD-SM2の回路図も公開されていて、たいへん参考になりました。
水魚堂
フリーウェアの回路図エディタBSchの開発者の方のサイトです。 このページに掲載した回路図は、MacOS X版のQt-BSch macを使って作成しました。 MacOS Xで動く回路図エディタが少ない中、このように完成度が高いフリーウェアを公開いただき、とても感謝しています。
作成:2004年6月3日,最終更新:2006年1月27日, © 2004,2005 raktajino,All rights reserved. raktajino@mac.com