アプリケーションノート 3661

MAX3420Eの割込みシステム


要約: MAX3420Eは、マイクロコントローラなどのあらゆるSPIマスタにUSB周辺機器の機能を付加します。MAX3420Eの動作は、主として割込み要求(IRQ)ビットによって決定されます。このビットを通じて、USBイベントがサービスを要求していることをSPIマスタに通知します。このアプリケーションノートでは、MAX3420Eの割込みシステムおよび各割込み要求ビットについて説明します。

はじめに

MAX3420Eを任意のSPIマスタに接続することで、フルスピードのUSB周辺機器が実現します。MAX3420が低レベルのUSB信号を処理しますが、ときには、USBイベントがアテンションを要求したときにSPIマスタが関与しなければならない場合があります。MAX3420上のINTピンが、アテンションが要求されていることを通知します。SPIマスタは、14の割込み要求ビットを読み出して、どの割込みがサービスを要求しているかを判断します。これらの割込み要求(IRQ)ビットが主として、MAX3420Eの動作を決定します。


注:SPIマスタは、SPIポートを実装可能でSCLK信号を出力することができるものであれば、マイクロコントローラ、DSP、ASICなど、あらゆるものが使用可能です。このアプリケーションノートでは、「SPIマスタ」と「マイクロコントローラ」という用語を同義で使用しています。

MAX3420Eの割込みロジック

図1. MAX3420Eの割込みロジック。レジスタビットは網掛けで表わしています。
図1. MAX3420Eの割込みロジック。レジスタビットは網掛けで表わしています。

図1は、MAX3420Eの割込みロジックを示しています。SPIがアクセス可能なレジスタビットは、網掛けで表しています。

IRQビット
各割込みソースには、サービス要求をラッチするための1個のフリップフロップが備わっています。このフリップフロップの出力がIRQであり、MAX3420Eのレジスタに送出されます。IRQビットには、以下の2つの特性があります。

  1. IRQビットを読み出すと、IRQフリップフロップの状態が返されます。
  2. IRQビットに「1」を書き込むと、そのIRQフリップフロップがクリアされ、「0」を書き込むと、フリップフロップはそのままの状態で変更されません。
IRQビットは、いつでも読出し可能で、IRQフリップフロップの状態を反映します。上記の項目2にしたがって、1または0を書き込むと、選択されたIRQビットは、「読出し-変更-書込み」サイクルを必要とせずにクリアされます。たとえば、MAX3420EがIRQビットを単純なレジスタビットとして実装しているものとします。この場合、1を書き込むとビットがセットされ、0を書き込むとビットがクリアされます。ここで、USBIRQレジスタのURESIRQビットをクリアしたいものとします。図2は、これを実行するコードを示しています。

図2. 通常ののレジスタビットをクリアするには、RMW動作が必要です。
図2. 通常ののレジスタビットをクリアするには、RMW動作が必要です。

SPIマスタは、1を書き込むことによってMAX3420EのIRQビットをクリアするため、また、0を書き込むことによって他のレジスタビットを変更せずにそのまま残すため、直接ビットマスク値を書き込むことによって、URESIRQビットをクリアすることができます。したがって、図2の最後の3行のステートメントを図3の1行のステートメントに置き換えることができます。

図3. MAX3420E IRQビットは、レジスタの1回の書込みだけでクリアされます。
図3. MAX3420E IRQビットは、レジスタの1回の書込みだけでクリアされます。

IENビット
MAX3420Eの14の割込みにはそれぞれ、対応する割込みイネーブル(IEN)ビットがあります。IENビットはIRQフリップフロップ出力とAND演算され、これによって要求がINTピンに伝達されることを許可するか、あるいは阻止します(図1)。14のIRQフリップフロップの動作がゲート制御された後、ともにOR演算されて、1つの内部割込み要求信号が形成され、これが、割込みピンのロジックブロックに渡されます。

注意すべき点は、IRQビットは、IENビットの状態に関係なく割込みの保留状態を示すということです。これによって、ファームウェアは、INTピンをトリガすることなく保留状態の割込みの有無を自由に確認することができます。作成したコードが、IRQレジスタをチェックして「nothing pending(保留なし)」の有無を確認する必要があるとき、簡単な解決方法は、IRQとIENレジスタを読み出して、これらをAND演算した後、“1”のビットをチェックすることです。”1”のビットは未処理で割込み可(イネーブル)である事を示します。0の値は、イネーブルされる割込みが保留されていないことを示します。

