Inter-Integrated Circuit(I2C)バスでIC接続が容易になる理由、およびその使用方法

著者 Art Pini

DigiKeyの北米担当編集者の提供

プリント回路基板(プリント基板)上でパラレルバスを使用する集積回路間の通信および制御は、実用的でありません。8ビットプロセッサでさえ、データだけで16ラインが必要で、アドレスバスにはさらに多くのラインが必要です。複数のICを共通の通信バスに配置する必要がある場合、問題はさらに難しくなります。それらすべてのプリント基板のトレースランに十分なスペースがありません。この問題の解決策は、2線式シリアルバスであるInter-Integrated Circuit(I2C)などのシリアル通信バスを使用してICをリンクすることです。

この記事では、I2Cバスの起源と、IC間で効率的なシリアルリンクを提供するための動作の仕組みを説明します。それから、I2Cバスの物理的な実装方法、プロトコル構造、およびこのユビキタスな通信バスの一般的な用途について説明します。デモンストレーション用に、Microchip Technologyが提供するサンプルI2Cインターフェースおよびソリューションを使用します。この記事では、I2Cとシステム管理バス(SMBus)の類似点と相違点についても説明します。

I2Cバスについて

I2Cバスは、一般的なプリント基板における集積回路の効率的な通信および制御のためのシンプルな双方向2線式バスとして、1980年代前半にPhillips Semiconductors(現NXP Semiconductors)によって開発されました。最初の仕様が完成した1992年以降、このバスは50社以上のICメーカーの部品に提供されるデファクト標準となりました。こうした大規模展開により、カスタム設計を必要とすることなく、I2Cバス構造にICを容易に追加できるシステム設計アプローチが可能になります。SMBusや電源管理バス(PMBus)などの他の専用バスの一部も、基本的なアーキテクチャを共有しています。

I2Cバスはアドレス指定可能なバスであるため、複数のICおよびセンサをリンクできます。7ビットまたは10ビットのアドレスフィールドにより、マスターデバイスは選択したデバイスにメッセージを送信できます。当初、I2Cの最大クロック速度は100kHzでした。しかし、年月の経過とともに、より高速な動作モードがその限界を3.4MHzにまで押し上げました。

I2Cバスは、シリアルデータライン(SDA)とシリアルクロックライン(SCL)という2本の線を使用します。SDAとSCLは、オープンドレイン/コレクタの双方向ラインで、電流源またはプルアップ抵抗を介して正電源バスに接続されます。このバスには複数のデバイスを接続できますが、バス静電容量によって最大数が制限されています。マスターデバイスはバスを制御し、バス上の各デバイスには一意のアドレスがあります。マスターデバイスは、このバスを介してデータを送受信できます(図1)。I2Cは、マルチマスター動作をサポートしています。これは、2台以上のマスターデバイスが同時にデータ転送を開始しないようにするための衝突検出およびアービトレーションを特長とします。ただし、この記事ではシングルマスター構成に焦点を当てます。

Microchip Technologyのデモンストレーション用プリント基板の回路図(クリックして拡大)図1:I2Cバスを実装し、それを5台の異なるデバイスに接続する、Microchip Technologyのデモンストレーション用プリント基板の回路図。マスターデバイスは、コネクタP1を介してオフボード接続されています。緑色で囲まれた部分がSCLおよびSDAラインで、青色で丸く囲まれた部分が2個のプルアップ抵抗です。(画像提供:Microchip Technology)

図1は、Microchip TechnologyのPKSERIAL-I2C1 I2Cデモンストレーションボードの回路図を示しています。このボードは、EEPROM、温度センサ、12ビットのA/Dコンバータ(ADC)、10ビットのD/Aコンバータ(DAC)、8ビットのシリアル-パラレルコンバータを含む5台の異なるデバイスを使用するI2Cバスを実装します。マスターデバイスはボード上にはなく、コネクタP1を介して接続されています。緑色で囲まれた部分がSDAおよびSCLバスラインで、青色で丸く囲まれた部分がプルアップ抵抗です。

