FX2 USB 2.0
更新履歴


FX2専用掲示板はこちらです

USB 2.0は480Mbpsと非常に高速なインターフェイスです。PCの標準インターフェイスのUSB1.1の上位コンパチブルですので、今後マザーボードのチップセットに標準で搭載されることにより急速に広まると考えられます。

マニアのハード工作のレベルでは、USB1.1の10Mbpsで十分なような気もしますが、そんなことを言っていては時代に取り残されてしまいます。今回使用するチップは「カメレオンUSB」でおなじみのCypress社が作ったEZ-USB FX2チップを使用しています。

EZ-USBはマニアの間ではすっかり定着したUSB1.1用のチップですが、FX2はこのEZ-USBをUSB2.0に対応させたものになります。EZ-USBで好評を博していた、ファームウエアをチップのRAMにダウンロードさせて実行させる機能、接続したまま別のデバイスとしてPCのOSに認識させるリナムレーション機能などは健在です。そして忘れてはいけないのが開発ツール(ドキュメント)の入手のしやすさです。FX2チップに関してもすでに、CypressのHPで誰でも入手することが出来ます。(やはりこれがCypressがマニアに支持される最大の理由だと思います)

FX2チップではGPIFやFIFOといった機能が最大の売りです。USB2.0の480Mbpsという速度の中では、通信データをCPUが介在してやりとりを行うのは得策ではありません。このクラスの速度をまともにCPUで処理するためには何百MHzの高速なCPUを用意しなくてはなりません。これではコストアップ、消費電力アップにつながるためPCの周辺機器としての役割を担うUSBには不向きになってしまいます。
そこでCypressの取った方法は「通信データをなるべくCPUに介在させずに(必要なら介在も出来ます)外部のインターフェイスに渡してしまう」という方法です。そのために必要な仕組みがFIFOでありGPIFです。

FIFOは先入れ先出しのバッファのことでUSBのケーブルから来たデータをバッファにためて、外部に渡すためのものです。FX2チップをこのようなバッファとみなして使うことが出来ます。FIFOバッファの容量が空いている間は外部回路の処理が遅れても、伝送の遅延にはつながりません。FIFOとしてFX2チップを使用する場合はFX2チップの外部にFIFOをコントロールするロジックやCPUが必要になります。

FX2チップをFIFOとして使用するのもひとつの方法ですが、外部に別のロジックを必要とするのでは結局全体でのコストアップになってしまい、専用のUSB2.0-ATAブリッジチップなどと勝負にならなくなってしまいます。
そこで登場するのがGPIFです。GPIFは汎用(General)目的(Purpose)インターフェイス(InterFace)のことで、入力・出力信号を持つステートマシンです。ステート遷移のタイミングをCPUでプログラミングすることが出来るのでATA(IDE)やSCSIといったインターフェイスを実現することが出来ます。FX2を使いこなすということは、このGPIFを使いこなすことです。私もこの辺はまだ勉強中ですがかなり色々なことが出来そうで、マニアにとってはやりがいのあるチップです。


<FX2 USB 2.0ボード>