IEビット
SPIマスタは、IEビットを用いてINTピンをイネーブルまたはディセーブルにします。これは、すべての割込みに影響を与えるため、しばしば、グローバル割込みイネーブルと呼ばれます。INTピンは、IRQまたはIENのビットの状態に関係なく、IE = 0のときに非アクティブになります。

割込みピンのロジック
2つのレジスタビット、INTLEVEL(以下の説明を参照)とPOSINTが、INTピンの動作を制御します。これらの構成ビットは、IE = 1をセットする前にセットするようにしてください。

レベルモード、INTLEVEL = 1
一部のマイクロコントローラシステムは、レベルセンスのアクティブロー割込みを使用しています。この構成では、MAX3420Eは、オープンドレイントランジスタをグランドに接続してINTピンを駆動します。このピンは、ローにのみ駆動可能であるため、INTピンとロジック電源の間にプルアップ抵抗を接続します。このモードを使用すると、複数のチップからのINTピン出力(それぞれがオープンドレイン出力を備える)をともに結んで1つの抵抗器でプルアップすることができます。チップ出力のすべてがピンをローにプルダウンするため、このロジックは、「ワイヤードOR」と呼ばれることもあります。このタイプのシステムでは、INTLEVEL = 1にセットします。

エッジモード、INTLEVEL = 0 (デフォルト値)
MAX3420E INTピンは、エッジアクティブな割込みシステムでの駆動も可能です。この場合、マイクロコントローラは、その割込み入力ピン上で、0から1または1から0への遷移を見ます。これは、MAX3420Eのデフォルトのモードであり、INTLEVEL = 0となります。SPIマスタは、2番目のビットであるPOSINTを用いてエッジの極性を設定します。POSINT = 1のとき、MAX3420Eは、割込み処理待機状態の場合に0から1への遷移を出力します。POSINT = 0 (デフォルト値)のとき、MAX3420Eは、割込み処理待機状態の場合に1から0への遷移を出力します。

図1より、以下の点がわかります。

  1. IRQビットがセットされ、対応するIENビットがクリアされている場合、そのIRQは、INT出力ピンに影響を与えません。ただし、割込み処理待機状態のままです。その状態は常にIRQビットで読むことが可能で、また対応するレジスタビットに1を書き込むことによってクリアすることができます。
  2. 保留状態の割込み(IRQビットは1)は、IENビットが0から1への遷移を出力すると、割込みが発生します。
  3. マイクロコントローラの割込みシステムにINTピンを接続することができます。また別の方法として、マイクロコントローラがINTピンをポーリングして、MAX3420Eの割込みが保留にされているかどうかを確認することもできます。ポーリングで使用する最適なモードは、レベルモード(INTLEVEL = 1)です。エッジモードでは、マイクロコントローラが確認するには、INTピンの出力パルスが狭すぎる可能性があるためです。レベルモードでは、INTピンからVLへのプルアップ抵抗が必要であることに留意してください。

INTピンの波形

レベルモード

図4. レベルモード(INTLEVEL = 1)におけるMAX3420E INTピンの動作
図4. レベルモード(INTLEVEL = 1)におけるMAX3420E INTピンの動作

図4は、レベルモードにおけるMAX3420E INTピンの波形を示しています。INTピンの休止状態はハイです(VLにプルアップされています)。 図の2つの割込みのIENビットが1にセットされ、またグローバルIEビットが1にセットされていると仮定すると、以下のイベントが発生します(以下のa,b,c…の各項目は、図4に説明されたa,b,c…の各イベントに対応します)。

  1. 割込み要求が到着し、MAX3420E INTピンがローに駆動されます。


    注:MAX3420Eの割込み出力ピンはINTピンと呼ばれていますが、極性が負の場合もあります(レベルモード時など)。
  2. SPIマスタは割込みサービスを終了し、1を書き込むことによってIRQビットをクリアします。INTピンはハイの休止状態に戻ります。(a)と(b)の間の間隔は、割込みがIRQビットをアサートしてから、SPIマスタがIRQビットをクリアするまでの時間です。
  3. 別の割込み要求が到着し、INTピンがローに駆動されます。
  4. 最初の割込み要求が保留にされている間に、2番目の割込み要求が到着します。少なくとも1つの割込みが保留にされているため、INTレベルは変わりません(実際には、この時点で2つが保留にされています)。
  5. SPIマスタは、保留状態の割込みのうちの1つのサービスを終了し、1を書き込むことによってそのIRQビットをクリアします。1つの割込みがまだ保留状態であるため、INTピンはローのままです。
  6. SPIマスタは、残りの割込み要求のサービスを終了し、1を書き込むことによってそのIRQビットをクリアします。保留状態の割込みは存在しないため、INTピンは、ハイの休止状態に戻ります。