一般的に、SDAおよびSCLレベルとは正電源電圧の固定割合であり、通常はVDDと表示されます。基準レベルは、ロジック「1」(high)とロジック「0」(low)に対して、それぞれVDDの70%および30%で設定されています。

クロック信号は、転送される各データビットに対して1クロックのバーストで発生します。クロックがhighである間は、SDAライン上のデータを有効にする必要があります。クロックがlowの間のみ、データを変更できます。

設計者の観点から考えると、I2CインターフェースはICに統合されており、インターフェースを設計する必要がないため、新しいプロジェクトは簡素化されます。各デバイスは、簡単にバスへ直接接続されます。他の回路に影響を与えずに、ICをバスに追加したり、バスから取り外したりできます(ICの合計数が静電容量を超えないと仮定した場合)。このシンプルな2線式バスにより、各ICのピン数とプリント基板上の配線数が最小化されます。

I2Cプロトコル

このバスは8ビット指向で、バイト単位で通信します。前述のように、当初の最大クロックレートは、現在のStandard Modeとなっている100kHzでした。現在、このバスはFast Modeで400キロビット/秒(kbit/s)、Fast Mode Plusで最大1メガビット/秒(Mbit/s)、High Speed Mode(Hs-Mode)で最大3.4Mbit/sをサポートしています。

I2Cプロトコルは、バス上の標準的な転送を調べることで、最もよく説明できます(図2)。スクリーン画像は、低速シリアルデータトリガおよびデコードオプションWS4KHD-EMB TDを備えたTeledyne LeCroyのオシロスコープからのものです。このオシロスコープのオプションにより、I2Cを含む最大19個の低速シリアルデータインターフェースをトリガおよびデコードできます。

一般的なI2Cデータパケットの画像(クリックして拡大)図2:スタートビット、アドレスフィールド、肯定応答ビット、それぞれ独自のACKビットを備えた17データバイト、およびストップビットから構成される一般的なI2Cデータパケット。各フィールドは、カラーコード済みのオーバーレイによって特定されます。上(黄色)のトレースはSDAパケット全体で、その下のトレースはSCLクロック(赤色)です。3番目と4番目のトレースは、両信号を水平方向に拡大表示したものです。(画像提供:DigiKey)

オシロスコープは、スタート、ストップ、欠落した肯定応答(ACK)、アドレス、データ、アドレスとデータ、フレーム長、およびEEPROMデータ転送など、特定のシリアルイベント上でトリガできます。シリアルデータ規格のプロトコル要素は、カラーコード済みのオーバーレイによって特定されます。各プロトコルフィールドは、バイナリ、16進、またはASCIIでデコードされ、オーバーレイ内に選択されたコードが表示されます。

SDA信号は黄色のトレースとして表示され、SCL信号は赤色のトレースとして表示されます。灰色のオーバーレイボックスは、スタートおよびストップ機能を示しています。赤れんが色のオーバーレイはアドレスデータを示しており、青色のフィールドはパケットデータ、オリーブ色のオーバーレイボックスはACK機能を示しています。

最上部のトレースは、スタートからストップまでのI2C SDAパケット全体を示しています。そのすぐ下は、対応するSCL信号です。3番目のトレースはSDA信号の時間幅を拡大表示したトレースで、その下が同期されたSCL信号です。

バスがフリーの場合、SDAおよびSCLラインは転送間でhigh状態のままです。SCL信号は、クロックレートの9つのパルスのバーストで構成されています。1つは転送中の各データビット用、もう1つはACKビット用です。

すべてのバストランザクションは、マスターが生成するスタートビットで始まります。これは、拡大されたSDAトレースでは灰色のオーバーレイボックスとして示されています。スタートは、SCLラインがhigh状態の間に、SDAラインをlowにプルするマスターによって表示されます。マスターがスタートビットを発行すると、バスはビジーであるとみなされます。マスターは複数のスタートを発行できます。これは多くの場合、後続のスタートがリスタートと呼ばれる状況です。

