このページではUSBを使用したシステムを作るうえで最低限必要な項目を取り上げて説明します。USBのことを1から説明するとそれで1冊の本になりますのでここでは使い方(HOW TO)に関することだけを取り上げます。

<ホストとターゲット>
USBではPCをホスト、周辺機器(デバイス)をターゲットと呼びます。ホストは必ず1つ、ターゲットは複数存在しますが、基本的にはホストとターゲットの一対一の通信と考えて差し支えありません。


<ベンダIDとプロダクトID>
USBのデバイスには必ずベンダIDとプロダクトIDを持ちます。ベンダIDは周辺機器メーカーに割り振られるIDで,、たとえばメルコやSONYなど各社にユニークなID(番号)が割り振られています。従ってメルコがEZ-USBを使用した周辺機器を発売するときはメルコのベンダーIDを使うことになります。
ところがEZ-USBも実はCypress(旧アンカー社)のベンダーIDを持っていて、EEPROM(FWを格納)を接続しないでEZ-USBをPCに接続するとこのCypressのベンダーIDとして動きます。
とりあえず趣味でUSBを使いこなすのであれば独自のIDを使用せずにCypressのIDを使用したほうがいろいろとメリットがあります。(詳しくは後ほど)

プロダクトIDはベンダー(周辺機器メーカ)が自由に自社の製品に対して割り振ることが出来る番号です。ベンダーIDとプロダクトIDの組み合わせにより、どの周辺機器であるか特定できるわけです。


<デバイスドライバ>
WindowsなどのOSはUSBに接続された周辺機器と通信することにより(エンドポイント0を使用 エンドポイントは後述)どの周辺機器が接続されたかを特定して、その周辺機器をコントロールするためのデバイスドライバを選び出し(見つからないとデバイスドライバのインストール要求を出す)メモリーにロードして使用します。

つまりUSBを使用するためには必ずそのベンダIDとプロダクトIDに対応したデバイスドライバが必要になります。デバイスドライバの開発はなかなか大変ですので、このあたりがアマチュアが簡単にUSBを使いこなせない理由のひとつになっています。

MINI EZ-USBでは独自のベンダIDとプロダクトIDは使用しません。(別に使用してもかまいませんが、、。)つまり、CypressのIDのまま使用します。このためMINI EZ-USBを接続したときにOSにローディングされるデバイスドライバはCypressの開発キットに含まれているデバイスドライバになります。

従ってMINI EZ-USBをコントロールするためにはCypressのデバイスドライバをコントロールするだけで、独自のデバイスドライバを作成せずにすみます。(Cypressのデバイスドライバのソースも開発キットには収録されていますので、これを少し修正するだけで独自のベンダIDに対応するデバイスドライバを作り出すことも出来ます。)


<エンドポイント>
先ほどOSが接続された周辺機器を特定するためにエンドポイント0を使用すると言いました。そうです、USBの通信とはこのエンドポイントに対するやり取りそのものです。エンドポイントはホストとターゲットにそれぞれ存在するバッファのようなものです。

ホストからターゲットへデータを渡すにはまず、ホストが自分のエンドポイントにデータを書き込みます。ホスト側のUSBコントローラはターゲット側のエンドポイントが空(前回送ったデータをターゲットが読み出し終わっている状態)であれば、ターゲット側のエンドポイントにデータを書き込み、ホスト側のエンドポイントを空にします。

このホスト側のエンドポイントからターゲット側のエンドポイントまでの流れをパイプと呼びます。

ユーザが使用するパイプは双方向ではなく単方向です。デバイスからホスト方向をIN。ホストからデバイス方向をOUTと呼びます。USBはインテルとマイクロソフトが作った規格ですので、ホストを起点にイン・アウトを考えるのもうなずけます。

EZ-USBにはこのエンドポイントがIN、OUTともに7個ありIN1-IN7、OUT1-OUT7のように呼びます。各エンドポイントのサイズは64バイトで、64バイト以上のデータをやり取りする場合は分割してやり取りします。このエンドポイントをどのような目的に使うかはUSBを私用したアプリケーションの自由です。(全てを使用する必要はありません。)


<アプリケーションのスタイル>
EZ-USBに内蔵されるポートBを出力ポートに設定して、ホスト(PC)からコントロールする例を考えてみます。
ホストのプログラムが、Cypressのデバイスドライバに指示して、OUT1のエンドポイントに出力したいポートの値を書き込みます。
このデータはUSBケーブルで伝送され、EZ-USBのOUT1のエンドポイントのバッファに格納されます。
EZ-USBのFWはエンドポイントにデータが届いたことを認識しますので、このデータをバッファから取り出し、ポートBのポートアドレスに書き込みます。これでホストのデータがEZ-USBのポートに反映されたことになります。

USBを使用するアプリケーションはこんな感じで、ホストのPGMとターゲットのFWが対になって動きます。

EZ-USBの最大の特徴としてFWをROMとしてではなく、RAMとして持っています。そしてPCのアプリケーション(PGM)からFWを簡単にEZ-USBに転送して実行することが出来ます。

MINI EZ-USBはROMを実装するスペースを設けておりません。PCと接続して、PCからFWを転送して使用することを前提にしています。PCのアプリケーションにEZ-USBのFWを内蔵させ、PCのアプリケーション起動と同時にFWをEZ-USBに転送して実行します。(転送にかかる時間は数秒です)


<HID、ストレージクラス>
USBマウスやUSB接続のHDDなどは専用のデバイスドライバなどをインストールしなくても使用できます。
マウスやキーボードなどのHuman Interface Device(HID)やHDD(ストレージクラス)などは、あらかじめOS側に汎用のデバイスドライバのようなものが組み込まれており、それぞれの規格を満たすようにFWを作ることにより、ホスト側にデバイスドライバやアプリケーションを用意しなくても使用することが出来ます。

TeamKNOx氏の作られているULA−GP(ゲームボーイアドバンスをPCのジョイスティックとして使用)はEZ-USBをHIDとして使用しています。

このHPではHIDやストレージクラスに関しては詳しく述べませんが、EZ-USBを使いこなすひとつの方法ではあります。


(話を簡単にするためにバルク転送に限って説明しています。)