注:割込みは、そのIRQフリップフロップ(図1)がセットされている場合に、処理待機状態と見なされます。

このロジックは、INTピンをポーリングするのに最適です。MAX3420E内のいずれかがサービスを要求し、その割込みがイネーブルになった場合、INTピンはローになります。マイクロコントローラが、保留状態にある最後のIRQビットをクリアするまで、INTピンはローのままです。

エッジモード

図5. エッジモード(INTLEVEL = 0)でのMAX3420E INTピンの動作。間隔(1)は、SPIマスタがIRQをクリアするのに要する時間で、間隔(2)は10.67µsです。
図5. エッジモード(INTLEVEL = 0)でのMAX3420E INTピンの動作。間隔(1)は、SPIマスタがIRQをクリアするのに要する時間で、間隔(2)は10.67µsです。

図5は、エッジモードでのMAX3420EのINTピンの波形を示しています。POSINTビットによって2つの波形のどちらで動作するかを選択することができます。この波形は、レベルモードにおける波形によく似ていますが、2つの違いがあります。INTピンは、次の2つの条件下でエッジを生成します。

  1. IRQビットがアクティブになる(そのIRQフリップフロップが0から1に遷移する)。
  2. プロセッサが(1を書き込むことによって)IRQビットをクリアし、他のIRQが処理待機状態にある。

2番目の条件では、サービスが引き続き要求されているときは必ず、プロセッサがエッジを取得します。

INTピンは、エッジを生成することができることに加えて、レベルモードの場合とまったく同様のアクティブ状態と非アクティブ状態を備えています。INTピンの非アクティブ状態は、POSINTビットが設定するエッジの極性に依存します。この点に関して、エッジモードはレベルモードによく似ており、以下に示すようにINTピンの状態を調べることによって、保留にされている割込みがあるかどうかを知ることができます。

  • 負のエッジモードでは、保留にされている割込みがなければ、INTピンはハイになります。保留にされている割込みがあれば、ローになります。
  • 正のエッジモードでは、保留にされている割込みがなければ、INTピンはローになります。保留にされている割込みがあれば、ハイになります。

以下の説明では、INTピンの状態をアクティブまたは非アクティブと呼んでいます。アクティブとは、少なくとも1つの割込みが保留にされていることを意味し、非アクティブとは、保留にされている割込みがないことを意味します。この場合も、割込みがイネーブルになっていると仮定すると、以下のイベントが発生します(以下の各項目は、図5に説明された各イベントに対応します。)
  1. 割込み要求が到着し、MAX3420E INTピンがエッジを生成します。エッジの極性は、POSINTビットの設定により決まります。割込みはまだ保留にされているため、INTピンはアクティブ状態のままです。
  2. SPIマスタは割込みサービスを終了し、1を書き込むことによってIRQビットをクリアします。MAX3420E INTピンは、非アクティブモードに戻ります。図の(a)と(b)の間の間隔(1)は、割込みがアサートしてから、SPIマスタがIRQビットをクリアするまでの時間です。
  3. 別の割込み要求が到着し、MAX3420E INTピンがエッジを生成し、アクティブ状態に留まります。
  4. 最初の割込み要求が保留にされている間に、2番目の割込みが到着します。MAX3420E INTピンは、別のエッジを生成する必要があるため、非アクティブとアクティブ状態の間でパルスを出力し、正しい極性のエッジを生成します。MAX3420Eでは、このパルス幅は10.67µsに固定されています。割込みが保留にされているため、INTピンはアクティブ状態に留まります。
  5. SPIマスタは、保留状態の割込みの1つのサービスを終了し、1を書き込むことによってそのIRQビットをクリアします。INTピンは、手順(d)の場合と同様、別のエッジを生成します。
  6. SPIマスタは、残りの割込み要求のサービスを終了し、1を書き込むことによってそのIRQビットをクリアします。保留状態の割込みは存在しないため、INTピンは、非アクティブ状態に戻ります。

割込みレジスタ

