I2Cバス・バッファによるスタック・バスの解決、容量性負荷への対処とレベル変換も可能に

2019年06月27日
myAnalogに追加

myAnalog のリソース セクション、既存のプロジェクト、または新しいプロジェクトに記事を追加します。

新規プロジェクトを作成

はじめに

I2Cは、双方向の通信を実現する2線式のバス規格です。主に、システムの構成や監視の用途に利用されています。通常、バスのマスタとしての役割はマイクロコントローラが担うことになります。そのマスタは、システムの各コンポーネントに対してポーリングを行います。それにより、電源電圧や温度、リムーバブル・カード上のメモリからのVPD(Vital Product Data)、システムの構成情報などを取得します。またマスタは、バスを使用し、GPIO(General Purpose Input/Output)やその他のプログラマブル・デバイスを介してシステムを再構成することも可能です。一般に、大規模な通信システムやデータ・ストレージ・システムは、いくつかのペリフェラル・カードを使用して構成されます。各カードはI2Cバスに接続され、バックプレーンを介してシステムの情報をマイクロコントローラに伝達します。

I2Cバスを利用するシステムを設計する際には、高い信頼性を確保するためにいくつかの事柄について検討しなければなりません。まず、システムにはバスのハングやスタックに対する保護機能を設ける必要があります。何らかの理由によってバスがローにスタックしてしまうと、システム全体がダウンしてしまうかもしれません。考慮すべきもう1つの事柄は、バス上の大きな容量性の負荷への対処法です。I2Cの規格では、バス容量の上限値を400pFと規定しています。しかし、システムの規模が大きくなると、数多くのデバイスがバスに直接接続されることになるでしょう。そうすると、容量に関する仕様が問題になります。また、当然のことながら、システムには堅牢性が求められます。例えば、通電状態のバックプレーンにカードを抜き挿しする際には、I2Cバスのデータが破損しないようにしなければなりません。加えて、カードが人の手によって取り扱われる場合には、ESD(静電気放電)が生じる可能性があります。カードは、それに対する耐性を備えていなければなりません。

LTC4304」は、I2Cに対応するバス・バッファです。柔軟性の高いアーキテクチャをベースとし、数多くの機能を備えていることから、あらゆるシステムに適用することができます。また、スタック・バスに対処するための独自の保護回路を備えていることも特徴の1つです。このことから、スタック・バスの監視/トラブルシューティング/解決といったタスクからマイクロコントローラを解放することが可能になります。そうしたタスクの簡素化は、基板面積やコネクタのピンの節約にもつながります。加えて、双方向のバッファリング機能も備えているため、バックプレーンのバスからカードのバスを絶縁することができます。更に、立上がり時間アクセラレータの機能により、大きな容量性負荷がバスに加わった場合でも、I2Cの立上がり時間の仕様を満たすことが可能になります。システムにカードを抜き挿しする場合にも、I2Cバス上のデータが破損することはありません。±15kVの人体モデル(HBM:Human Body Model)に対応するESD保護機能も備えているので、SDA(データ)とSCL(クロック)のラインがコネクタに直接接続されるカードに適した堅牢なフロント・エンドを実現することが可能です。

LTC4304の主要な機能

ここでは、LTC4304の代表的な機能について詳しく解説します。

スタートアップとホット・スワップ

LTC4304のホット・スワップ機能を最大限に活用するためには、スタガード・コネクタを使用する必要があります。この種のコネクタでは、VCCピンとGNDピンが最も長く、SDAピンとSCLピンが中間の長さで、ENABLEピンが最も短くなっています。通電状態のバックプレーンにカードのVCCピンとGNDピンが接続されると、VCCピンの電圧レベルが上昇し始めます。このとき、LTC4304のプリチャージ回路によってSDAとSCLのラインの容量が1Vに充電されます。SDA/SCLのラインがプリチャージされていれば、バックプレーンに接続する際に生じるバスへの外乱を最小限に抑えられます。LTC4304のその他の回路は、電源電圧が2.5V(代表値)を超え、ENABLEピンの電圧が1.4V(代表値)を超えるまでディスエーブルの状態になっています。コネクタのENABLEピンが最も短いことから、バス上で接続が確立するまでの間にSCLとSDAはしっかりと固定されます。LTC4304に対してVCCが適切に供給されたら、カードは通電状態のバックプレーンに接続されていると見なされます。そして、SDAINとSCLINのバックプレーン側のストップ・ビットまたはバスのアイドル状態を待ち受けることになります。これらの条件のうち1つが満たされており、SDAOUTとSCLOUTがハイである場合には、接続用の回路が起動します。その結果、カード側のバスがバックプレーン側のバスに接続されます。このような動作により、カードが挿入される際にバス上のデータが破損することはないという要件が満たされます。なお、READYピンは接続用の回路の状態を表します。接続用の回路が起動している場合にはハイになります。

バス・スタックのタイムアウト

