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

EEPROMベースシステムモニタMAX16031/MAX16032のインサーキットプログラミング

筆者: Eric Schlaepfer

要約: システムモニタMAX16031/MAX16032は、アプリケーションの回路基板への半田付け後にプログラムすることが可能です。すなわち、在庫の必要があるのは未プログラムのデバイスのみであり、また製造テスト中に最新バージョンの設定情報をデバイスに書き込むことができます。このアプリケーションノートで詳述する2、3の簡単な手段によって、アプリケーション回路が、プログラミング用ハードウェアにI²CまたはJTAGバスラインの共有を許すこと、およびプログラム中のデバイスへの給電を行うことが保証されます。I²CバスとJTAGバスの両方についてプログラミングのアルゴリズムも示します。

EEPROMベースシステムマネージャMAX16031/MAX16032は、8個の電源電圧、3個の温度センサ、および1つの電流を監視するシステム監視デバイスです。各パラメータが4種類のスレッショルドと比較され、様々な条件下でアサートするように数個の障害出力を設定することができます。

これらのモニタにはSMBus™対応のI²CインタフェースとJTAGインタフェースが内蔵されており、その両方からデバイスの全レジスタへのアクセスおよび内蔵のコンフィギュレーションEEPROMのプログラムが可能です。少数の簡単なガイドラインに従うことによって、MAX16031/MAX16032のインサーキットプログラミングを行うことができます。

電力の供給

MAX16031/MAX16032は、3V~14Vの電源電圧範囲に対応しています。アプリケーションによっては、VCCを12Vの中間バス電圧に接続するものや、VCCを3.3Vの補助電源に接続するものがあります。

部分的に電源が供給されているボードを使用してこれらのデバイスのプ ログラミングを行うことができます。たとえば、他の電源なしで3.3Vの補助電圧を印加したり、他の回路に給電されるのを防ぐためにダウンストリームの電源をすべてオフにした状態で12Vの中間バス電圧を印加することが可能です。もう1つの選択肢としては、一般的に入手可能なデュアルダイオードを使用して、プログラミング用コネクタから電力を供給できるようにする方法があります。ダイオードに起因する電圧降下のため、このアプローチはMAX16031/MAX16032が12Vバスから給電されている場合に最も良好に動作します。

バスの共有

マイクロプロセッサ(µP)以外の何らかのデバイスが通常動作中にMAX16031/MAX16032と通信を行う必要がある場合、潜在的な問題が発生します。その1つの例は、システムを監視するµPがMAX16031/MAX16032のADCの読み値にアクセスする必要がある場合です。ボードが給電されていないか、または部分的に給電されている場合、MAX16031/MAX16032のプログラミング中に、I²CまたはJTAGバスに接続されている他のデバイスが干渉する可能性があります。最も簡単な解決策は、MAX16031/MAX16032のプログラミングをJTAGインタフェース経由で行い、監視µPをI²Cインタフェースに接続するという方法です。µPが真のオープンドレインのI²CバスI/O (すなわち、VCCへのESDダイオードがない端子)をサポートしており、プルアップ抵抗が十分に大きい場合は、プログラミングと通常動作の両方でI²Cバスを共有することが可能です。µPのI²Cバスラインがオープンドレインでない場合、ESDダイオードがバスラインをクランプしてプログラミングに干渉します。JTAGを共有するためには、3.3Vから給電されるJTAGバスマルチプレクサが必要になる可能性があります。

システムµPが真のオープンドレインのI²Cバスラインを備えていない場合は、図1に示すような回路を使用して、µPとプログラミング用I²Cバスの間で自動的な切替えを行うことができます。

図1. MAX16031はマルチプレクサ/スイッチMAX4525を通してI²Cバスを共有します。
図1. MAX16031はマルチプレクサ/スイッチMAX4525を通してI²Cバスを共有します。

図1のマルチプレクサMAX4525は、システムµPに接続されたI²Cとプログラミング用テストポイントに接続されたI²Cの間で切替えを行います。このスイッチはシステムµPのVCCによって制御されます。VCCが印加されておらず、12Vが印加されている場合、スイッチはI²Cをプログラミング用テストポイントに接続します。VCCが印加されると、スイッチはI²CをシステムµPに接続します。プログラミングモードでは、テストポイントに接続しているプログラミング用ハードウェアが適切なI²Cプルアップ抵抗を提供する必要があることに注意してください。

アプリケーション回路の例

次の2つの図は、インサーキットプログラミング用に設計された2種類のアプリケーション回路を示しています。

12V中間バスから給電、I²Cバスを通してプログラミング

図2では、MAX16031は12Vの中間バスから給電されています。デュアルダイオードによって、MAX16031のI²Cラインにも接続されているプログラミング用コネクタからの給電が可能になっています。これらのI²Cラインは、µPが給電されていない場合でもバスの負荷とならないオープンドレインのI²C出力を備えたボード上のシステム管理µPと共有されています。外付けのプログラマの代わりに、システム管理µPが初期起動時にMAX16031のプログラミングを行うこともできます。この方法を使用すると、特別なハードウェアなしでMAX16031の設定を容易に更新することができます。