表1. 網掛けのMAX3420Eレジスタビットによって割込みシステムを制御

MAX3420Eは2組のUSB割込みを備えており、表1の網掛けされたレジスタによって制御されます。割込みビットは、EPIRQ(R11)とEPIEN(R12)内のEndPoint制御用、およびUSBIRQ(R13)とUSBIEN(R14)内のUSB制御用にグループ分けされます。グローバルIEビットは、CPUCTLレジスタ内にあります。

表2. MAX3420Eの14の割込みソース

Bit Name Default Location Set By Cleared By
IN0BAVIRQ 1 EPIRQ.0 EP0 FIFO is ready for µP loading Load the EP0BC register
OUT0DAVIRQ 0 EPIRQ.1 EP0-OUT FIFO has host data Write EPIRQ = 0x02
OUT1DAVIRQ 0 EPIRQ.2 EP1-OUT FIFO has host data Write EPIRQ = 0x04
IN2BAVIRQ 1 EPIRQ.3 EP2-IN FIFO is ready for µP loading Load the EP2INBC register
IN3BAVIRQ 1 EPIRQ.4 EP3-IN FIFO is ready for µP loading Load the EP3INBC register
SUDAVIRQ 0 EPIRQ.5 Setup Data is available in SUDFIFO Write EPIRQ = 0x20
OSCOKIRQ 0 USBIRQ.0 MAX3420E Oscillator/PLL is stable Write USBIRQ = 0x01
RWUDNIRQ 0 USBIRQ.1 SIE has finished signaling RWU Write USBIRQ = 0x02
BUSACTIRQ 0 USBIRQ.2 Bus is active Write USBIRQ = 0x04
URESIRQ 0 USBIRQ.3 Host started signaling bus reset Write USBIRQ = 0x08
SUSPIRQ 0 USBIRQ.4 Host suspended the bus Write USBIRQ = 0x10
NOVBUSIRQ 0 USBIRQ.5 VBUS comparator made 1-0 transition Write USBIRQ = 0x20
VBUSIRQ 0 USBIRQ.6 VBUS comparator made 0-1 transition Write USBIRQ = 0x40
URESDNIRQ 0 USBIRQ.7 Host finished signaling bus reset Write USBIRQ = 0x80

表2は、14の割込み制御ビットについて、MAXQ3420E内部ロジックがこれらを設定するタイミングおよびSPIマスタがこれらをクリアする方法を示しています。

割込み要求ビット

BAVビット
3つのバッファ利用可能(BAV)IRQビットは、SPIマスタがロードするのにINエンドポイントFIFOが利用可能であることを示しています。MAX3420Eは、チップがリセットされたときに、あるいはINデータがエンドポイントバッファからホストに正常に送られたときにこれらのIRQビットをアサートします。このIRQは、バッファが新しいデータを受け取る準備ができたことをSPIマスタに通知します。

図6. エンドポイント3にIN要求を送信するホストのバストレース
図6. エンドポイント3にIN要求を送信するホストのバストレース

図6は、ホストがMAX3420Eにデータを要求する場合のIN転送のバストレースです。パケット7145が到着する前に、SPIマスタはエンドポイント3-INのFIFO (EP3INFIFO)にバイト00 00 08をロードします。次に、SPIマスタは、EP3INBC(エンドポイント3 INのバイトカウント)レジスタに値3を書き込みます。バイトカウントレジスタに書き込むことにより、以下の3つが遂行されます。

  1. IN要求が到着したときに何バイトを送信すべきかをMAX3420Eに通知します。
  2. (NAKを送信することなく)データを転送するエンドポイントを装備します。
  3. EP3INBAV IRQビットをクリアします。

MAX3420Eは、エンドポイント3宛ての次のINパケットに対してデータパケット7146で応答します。ホストは、肯定応答(ACK)パケット7147を送信することによって、エラーフリーのデータを受信したことを肯定応答します。MAX3420Eは、ホストのACKパケットを検出すると、EP3INBAV割込み要求ビットをセットし、エンドポイントFIFOに新しいデータをロード可能であることをSPIマスタに通知します。

SPIマスタがエンドポントを装備する前にINパケットが到着した場合、MAX3420Eは、NAKハンドシェイクを返します(図7)。NAKハンドシェイクは、IN要求を後で再試行するようホストに指示します。

図7. MAX3420Eは、データ送信の準備ができていない場合にNAKを送信します。
図7. MAX3420Eは、データ送信の準備ができていない場合にNAKを送信します。