LTC4304は、I2Cバスのカード側のSDAOUTとSCLOUTを監視します。どちらかがローになると、内蔵タイマーがスタートします。このタイマーは、両方のピンが共にハイである場合だけリセットされます。いずれかが30ミリ秒以内にハイにならない場合、入出力間の接続は自動的に切断され、FAULTがローにアサートされます。それにより、バスがスタックしたことが示されます。LTC4304は、電源を投入した際にバスがスタックしている場合にも、それをフォルトとして検出します。どちらの場合にも、LTC4304はSCLOUTから周波数が8.5kHzの最大16個のクロック・パルスを自動的に出力します。SDAOUTとSCLOUTの両方がハイになると、FAULTの状態が解除されてハイにプルアップされます。続いて、LTC4304はストップ・ビットまたはバスのアイドル状態を待ち受けて自動的に再接続を行います。バスがスタックしている間は、バスがアイドル状態になっていなくても、ENABLEの立上がりエッジにおいて強制的に接続を実現できます。

容量のバッファリング

LTC4304が備える接続用の回路は、アナログ・デバイセズが特許を出願中の独自のアーキテクチャをベースにしています。この回路により、電気的な絶縁が実現されます。すなわち、I2Cの機能を完全に維持しつつ、カード側のバスの容量をバックプレーン側のバスから絶縁するということが行われます。その結果、マイクロコントローラから見ると、バックプレーンの容量とLTC4304で保証されている10pF未満の入力容量のみが存在する状態になります。また、LTC4304はカード側の回路の容量を駆動し、駆動されているのと反対側の電圧がわずかに高い値になるよう制御します。この電圧VOSは、VCC、プルアップ抵抗、内部で設定されている定数項によって次式の関数として表されます。

数式 1

例えば、プルアップ抵抗が2.7kΩでVCCが3.3Vの場合には、次のようになります。

数式 2

立上がり時間アクセラレータ

SDA/SCLピンは計4本存在します。それぞれに対しては、立上がり時間アクセラレータが用意されています。同アクセラレータが起動すると、SDAとSCLのラインに3.5mA(VCCが2.7Vの場合の代表値)の電流が流れます。それにより、各信号の立上がりが高速化されます。その結果として、立上がり時間の要件を満たしつつ、より値の大きいプルアップ抵抗を使用して消費電力を削減することが可能になります。ACCがグラウンドに接続されている場合、4つのアクセラレータはすべてオンになります。一方、ACCがVCCに接続されている場合には、4つのアクセラレータはすべてオフになります。ACCがフローティングの状態である場合、SDAOUT/SCLOUTのアクセラレータだけが起動します。アクセラレータは、プルアップ電圧がVCCよりも低いピンでは使用できません。ACCによってアクセラレータを柔軟に制御できることから、LTC4304は、自身とは異なる電源を使用しているバスとの間でもインターフェースを確立することができます。

アプリケーションの例

続いて、LTC4304の利用が適している代表的なアプリケーションの例を紹介します。

スタック・バスの自動的な解消、マイクロコントローラには非依存

I2Cのプロトコルは、デバイス間の双方向の通信をサポートします。代表的な例は、ホストであるマイクロコントローラがスレーブ・デバイスとの間で通信を行うというものです。ここでは、マイクロコントローラがスレーブ・デバイスの内蔵レジスタの値を読み出すケースを考えます。その場合、マイクロコントローラはスレーブ・デバイスにクロックを供給し、各ビット・データを受信することになります。その際、マイクロコントローラとスレーブ・デバイスの間で同期が確立されていなかったとしたら問題が生じます。つまり、マイクロコントローラは既に十分な数のクロックを送出したと認識しているのに、スレーブ・デバイスは次のクロックを待っている状態になるといったことが起こり得るのです。スレーブ・デバイスがデータ・ラインをたまたまローに保持していたとすると、それ以降の通信が妨げられてI2Cバスがスタックします。

図1に示したのは、LTC4304をペリフェラル・カードに適用する例です。このカードをバックプレーンに挿入した場合、LTC4304は、カード上の各デバイスとI2Cバスをつなぐインターフェースとして機能します。通常のプラグインが行われる場合には、SDAINとSDAOUTの間、SCLINとSCLOUTの間で接続が確立されます。LTC4304が内蔵するコンパレータは、アプリケーション回路においてSDAOUTのノードとSCLOUTのノードを監視します。SDAOUTまたはSCLOUTがローである場合、同ICが内蔵するタイマーがスタートします。このタイマーは、SDAOUTとSCLOUTが共にハイである場合だけリセットされます。これらが30ミリ秒以内にハイにならない場合、バスがローにスタックしたと判断されます。その結果として、SDAINとSDAOUTの間、SCLINとSCLOUTの間の接続が遮断され、問題のあるデバイスがバスから絶縁されます。このときFAULTはローになり、スタック・バスが発生したことが示されます。その際には、マイクロコントローラと通信相手となるデバイスの同期はとれていないと考えられます。マイクロコントローラはトランザクションに必要なクロックをすべて送出し終わっているのに、問題の起きているデバイスはまだトランザクションの途中の状態にあるということになります。そのデバイスは、バスにデータを送出し終えるためにクロックを待ち続けます。しかし、バスに送出した最後のビットがたまたまローであったことから、更にクロックを取得できるまでバスをローに保持することになります(つまりバスがスタックします)。このようにして接続が途絶えたら、問題のあるデバイスがI2Cバスから絶縁され、システムの他の部分は通常の動作を自由に再開できる状態になります。

