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 必要なもの
- SDCC(Small Device C Compiler)http://sdcc.sourceforge.net/
- Xcode 1.1に付属のサンプル・コード Ezload
- EZ-USBチップを搭載したボード
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を直接ドライブするのは無理があります。 そこで、次のようなドライブ回路を作成します。
なお、PRD-SM2の場合には、すでにPC2ピンにスマートメディアのアクセス表示用のLEDが接続されています。 別途、LEDを接続する必要はありません。 (本当は、たまたまPC2にLEDが接続されていたので、テストでそれを点滅させることにしたわけですが・・・)
Build the firmware ファームウェアの作成
ソース・コードのコンパイルとリンクを行います。 ファームウェアのソース・コードは、ここからダウンロードできます。
% sdcc led.c
Intel Hex形式のled.ihxというファイルができます。
Download the firmware ファ−ムウェアのダウンロード
ファームウェアのロードには、Ezloadコマンドを使用します。
% Ezload
と は、 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)となっています。
ロードするファームウェアのファイル名は、
と の値によって決まります。 たとえば、 として4660(= 0x1234)を として22136(= 0x5678)を指定した場合、 Ezloadはカレント・ディレクトリの12345678.HEXというファイルをロードします。 カレント・ディレクトリに12345678.HEXファイルがなかった場合には、 さらに環境変数HEXPATHまたはPATHに登録されたディレクトリでファイルを探します。ファームウェアのロードが完了すると、Ezloadは
と を持つ USBデバイスが検出されるのを待ち続けます。 デバイスが検出されると、 と で指定されたコマンドを 環境変数PATHに登録されたディレクトリで探し、それを実行しようとします。 たとえば、 として39083(= 0x98AB)を として52719(= 0xCDEF)を指定した場合、 98ABCDEFというコマンドが(もしあれば)実行されます。 ホスト側のデバイスとの通信プログラムをこの名前にしておくと、 ファームウェアのロード完了と同時にプログラムが起動することになるので、デバッグのときには便利です。今回のファームウェアは、LEDを点滅するだけで、ホストとの通信は行いません。 従って、ファームウェアのファイルは、あらかじめ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で動く回路図エディタが少ない中、このように完成度が高いフリーウェアを公開いただき、とても感謝しています。