ホストにINデータを送信している間にエラーがあった場合、ホストがIN要求を再試行したときに、MAX3420Eは自動的にデータ(および同じデータトグルDATA0/DATA1)を再送します。MAX3420Eは、ホストからACKハンドシェイクを受信して初めて、エンドポイントのBAV IRQビットをアサートして、バッファが新しいデータに対して準備ができていることを通知します。


重要:MAX3420EのすべてのIRQビットと同様、3つのBAV IRQビットも1を書き込むことによってクリアすることができます。ただし、決してこれは実行しないでください。1を書き込んでクリアするのではなく、上記で説明した方法を使用してください。つまり、INエンドポイントのバイトカウンタレジスタに書き込むことによって、BAV IRQビットをクリアする方法です。この理由は、MAX3420EがINエンドポイントのBAV割込み要求ビットをロックアウトメカニズムとして使用するからです。このメカニズムによって、SPIマスタとMAX3420Eのシリアルインタフェースエンジン(SIE)が、エンドポイントを同時に使用することがなくなります。たとえば、BAVビットをクリアしてから2つの別々の命令でバイトカウントをロードした場合、バイトカウントレジスタの更新中にパケット転送が進行し、データが破損するおそれがあります。

BAV IRQのデフォルト値
3つのBAV IRQビット(表2のDefault列に1と表示したもの)のデフォルトは1です。つまり、パワーオンまたはリセットの後、SPIマスタはEPIRQ = 0x19を読み出すということです。対応するIENビットのいずれかがセットされている場合、INTピンは、割込みが未処理であることを示します。

ダブルバッファ構造のエンドポイントEP2-IN
MAX3420E EP2-INエンドポイントは、ダブルバッファ構造です。つまり、2組の64バイトFIFOとバイトカウントレジスタを備えているということです。ダブルバッファリングでは、SPIマスタがパケットをロードする前に、別のパケットがホストに転送されるのを待つ必要がないため、転送の帯域幅が向上します。ダブルバッファリングによって、SPIマスタは、一方のIN FIFOがそのINデータをホストに転送するのと同時に他方のIN FIFOをロードすることができます。EP2INBCレジスタにロードするとき、2つのバッファは「ピンポン伝送」を行います。これによって、他方のFIFO(2番目のセット)とバイトカウントレジスタがSPIマスタに渡されます。このダブルバッファリングの動作は、ファームウェアにとってはトランスペアレントになります。

ダブルバッファリングが見えるのはは、初期化時においてです。IN2BAVIRQビットは、パワーオンまたはチップリセット時にアサートされます。通常、初期化コードは、EP2IN FIFOにデータをロードし、次にEP2INBCレジスタにロードして転送に備え、IN2BAVIRQビットをクリアします。このコードを実行すると、MAX3420Eが直ちにIN2BAVIRQビットを再アサートするのに驚かれるかもしれません。これは、SPIマスタがロードを行うのに2つ目のバッファが利用可能であることを示しています。

DAV割込み要求ビット
OUTエンドポイントは、ホストから新しいデータを受信済みであることを示す「データ利用可能(DAV) IRQビット」を備えています。MAX3420Eは、自動的にバスの再試行を処理し、エラーフリーのデータを受信したときにのみ割込み要求をアサートします。SPIマスタがDAV割込み要求を受け取ると、エンドポイントのバイトカウントレジスタを読み出して、送信されたデータのサイズを読み取ります。次に、SPIマスタは、エンドポイントのOUTFIFOからそのバイト数だけ読み出します。SPIマスタは、1を書き込むという通常の方法でOUTDAV IRQビットをクリアします。これによって、次のOUTパケットを受け取れるようにエンドポイントが再装備されます。

図8では、ホストがOUT PIDおよび4バイトのデータを送信し、MAX3420EがこれらをEP1OUT FIFOに転送しています。MAX3420Eは、転送がエラーフリーであることを検証すると、EP1OUTBCレジスタを更新して4バイトを示し、ACKパケットをホストに返送し、さらにEP1OUTDAV IRQをアサートして、エンドポイント1のFIFO内でデータを取出し可能であることをSPIマスタに通知します。

図8. OUTパケットをエンドポイント1に送信するホストのバストレース
図8. OUTパケットをエンドポイント1に送信するホストのバストレース