図1. LTC4304を採用した代表的なアプリケーション回路

図1. LTC4304を採用した代表的なアプリケーション回路

接続が途絶えた後、LTC4304はSCLOUTから周波数が8.5kHz、最大16個のクロック・パルスを自動的に出力します。これは、問題のあるデバイスの内蔵レジスタをクリアするのに十分なクロック数です。問題の起きたデバイスは、その状況に応じ、1個または任意の数(最大16個)のクロックによってクリアすることができます。SDAOUTとSCLOUTがハイになれば、FAULTの状態は解除されてハイになります。また、自動クロッキングは停止し、自動的に接続がイネーブルの状態になります。その後、スタックしていたスレーブがSTARTビットを認識すると、停止していた通信がアボート/リセットされます。また、フォルトの状態はマイクロコントローラに依存することなくクリアされます。フォルトをクリアできない場合には、問題のある回路はシステムから絶縁されたままになります。図2に、自動クロッキングによってスタック・バスを解消した例を示しました。

図2. 自動クロッキングによってスタック・バスを解消した例

図2. 自動クロッキングによってスタック・バスを解消した例

異なる電源への対応、レベルの変換

システムによっては、ある電圧で動作するバックプレーンとそれとは異なる電圧で動作するカードが使われることがあります。そうした場合、両者の橋渡しをするものとしてLTC4304を利用することができます。図3に代表的な回路の構成例を示しました。VCC、SDAIN/SCLINのプルアップ電圧、SDAOUT/SCLOUTのプルアップ電圧は、互いに独立している点に注目してください。

(a)VCCがSDAIN/SCLINのプルアップ電圧より高い

(a)VCCがSDAIN/SCLINのプルアップ電圧より高い

(b)VCCが出力側のプルアップ電圧に等しく、入力側のプルアップ電圧よりも低い

(b)VCCが出力側のプルアップ電圧に等しく、入力側のプルアップ電圧よりも低い.

(c)VCCが両側のプルアップ電圧よりも高い

(c)VCCが両側のプルアップ電圧よりも高い

図3. LTC4304を使用した代表的な回路の構成例。考えられる3つのシナリオと適切な構成を示しました。同ICは、ある電圧で動作するバックプレーンと、それとは異なる電圧で動作するカードの間の橋渡しをする役割を担っています。

バスのプルアップ電圧がVCCよりも低い場合、立上がり時間アクセラレータはディスエーブルの状態でなければなりません。図3(a)は、VCCがSDAIN/SCLINのプルアップ電圧より高い状況を表しています。この場合、ACCはフローティングの状態でなければならず、立上がり時間アクセラレータは入力側のみディスエーブルの状態になります。図3(b)では、VCCが出力側のプルアップ電圧に等しく、入力側のプルアップ電圧よりも低くなっています。ACCはGNDに接続されているので、4つの立上がり時間アクセラレータはすべてイネーブルの状態になります。図3(c)では、VCCが両側のプルアップ電圧よりも高くなっています。ACCはVCCに接続されているので、4つの立上がり時間アクセラレータはすべてディスエーブルの状態になります。

まとめ

LTC4304はI2Cに対応するバス・バッファです。バスの信頼性を高めるために設計された数多くの優れた機能を備えています。また、柔軟性の高いアーキテクチャをベースとしているので、あらゆるシステムに適用することが可能です。LTC4304を使用すれば、マイクロコントローラに依存することなく問題のあるデバイスを絶縁し、スタック・バスを解消することができます。また、容量バッファリング、レベル変換、ホット・スワップの機能も備えています。更に、±15kVの人体モデルに対応するESD保護機能も備えているので、あらゆるI2Cアプリケーションに対して理想的なソリューションとなります。

LTC4304のパッケージは、小型の10ピンMSOPまたは3mm×3mmのDFNです。

アナログ・デバイセズは、LTC4304の機能を削減した製品も提供しています。「LTC4303」は、FAULTによる出力フラグ機能とACC制御ピンは備えていません。それらを除けば、LTC4304と同じ機能を利用できます。また、「LTC4300A-1」からの置き換えを簡単に実現できます。但し、立上がり時間アクセラレータは常にイネーブルの状態になります。

著者について

George Humphrey

この記事に関して

最新メディア 20

Subtitle
さらに詳しく
myAnalogに追加

myAnalog のリソース セクション、既存のプロジェクト、または新しいプロジェクトに記事を追加します。

新規プロジェクトを作成