図2. このMAX16031は12Vの中間バスから給電され、I²Cバスを通してインサーキットプログラミングが行われます。
図2. このMAX16031は12Vの中間バスから給電され、I²Cバスを通してインサーキットプログラミングが行われます。

3.3V補助バスから給電、JTAGポートを通してプログラミング

図3は、MAX16031が3.3Vの補助バスから給電される例を示しています。プログラミングは、プログラミング用テストポイントに接続された専用のJTAGラインを通して行われます。この例では、プログラミングを行う前に、3.3Vの補助バスを給電する必要があります。この場合も、I²Cインタフェースはシステム管理µPに接続されています。

図3. このMAX16031は3.3Vの補助バスから給電され、JTAGポートを通してプログラミングが行われます。
図3. このMAX16031は3.3Vの補助バスから給電され、JTAGポートを通してプログラミングが行われます。

プログラミングのアルゴリズム

MAX16031/MAX16032は、デバイスの設定パラメータを格納するためのEEPROMを内蔵しています。電力が印加されると、EEPROMの内容がRAMレジスタに転送されます。RAMとEEPROMの両方とも、JTAGおよびI²Cインタフェースからアクセス可能です。MAX16031/MAX16032を正しくプログラミングするためには、希望するパラメータをEEPROMにプログラミングする必要があります(表1のメモリマップを参照)。

表1. MAX16031/MAX16032のメモリマップ
表1. MAX16031/MAX16032のメモリマップ

コンフィギュレーションファイル

MAX16031の評価キット(EVキット)用ソフトウェアは、2種類のコンフィギュレーションファイルを提供しています。1つは、System Save Configuration...を選択することによって生成される、人間が読むことができるテキストファイルです。このファイルは、I²Cプログラミングに使用することができます。第2のファイルは、System Save as SVF...を選択することによって生成されます。このファイルは、多数のPLDベンダがJTAGプログラミングに使用している、シリアルベクタフォーマット(SVF)になっています。

テキストファイルのフォーマットは次の通りです。
[Registers]
register number=register value
.
.
.
値はすべて10進数です。レジスタは23から始まって98まで続きます。これらのアドレスはEEPROMのアドレスではなく、RAMレジスタに対応しています。EEPROMのアドレスを取得するには、RAMレジスタのアドレスに128を加算してください。

SVFファイルフォーマットについては、 Serial Vector Format Specification (PDF, 85.2kB).

I²Cのプログラミング手順

MAX16031/MAX16032のEEPROMコンフィギュレーションメモリのプログラミングを行うためには、まずレジスタr5Fh[0]のコンフィギュレーションロックビットがゼロになっていることを確認する必要があります。ゼロになっていない場合は、そのビットに「1」を書き込んでクリアしてください。EEPROMへの書込みは、開始アドレス(97h)をロードした後に、一連のブロック書込みコマンド(I²C)または書込みコマンド(JTAG)を実行します。I²Cプロトコルの詳細については、 MAX16031/MAX16032のデータシートをご覧ください。

標準的なEEPROMプログラミング手順の擬似コードは次のようになります。
SendByte(5Fh)                 // Check lock bit
If ReadByte() & 1 == 1 Then
  WriteByte(5Fh, 01h)         // Clear lock bit if needed
Loop Address from 97h to DFh 
  SendByte(Address)           // Load address
  WriteBlock(Data, 10h)       // Write a block of 16 bytes
  Wait(16 * 11 milliseconds)  // Wait for programming
   SendByte(Address)
   ReadBlock(DataRead, 10h)    // Read back data block
   If DataRead != Data Then    
    RepeatCount = RepeatCount + 1
    If RepeatCount == 3 Then
      Fail
  Else
    RepeatCount = 0
    Address = Address + 10h     // Advance to next block
Success

JTAGのプログラミング手順

このデバイスのプログラミングを行うためには、標準サードパーティJTAGツール、MAX16031/MAX16032 BSDLファイル、およびEVキットソフトウェアによって生成されるSVFデータファイルを、JTAGプログラミングケーブルかインサーキットPCBテスタのいずれかと一緒に使用してください。BSDLファイルはダウンロード可能です。

EVキットソフトウェアによって生成されるSVFファイルはIDCODEレジスタのテストを行うことに注意してください。以下コード抜粋はMAX16031のEVキットソフトウェアによって生成されるSVFファイルからのものです。
ENDDR IDLE;
ENDIR IDLE;
SIR 5 TDI(00) TDO(01);
SDR 32 TDI(00000000) TDO(00001197) MASK(0FFFFFFF); 
TDO(00001197)のステートメントは、デバイスの改訂コードを含む完全なIDCODEステートメントを検証します。デバイスが異なる改訂コードとともに使われるとこのステートメントは失敗します。SVFファイルがIDCODEレジスタの改訂コードフィールドを無視するようにさせるためには、以下行を代用してください。
SDR 32 TDI(00000000) TDO(00001197) MASK(0FFFFFFF);
マスクステートメントは、4ビット改訂コードフィールドを無視します(表2を参照)。

表2. IDCODEレジスタのビットマップ
  Revision (4 Bits) Part Number (16 Bits) Manufacturer (11 Bits)
Binary 0010 0000 0000 0000 0001 00011001011          1
Hex 2 0001 197