ダブルバッファ構造のエンドポイントEP1-OUT
MAX3420E EP1-OUTエンドポイントは、ダブルバッファ構造です。つまり、2組の64バイトFIFOとバイトカウントレジスタを備えているということです。ダブルバッファリングとは、SPIマスタがOUT1DAVIRQをクリアした後に、別のホストパケットが待機している場合には、直ちにOUT1DAVIRQを再アサートできることを意味します。

SUDAV割込み要求ビット
ホストがMAX3420Eにコントロール転送を送信すると、MAX3420Eは、8つのSETUPバイトを8バイトのFIFO内に保存します。SPIマスタは、SUDFIFOレジスタからこの8バイトのFIFOを読み出します。周辺機器は常にこのバッファ内でホストデータを受け取るため、SUDAVIRQは、OUTエンドポイントFIFOとまったく同様に機能し、ホストからの新しいデータが到着すると、SUDAV IRQをアサートします。SETUPパケットには常に8バイトが含まれるため、SETUPデータ用のバイトカウントレジスタは必要ありません。

OSCOK割込み要求ビット
MAX3420Eの電源を投入したとき、チップリセットをオフにしたとき、あるいはパワーダウン状態を終了したときには、内部発振器およびPLLが起動して安定するまでに時間がかかります。発振器のOK (OSCOK) IRQは、MAX3420Eの動作準備が完了したことを示します。

図9. サンプルコードは、MAX3420Eをリセットし、OSCOKを待ってから動作に入ります。
図9. サンプルコードは、MAX3420Eをリセットし、OSCOKを待ってから動作に入ります。

図9は、CHIPRESレジスタビットを使用してMAX3420Eをリセットするサンプルコードです。チップリセットは、内部発振器を停止するため、CHIPRES = 0を設定することによってコードがリセット信号を取り除いた後、MAX3420Eを使用する前に発振器が安定化するのを待つ必要があります。

RWUDN割込み要求ビット
USB周辺機器は、サスペンド状態にあるとき、リモートウェイクアップ(RWU)信号を送出して、バスのアクティビティを再開することをホストに指示することができます。USBの仕様では、リモートウェイクアップ信号は1ms~15msのK状態と規定されています。SPIマスタは、リモートウェイクアップ信号の送出(SIGRWU)ビットを1にセットすることによって、RWUの信号送出を開始します。

SPIマスタがSIGRWUビットをセットすると、MAX3420Eは5ms待ち、K状態で10ms駆動し、次にリモートウェイクアップ信号処理の割込み要求(RWUDNIRQ)ビットをアサートします。5msの遅延によって、別のUSB要件を確実に満たすことができます。つまり、バスは、周辺機器がリモートウェイクアップ信号の送出を開始するまで少なくとも5msの間、アイドル状態(J状態)になければなりません。

図10. リモートウェイクアップ信号を送出するサンプルコード
図10. リモートウェイクアップ信号を送出するサンプルコード

図10は、リモートウェイクアップ信号を送出するためのサンプルコードです。MAX3420Eが信号の時間設定を行い、完了すればIRQをアサートすることに留意してください。MAX3420Eは、USBのすべての時間設定イベントについてこれを実行し、完了時に割込みを生成します。このため、SPIマスタは信号送出の間隔の時間設定をする必要はありません。

図10のコードは、SIGRWUビットをセットし、RWUDNIRQビットについてのループを実行し、10ms信号が経過した時点を判断します。次に、SIGRWU = 0を設定し、IRQビットをクリアします。当然ですが、マルチタスクのSPIマスタでは、RWUDNIRQ割込み要求に応答することになるため、IRQビットをじかに確認して時間を無駄にすることはありません。

SPIマスタは、RWUDNITQ割込みを受け取ってから5ms以内にSIGRWUビットをオフにする必要があります。オフにしなければ、MAX3420Eは、SIGRWU = 0となるまで、次の10msのK状態を開始し、このシーケンス(5ms待って10msのK状態)を繰り返します。RWUの信号送出が進行中にSIGRWU = 0を設定しても、RWUの信号送出は終了しません。

SPIマスタがSIGRWU = 1をセットしたときにMAX3420Eがパワーダウン状態(PWRDOWN = 1)にある場合、MAX3420Eは自動的に発振器を再起動し、発振器が安定化してからRWUの信号送出を開始します。このケースでは、SPIマスタは、OSCOK IRQをチェックする必要はありません。

