EZ-USBの三つの起動モード

 EZ-USBの起動パターンは,シリアルROMの有無やシリアルROMのヘッダ情報によって,3通りの起動モードがあります.

● デフォルトモード
 デフォルトモードは,USBデバイスの開発用のモードといってよいでしょう(図7).シリアルROMがない場合,あるいはシリアルROMの先頭データがB0hやB2hでない場合にはこのモードになります.

〔図7〕デフォルトモード





 ベンダID,プロダクトIDなどはEZ-USBのデフォルト値となり,ホストからのダウンロードコマンドを受け付けられる状態になります.サイプレスのホームページから無償でダウンロードできる,EZ-USB開発ツールに含まれるダウンロード用のプログラムはこのID用になっているので,ターゲット用のアプリケーションを最初に作成するときは,このモードで動作させると便利でしょう.

 もっとも簡単な使い方としては,デフォルトモードで解放されているエンドポイントを利用するという方法があります.デフォルトモードの場合,三つのオルタネートセッティングがあります.各オルタネートセッティングと,解放されるエンドポイントの関係を表2に示します.

 オルタネートセッティング1や2の場合には,かなり多くのエンドポイントを使用できます.これらのエンドポイントへの応答部分だけを書けば,一応ホストとの間のデータ転送はできるようになります.ただ,コントロールエンドポイントを使ったコマンドなどは扱えないので,これはあくまでもエンドポイントの使い方の学習用という側面が強いでしょう.

 通常の使い方としては,ターゲットのプログラムの中で次のような処理を行います.

(1) いったんデバイスをUSBバスからディスコネクト状態にする(ホストからはターゲットのコネクタが抜かれたように見える)
(2) USBコントローラの制御レジスタを操作してセットアップパケットの処理をUSBコントローラ側で行わせずに,CPUが行うように設定する(USBCSレジスタのRENUMビットを‘1’にする)
(3) デバイスを再度USBバスに接続状態にする

 これによって,ホストは新しいUSBターゲットデバイスが接続されたと思い,GET_DESCRIPTORリクエストを発行してきます.今度はUSBコントローラは自動応答せず,CPUに処理を依頼します.CPUは新たなディスクリプタ情報をホストに送信することで,ベンダ独自のデバイスとして稼働し始めることになるわけです.

 ただし,このモードで使った場合,EZ-USBを使ったまったく別ファンクションのデバイスがあると,どのデバイスにどのプログラムをダウンロードすればよいのかわからなくなります.したがって,実際の製品では,次の2モードのうちのいずれかを利用することになると思います.

● B0hモード
 マニュアルでは,とくに動作モードの名称が示されていないので,ここでは仮にB0hモードと呼ぶことにしました.ターゲットのソフトウェアは,あくまでもホストからダウンロードして動かすという趣旨の機器を作るときに使われるモードです.シリアルROMのヘッダがB0hのときにこのモードになります(図8).

〔図8〕B0hモード




 USBコントローラは,シリアルROMからベンダID,プロダクトIDを読みとり,ホストからのGET_DESCRIPTORリクエストが来たときにこの値を返します.これによってデフォルトモードのときの問題を回避できるわけです.

 このモードで変更されるのは,あくまでもこれらのID情報だけなので,ベンダリクエストによるプログラムのダウンロード/アップロードなどの機能はそのままです.

 通常はデフォルトモードと同様,この状態でソフトウェアをダウンロードした後,別のベンダ/プロダクトIDのターゲットデバイスとして稼働することになるでしょう.

● B2hモード
 前の二つのモードとは異なり,こちらはソフトウェアをホストからダウンロードせずに動かすものです.他のUSBコントローラ+マイコンという構成と同じと考えればよいでしょう.シリアルROMのヘッダがB2hのときにこのモードになります(図9).

〔図9〕B2hモード




 シリアルROMの中はB0hモードのUSB経由で送られるときと同様に,ダウンロード先のアドレスやサイズ,そしてデータが格納されています.USBコントローラ部分がこれを読み出して,内部RAMに転送し,CPUのリセットを解除するという仕組みです.


◆ はじめに
◆ EZ-USBの特徴

◆ EZ-USBの三つの起動モード

◆ EZ-USBのエンドポイント構成
◆ EZ-USBの割り込み処理

コラム サイプレス製USBコントローラの系譜

1月号特集トップページへ戻る


Copyright 2001 桑野 雅彦