前置きが長くなりましたが、FX2のボードを設計するにあたって何を考慮する必要があるのでしょうか? GPIFを使ってどの程度のことが可能なのでしょうか? CPLDなどのロジックデバイスは要らないのでしょうか?
正直言ってまだそのあたりを評価出来るまでのレベルに私が達していません。というわけですので、今回のボードはFX2チップのみで構成することにしました。別の基板などにアドオンして使用することを想定しています。
使用するチップはFX2シリーズの中の最上位チップで128ピンのCY7C68013-128ACを使用することにしました。ピン数の少ないチップと比べて多少割高ですが、FX2を使うのも初めてですし、今後長く使うことを考えれば無駄にはならないでしょう。ピン数の少ないチップは、FIFOのコントロール信号やI/Oが少なく、アドレス・データバスはありません。
EEPROMをボードに搭載するかどうか多少迷いましたが、ROMはアドオンされる側のボードに搭載すれば済みますし、FX2チップが高価ですのでFX2の基板ごとROMが乗った基板に差して使ったほうが経済的なので搭載はやめました。(サイズも小さくしたいし)
ボードはこんな感じです。FX2のピンは全ピン引き出してあります。FX2のチップは0.5mmピッチですのではんだ付けには気合(笑)を入れてください。基板屋さんはカメレオンUSBと同じところで作ってますのでクオリティーも悪くないです。チップのランドは広くとっており、予め付着しているはんだも多いようなので、道具さえ揃えて臨めばそれほど難しくはないと思います。(ここを参照) 3.3Vレギュレータは1A取れるものを使用しています。他の用途にも使えますが、AN2135(EZ-USB)と比較してかなり消費電力が増えていますのでご注意ください。外部接続用のピンヘッド(40P*3)を基板の下に取り付けてありますが、お好みで上に取り付けても良いでしょう。基板上のジャンパは5V電源をUSBのコネクタからとるか、ピンヘッド側から取るかを切り替えます。通常は2−3をショートでUSBから取ります。

キット価格は6000円です。チップの入手価格がもう少し安くなれば値下げできると思います。
注文はこちらからお願いします。

<回路図>

ダウンロード(BSch用回路図データ)

FX2_USB.CE2
OPTIMIZE.LIB(パーツライブラリ)

<製作>

キットが届きましたら部品を確認してください。
(FX2チップは基板にセロテープで接着されています。基板からはがす時にチップのピンを曲げないように、先の細いもので慎重にはがしてください。ピンを曲げてしまった場合はルーペなどで確認しながら整形してください。)

部品 備考
専用プリント基板 1  
FX2(CY7C68013-128AC) 1 極性あり
レギュレータ(IRU1206-33) 1 極性あり
24MHz クリスタル 1  
USB−Bコネクタ 1  
ジャンパ用3Pヘッダ 1  
ジャンパピン 1  
40Pピンヘッダ(メス) 3  
糸はんだ 1  
電解コンデンサ 2.2uF 1 極性あり
電解コンデンサ 33uF 2 極性あり(47uF でも可)
チップコンデンサ .1uF 11 予備を1つおまけ
チップコンデンサ 22pF 2  
チップ抵抗 2.2KΩ 2 222
チップ抵抗 10KΩ 3 103
チップ抵抗 100KΩ 1 104

部品がそろっていたらいよいよ製作開始です。
手順としては


<動作確認>

動作確認にはFX2に対応したCypressのデバイスドライバ、ツール(EZ-USBコントロールパネル)などをPCにインストールする必要があります。「カメレオンUSB」の時にインストールしたツールでも、EZ-USBコントロールパネルの上部のTargetで"FX2"が選択できるものであればそのまま使えます。古いバージョンの人は新しいものをインストールしてください。「カメレオンUSB」は新しいドライバ、ツールでも問題なく動作します。(Targetは"EZ-USB & FX"に変更する必要はあります。)

ダウンロードしてくるファイルはFX2用の開発キット(SDK)に含まれるソフトウエアで、Cypressのここのページのソフトウエアをダウンロードしてきます。

このソフトをインストール(OSはWin98,Me,2000,XPで動きます)した後、作成したボードをPCに接続します。USB2.0のインターフェイスに接続するのが良いのですが、USB2.0の無いPCではUSB1.1に接続しても動作確認は行えます。

SDKにはbulkloopというサンプルが含まれており、これをFX2にダウンロードして動くことを確認します。SDKに含まれるbulkloopのHEXファイルは、SDK専用のボードで動くようにコンパイルされているため、リンクアドレスを変更して再コンパイルする必要があります。昔のEZ-USBのSDKにはKeilの評価版のコンパイラがついていたのですが、現在のSDKにはありません。仕方がないので、私がリンクしなおしたものをここに置いておきますので、こちらを使用してください。

PCに接続して、EZ-USBのコントロールパネルを起動します。