BUSACT割込み要求ビット
MAX23420Eは、USBパケットの先頭部分でSYNCパターンを検出すると、BUSACT IRQビットをセットします。USBバスリセットはバスの動作とは見なされないため、BUSACK割込み要求はアクティブにはなりません。

URESおよびURESDN割込み要求ビット
USBホストは、シングルエンド0(SE0)状態(D+およびD-の両方がロー)を少なくとも50ms維持することで周辺機器をリセットします。MAX3420Eは、2.5µsのSE0を検出した後、USBリセットIRQ (URESIRQ)をアサートします。次に、ホストがリセット信号の送出を完了したとき、USBリセット処理IRQ (URESDNIRQ)をアサートします。

SPIマスタはUSBバスリセットのイベントを監視する必要があるため、MAX3420Eは、バスリセットの間、URESIE、URESDNIE、またはIE割込みイネーブルビットをクリアしません。MAX3420Eは、バスリセットの間、EPIENとUSBIENレジスタの他のすべての割込みイネーブルビットについては、クリアします。

SUSP割込み要求ビット
MAX3420Eが3msのバス非アクティビティ(連続したJ状態)を検出すると、サスペンドの割込み要求(SUSPIRQ)をアサートします。MAX3420Eを使用する周辺機器がバスパワーの場合、機器は低電力状態に移行して、VBUSから消費する電流を最小限に抑える必要があります。このケースでは、SPIマスタは、電力を消費する周辺機器をシャットダウンし、次にPWRDOWN = 1をセットしてMAX3420Eを低電力モードにすることによって対応します。これによって、MAX3420Eの発振器が停止され、MAX3420Eは最小電力状態に移行します。

重要なプログラミングの注意点を2つ、以下に挙げておきます。

  • SUSPIRQビットをクリアしても、3ms後に割込みが再アサートされることを停止することはできません。バスがサスペンド状態のときにSUSPEND割込みが繰り返されるのを避けるには、バスが信号送出を再開するまでSUSPEND IENビットをクリアしてください。
  • 内部サスペンドタイマのロジックは、MAX3420Eの内部発振器のクロックを使用しています。したがって、チップをパワーダウン(PWRDOWN = 1をセット)し、次に1を書き込むことによってSUSPIRQビットをクリアしようとしても、MAX3420Eはこのビットをクリアしません。MAX3420Eは、内部クロック(この時点では停止している)を必要とします。

VBUSおよびNOVBUS割込み要求ビット
自己給電の周辺機器は、これらの割込みを使用することで、機器がUSBに接続されて電力が供給されているかどうかを知ることができます。割込みは、VBCOMPピンの電圧と内部リファレンス電圧とを比較する内部VBUSコンパレータによってアクティブにされます。これらはエッジセンスであり、VBUS電圧が印加されたとき(VBUSIRQ)、または取り除かれたときに(NOVBUSIRQ)、アサートされます。

バスパワーの周辺機器は、VBUSによって電力を供給されているため、VBUSを検出する必要はありません。このため、VBCOMPピンを汎用入力用として使用することができます。このアプリケーションでは、VBCOMPピンには内部プルアップ抵抗がないため、VBCOMPピンとVLの間にプルアップを接続する必要があります。

プログラミングのヒント

IENビットをクリアする方法
チップリセット
すべてのIEビットは、チップリセット中にクリアされます。チップリセットは、以下のいずれかで定義されます。

  1. VL電力がMAX3420Eに印加される(パワーオンリセット)
  2. MAX3420EのRES#ピンがローに駆動される
  3. SPIマスタがビットCHIPRES = 1をセットする

バスリセット
MAX3420EがUSBバスリセット(3msのバス非アクティビティ)を検出すると、以下の3つを除いてすべてのIEビットがクリアされます。SPIマスタは、バスリセット信号送出の状態を監視するために、バスリセット関連の割込みを容認することが必要となる場合があります。このため、以下のIEビットはバスリセットによって影響を受けません。

  1. URESIE
  2. URESDNIE
  3. IE(グローバル割込みイネーブル)

USBバスリセットは大部分のIEビットをクリアするため、バスリセットが完了したときに所望の割込みが再イネーブルされるように制御ファームウェアを構成しておく必要があります。

BAV IRQとDAV IRQビットをクリアする方法
DAV IRQビットはビットに1を書き込むという通常の方法でクリアされることを思い出してください。BAVビット(INエンドポイント用)は、バイトカウントレジスタに書き込むという別の方法でクリアされます。