すべてのデータ転送の長さは8ビット(1バイト)で、それぞれにACKビットが続きます。ビットは最上位ビット(MSB)を先頭にして転送されます。各バイトの転送を確認する必要があります。スレーブデバイスがビジーで、データを送受信できない場合は、SCLラインをlowにプルできます。これにより、スレーブデバイスがSCLラインをリリースするまで、マスターデバイスは待機状態にさせられます。

送信デバイスがSDAラインをリリースした後、9番目の肯定応答クロックパルスの前に、ACKビットが形成されます。受信デバイスがデータバイトを受信すると、SDAラインをlowにプルします。図2のSDAの拡大図では、9番目のクロックパルス直前で短時間に急上昇しています。これは、SDAラインがリリースされてhigh状態に戻ったことを示しています。レシーバはACK信号を生成するSDAラインをプルダウンします。これは、オリーブ色のボックスオーバーレイで表示されています。9番目のクロックパルスの手前でレシーバがSDAラインをプルダウンしない場合、それは否定応答(NACK)です。NACKが発生した場合、マスターはストップ信号を生成して転送を中止するか、繰り返しスタートを発行して再試行できます。

スタート状態の直後に、スレーブアドレスが発行されます。これは、赤れんが色のオーバーレイボックスで表示されます。7ビットまたは10ビットの2種類のアドレス形式が可能ですが、7ビットのアドレスが最も一般的です。スタート後の最初の7ビットは、アドレスデータを表しています。8番目のビットは、データの方向(読み取りまたは書き込み)を示しています。 書き込みはlow状態のSDAラインによって示されます。この際にSDAラインがhighの場合は、読み取り操作を示します。10ビットアドレス指定は、スタート状態後の最初の2バイトを使用します。I2Cは、内部機能用に複数のアドレスを留保しています。デコードアドレスデータは、バイナリ、16進、またはASCII形式で、アドレスのオーバーレイボックスに表示されます。

青色のオーバーレイフィールドは、データ転送を示しています。それぞれの長さは8ビットで、その後にACK/NACK応答が続きます。I2Cパケットのデータバイト数は無制限ですが、図2には17バイト表示されています。アドレスデコードなどのデコードされたデータは、データのオーバーレイボックスに表示されます。データストリームの後に、データ転送の最後にマスターによって生成されたストップビットが続きます。これは、最上部のデータトレースにある灰色のオーバーレイボックスで表示されます。ストップビットは、SCLラインがhigh状態にある間のSDAラインにおけるlowからhighへの遷移です。ストップ信号の後に、バスは再びフリーになります。

画面の下部にある表は、トリガ以降の時間、アドレス長、アドレス、読み取り/書き込み操作、パケット長、およびデータコンテンツの概要を含む関連データパケットについての情報をまとめたものです。表のエントリ数は、スコープによって取得されたI2Cパケットの数と一致します。この事例ではシングルラインのみです。

プロトコルエラーが発生すると、他のプロトコルのオーバーレイボックスの背後にある朱色のボックスで表示されます。

I2Cデバイス

I2Cバスの最大の利点の1つは、それを設計に組み込んだデバイスの数が非常に多いことです。Microchip Technologiesのデモボードは、I2Cバスを組み込むICタイプの例や、SMBusのような派生製品の1つを提供します。

Microchip TechnologyのPIC16F677は、多くの組み込み設計で使用可能な8ビットマイクロコントローラです。これは、他のコントローラや周辺機器へのシリアルペリフェラルインターフェース(SPI)またはI2Cと通信するために制御可能な同期シリアルポートを実装しています(図3)。

Microchip TechnologyのPIC16F677、8ビットマイクロコントローラの図図3:Microchip TechnologyのPIC16F677は、SPIまたはI2Cバスとしてプログラム可能な同期シリアルポート(オレンジ色で囲まれた部分)を含む8ビットマイクロコントローラです。(画像提供:Microchip Technology)