こんな画面が出ればFX2がちゃんとPCから認識されています。
画面上の中央の"Target"が"FX2"になっていることを確認してください。
そして、先ほどダウンロードしたbulkloop.hexを"Download"ボタンでFX2にダウンロードします。
ダウンロード完了後、"GetPipes"ボタンを押すとループバック用の4本のパイプが表示されるはずです。
これで、FX2のCPUを含め、正しく動作していることが確認できました。


更に完璧なテストをしたい人は、この状態でc:\cypress\usb\bin\bulkloop.exeを起動し、"Out Pipe"に"0"、"In Pipe"に"2"を入力して、"Start"ボタンを押してください。"Pass"の項目がカウントアップされ、"Errors"が"0"のままでしたらOKです。このテストは実際にPCからテストデータをパイプ0を使ってFX2に伝送し、FX2からパイプ2を使ってPCにデータ送り返す(ループバック)テストをするものです。データの誤りが無ければPassをカウントアップします。


<USB−ATAブリッジの作成>

Cypress社ではFX2のリファレンス(評価用)キットとしてUSB−ATAブリッジを提供しています。

こちらからダウンロードできますのでダウンロードしてください。
このリファレンスキットはFX2のGPIFを使いこなしているといった意味でも非常に重要なもので、もちろんソースコード、回路図、バイナリイメージなど必要なものは全てそろっています。(個人的にはFX2のSDKの方でももっとGPIFのサンプルコードを充実させて欲しいと感じています。)
このリファレンスキットで使用しているのはCY7C68013-56というFX2シリーズの中で最もピン数の少ない56ピンタイプのもので、ATAブリッジのために作ったのではないかと思えるくらいコンパクトなチップです。CY7C68013-128ACは上位コンパチなので、このキットに含まれるバイナリもそのまま利用できます。

とりあえず最小のコストで、「USB−ATAブリッジ」を実験してみるためにこんなものを作って見ました。
IDEケーブルが無くても、ダイレクトにHDDと接続できます。材料費は300円程度ですので、ひとつ作っておくと便利です便利です。

回路図は

回路図ダウンロードはこちら

使い方は簡単で、FX2基板と変換基板、HDDを合体させてHDDの電源を供給すればOKです。
変換基板上にEEPROM(24LC64)をオプションで搭載できますので、EZ-USBのコントロールパネルで、
リファレンスキットに含まれるiicファイルを焼きこんで使えます。
EEPROMを使わない場合はhexファイルをEZ-USBのコントロールパネルでダウンロードすればOKです。
WinMe以降のOSであれば、デバイスドライバすら組み込まずにHDDがOSに認識されるはずです。

手持ちで専用のチップを使ったUSB2.O-ATAブリッジがあったのでこちらとベンチマークツールを使って速度を比較してみました。結果は読み込みに関してはFX2チップの方が5割程度高速という結果が出ました。もっとも計測の条件などで結果がすぐに変わってしまうのであまり鵜呑みには出来ません。


秋葉あたりでは、電源付きのUSB2.O-ATAブリッジが1万円以下で売られていますので、FX2チップをATAブリッジ専用として使用するのはもったいないです。OSの入れ替えなどでちょっと外付けのHDDが使いたい場合などには便利かもしれません。

FX2の真価を発揮できるのは、秋葉などには売っていないオリジナルなUSB2.0の機器を開発することです。
残念ながら私もアイデアはあるのですが、今のところまだ皆様にお見せできる段階に至っておりません。
ただ間違えなく言えるのはUSB2.0は確実に普及するであろうということです。USB1.1に満足してしまっては進歩はしません。習うより慣れろです。まずは何か作ってみることです。面白いものができたら是非声をかけてください。

今回時間の関係で出来ていない部分は
・KeilのCコンパイラが使えないので(評価版は4Kまでで、ATAブリッジなどは8K近く使っている)SDCCなどの環境に移行して、自由に開発できる環境を整える。
・「カメレオンUSB」などで用意したようなライブラリをFX2にも用意する。
といったことがあります。時間があればやってみたいのですが、どなたかパワーのあるかたチャレンジしてみませんか?


オプティマイズトップに戻る