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

EEPROMプログラマブルシステムマネージャMAX16046~MAX16049のインサーキットプログラミング

筆者: Eric Schlaepfer

要約: システムマネージャMAX16046~MAX16049は、アプリケーション回路基板へのはんだ実装後にプログラムすることが可能です。すなわち、在庫の必要があるのは未プログラムのデバイスのみであり、また製造テスト中に最新バージョンの設定情報をデバイスに書き込むことができます。2、3の簡単な手段によって、アプリケーション回路は、プログラミング用ハードウェアにI²CまたはJTAGバスラインの共有を許し、プログラム中のデバイスへの給電が保証されます。プログラミングのアルゴリズムは、I²CバスとJTAGバスの両方に適用されます。

EEPROMプログラマブルシステムマネージャMAX16046~MAX16049は、最大12個の電源を制御することができる電源シーケンサ、モニタ、およびマージン制御回路です。3個のディジタルコンパレータによる電源のモニタリング、プログラマブルなDAC出力によるマージニング、およびプログラマブルなステートマシンを使用したシーケンス制御を行います。

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

電力の供給

MAX16046~MAX16049は、3V~14Vの電源電圧範囲に対応しています。標準的なアプリケーションでは、VCCを12Vの中間バス電圧に接続するか、3.3Vの補助電源に接続します。

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

ダイオードによるORを使用せずに、ボードに電源が印加された状態でMAX16046~MAX16049のプログラミングを行う場合は、ダウンストリームの電源が早すぎるタイミングでオンになるのを防ぐため、シーケンス出力の状態に十分注意する必要があります。

未プログラム状態では、MAX16046~MAX16049の出力はハイインピーダンスになります。アクティブハイのイネーブル入力を備えた電源にはプルダウン抵抗が、アクティブローのイネーブル入力を備えた電源にはプルアップ抵抗が必要です。シーケンス制御出力は、プッシュプルまたはオープンドレインのいずれかに設定可能です。オープンドレイン構成の場合は、外付けのプルアップ抵抗が必要になるため、アクティブローのイネーブル入力としてのみ使用してください。

チェーン内のアップストリームのデバイスに電力が印加されない可能性があるので、事実上、MAX16046~MAX16049へのアクセスが遮断されることになるので、MAX16046~MAX16049をJTAGチェーンに接続することは推奨されません。それよりも、JTAGマルチプレクサまたは専用のJTAGポートを使用することが望ましい方法です。

バスの共有

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

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

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

図1のマルチプレクサMAX4525は、システムµPに接続されたI²Cとプログラミング用テストポイントに接続されたI²Cの間で切替えを行います。このスイッチはシステムµPのVCCによって制御されます。VCCが印加されておらず、12Vが印加されている場合、スイッチはI²Cをプログラミング用テストポイントに接続します。VCCが印加されると、スイッチはI²CをシステムµPに接続します。

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

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

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

図2の回路は、MAX16046の給電を12Vの中間バスから行っており、そのバスはアナログイネーブルラインENによってモニタされます。ENの抵抗分圧器で設定されたスレッショルドを超えて12Vのバスが立ち上がると、プログラムされている場合のMAX16046はシーケンス制御を試みます。未プログラムのMAX16046は何も行わず、シーケンス制御出力はハイインピーダンスレベルのままになります。

図2. このMAX16046は12Vの中間バスから給電され、I²Cインタフェースを介してプログラミングが行われます。
図2. このMAX16046は12Vの中間バスから給電され、I²Cインタフェースを介してプログラミングが行われます。

一方の電源はアクティブハイ、プッシュプルのイネーブル信号を使用し、もう一方はアクティブロー、オープンドレインのイネーブル信号を使用しています。適切なプルアップおよびプルダウン抵抗によって、未プログラムの出力がハイインピーダンスレベルになっている状態でこれらの電源がオンになるのを防ぐことができます。