このマイクロコントローラは、7ビットまたは10ビットアドレス指定を使用するI2Cのマスターおよびスレーブモードの両方をサポートします。これは、I2C SCLクロック信号に対してSCK/SCLピンを使用し、データ信号に対してSDI/SDAピンを使用します。

これら2本のピンは、他のデバイスとの通信を可能にするために、I2Cバス上でSCLおよびSDAラインに接続されています。一般的に、Microchip TechnologyのTCN75AVOA713 2線式シリアル温度センサなど、I2Cベースのセンサに接続します(図4)。

Microchip TechnologyのTCN75A温度センサの図図4:Microchip TechnologyのTCN75A温度センサは、PIC16F677マイクロコントローラに直接接続して、温度データの通信を行います。(画像提供:Microchip Technology)

シリアル通信機能を備えることで、この温度センサの機能性が向上しました。そのユーザープログラム可能な内部レジスタは、温度測定分解能やパワーセーブシャットダウンモードを設定するのに使用できます。また、温度範囲がプリセット制限を超えたことを示すアラート出力を設定するのにも使用できます。

さらに、I2Cシリアルデータストリームをデコードしてパラレルデータにブレイクアウトするデバイスも数多くあります。Microchip TechnologyのMIC74YQS-TR 2線式I/Oエキスパンダおよびファンコントローラについて考えてみましょう(図5)。

Microchip TechnologyのMIC74YQS-TR I/Oエキスパンダの図図5:Microchip TechnologyのMIC74YQS-TR I/Oエキスパンダは、シリアルデータストリームを8本の独立したパラレルI/Oラインに変換します。(画像提供:Microchip Technology)

このICは、8本の独立したI/Oラインを提供する、完全にプログラム可能なI/Oエキスパンダです。I/Oラインは、入力または出力として個別にプログラム可能です。図5は、シリアルバスの制御下で8個のLEDを駆動するMIC74YQS-TRを示しています。これは、図1で示したI2Cデモボード上でのMCO23008の使用と似ています。MIC74YQS-TRは、パワーレギュレータとともに、4つの最上位ビットを使用してファンモータ速度制御を実装することもできます。

SMBusとI2C

I/Oエキスパンダへのシリアル入力はSMBus用に設計されていますが、I2Cバスとも互換性があります。SMBusの仕様はI2Cに基づいており、1994年にIntelとDuracellによって定義されました。主な違いとして、標準モードのI2Cの論理レベルはVDDに応じたものになりますが、SMBusの論理レベルは固定されています。多くの場合、VDDは3~5ボルトであり、経験からしてこれは問題になりません。

別の違いとして、SMBusのクロックレートは100kHz以下に制限されていますが、I2Cにはより高いクロックレートをサポートする複数のモードがあります。バス互換性に対処する場合、これによって最大クロックレートが100kHzまたはI2Cの標準クロックモードに制限されます。

したがって、非常に特殊な状況を除き、SMBusとI2Cには互換性があります。

結論

I2Cバスとその派生製品は、あらゆるタイプの何百ものICで普及しているため、多面的な設計および用途での接続が容易になります。混合信号およびアナログセンサを結合することにより、マイクロコントローラベースの組み込みシステムの範囲が拡大されます。シンプルな2線式シリアルデジタルインターフェースは、これらすべてを実現します。

DigiKey logo

免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。

著者について

Image of Art Pini

Art Pini

Arthur(Art)PiniはDigiKeyの寄稿者です。ニューヨーク市立大学の電気工学学士号、ニューヨーク市立総合大学の電気工学修士号を取得しています。エレクトロニクス分野で50年以上の経験を持ち、Teledyne LeCroy、Summation、Wavetek、およびNicolet Scientificで重要なエンジニアリングとマーケティングの役割を担当してきました。オシロスコープ、スペクトラムアナライザ、任意波形発生器、デジタイザや、パワーメータなどの測定技術興味があり、豊富な経験を持っています。

出版者について

DigiKeyの北米担当編集者