プッシュプル出力をVDBPより高くプルアップすることはできず、オープンドレイン出力を6Vより高くプルアップすることはできないという点に注意することが重要です。I²C接続がプログラミング用テストポイントまで引き出されているため、プログラミング用ハードウェアによって適切なプルアップ抵抗が提供される必要があります。回路基板上の他のデバイスをI²Cバスに接続する必要がないため、シンプルな回路になっています。

3.3V補助電源から給電、JTAGマルチプレクサを介してプログラミング

図3では、MAX16046は3.3Vの補助電源から電力を得ています。同じく3.3Vの補助電源から給電されるJTAGマルチプレクサDS26900を使用して、JTAG接続を他のデバイスと共有しています。12Vの中間バスへの通電は必要なく、3.3Vを供給することによってプログラミングを行うことができます。

図3. このMAX16046は3.3Vの補助電源から給電され、JTAGマルチプレクサDS26900を通してプログラミングが行われます。
図3. このMAX16046は3.3Vの補助電源から給電され、JTAGマルチプレクサDS26900を通してプログラミングが行われます。

12V中間バスから給電、JTAGを介してプログラミング

図4では、MAX16046が12Vの中間バスへのダイオードOR接続によって給電されており、ダウンストリームの電源をオンにすることなく安全に電力を印加することができるようになっています。JTAGおよび電源の接続がプログラミング用テストポイントに引き出されています。

図4. このMAX16046は12Vの中間バスから給電され、JTAGを介してプログラミングが行われます。
図4. このMAX16046は12Vの中間バスから給電され、JTAGを介してプログラミングが行われます。

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

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

表1. MAX16046のメモリマップ 表1. MAX16046のメモリマップ

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

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

多くのウェブブラウザでは、XMLファイルを色分けされた階層形式で表示することができます。EVキット用ソフトウェアによって生成されるXMLファイルは複数のセクションに分かれており、セットアップタブ情報とレジスタデータが格納されています。注目すべきセクションとして、EEPROMにロード可能な設定値を格納したConfig_Registerセクションと、ユーザEEPROMにロードする値を格納したUser_Registerセクションの2つがあります。

それぞれのセクション内で、特定のアドレスにロードされる値がRegisterタグによって指定されています。このレジスタタグのフォーマットは次の通りです。
<Register Address="{register number}" Value="{register value}"
Description="{text description of register}"/>
値はすべて10進数です。これらのアドレスは、RAMレジスタとEEPROMの両方のアドレスに対応しています。RAMレジスタの0~14はDACレジスタですが、EEPROMのアドレス0~アドレス14は保存された障害データであることに注意してください。EEPROMのプログラミングルーチンは、アドレス15から開始してください。

XMLファイルフォーマットの詳細については、XML Developer Centerをご覧ください。

SVFファイルフォーマットについては、Serial Vector Format Specification (PDF、85.2kB)で詳細に説明しています。

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

MAX16046~MAX16049のEEPROMコンフィギュレーションメモリのプログラミングを行うためには、まずレジスタr5Dh[0]のコンフィギュレーションロックビットがゼロになっていることを確認する必要があります。ゼロになっていない場合は、そのビットに「1」を書き込んでクリアしてください。EEPROMへの書込みは、EEPROMページに入るための適切なコマンドを送信し、開始アドレスをロードした後に、一連のブロック書込みコマンドを送信します。各デバイスのI²Cプロトコルの詳細については、MAX16046/MAX16048またはMAX16047/MAX16049のデータシートをご覧ください。

標準的なEEPROMプログラミング手順の擬似コードは次のようになります。
SendByte(5Dh)                 // Check lock bit
If ReadByte() & 2 == 2 Then
  WriteByte(5Dh, 02h)         // Clear lock bit if needed
SendByte(9Ah)                 // Access EEPROM page
Loop Address from 0Fh to 7Dh 
  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
SendByte(9Bh)                 // Return to default page
Success
ユーザEEPROMへの書込みを行う場合も同じ手順を使用することができますが、アドレス範囲が0Fh~7Dhではなく9Ch~FFhになります。

JTAGのプログラミング手順

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

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

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