I2C通信インターフェース
2023年10月20日
組み込みシステムと電子機器の世界では、コンポーネント間の効率的な通信が不可欠です。現在利用可能な数多くの通信プロトコルの中でも、I2C(Inter-Integrated Circuit)はその簡潔さ、柔軟性、低消費電力性から、多くのエンジニアや開発者に人気の選択肢として際立っています。
I2Cとは何ですか?
I²C(アイ・スクエアード・シーまたはアイ・ツー・シーと発音)は、広く採用されているシリアル通信プロトコルであり、マルチマスター・マルチスレーブ方式のシングルエンドシリアルバス設計を特徴とし、短距離通信に適している。 I²Cのユニークな特徴は、通信にSDA(シリアルデータ)とSCL(シリアルクロック)の2本の配線のみを使用することで、接続を簡素化しスペースを節約できる点です。
正式表記は「I²C」であり、「アイ・スクエアード・シー」と発音されますが、簡略化のため「I2C」と表記します。²記号は上付き数字の2であり、Iが自身と2回掛け合わされることを意味します。これは通信に使用される2本の配線を指しています。
I2Cの機能:
- I2Cはシリアル同期データ通信プロトコルである。
- 通信には2本のワイヤのみを使用します - シリアルデータとシリアルクロック。
- 同一バス上で複数のマスターと複数のスレーブデバイスをサポートします。
- 半二重通信 - マスターデバイスとスレーブデバイス間の通信は双方向で行えるが、同時には行えない。
- クロックストレッチング - スレーブデバイスはクロックラインを保持し、データ処理にさらなる時間を確保できる。
- 仲裁 - 2つのマスターが同時に送信を開始した場合、I2Cにはどちらのマスターが継続し、どちらが待機するかを決定する組み込み方式があり、データの整合性を保証します。
- 7ビットのアドレス指定システムであるが、10ビットのアドレスもサポートできる。
- 異なる速度をサポート - 標準I2C仕様では4つの速度グレードを定義しています:標準モード(100kbps)、高速モード(400kbps)、高速モードプラス(1Mbps)、および高速モード(3.4Mbps)。
詳細はこちら:シリアル通信とパラレル通信
I2Cはどのように動作するのか?
I2Cは、双方向オープンドレインラインであるSDAとSCLの2本の配線を利用する2線式シリアルバスであり、両ラインともプルアップされている。
- SDA(シリアルデータライン):このラインはデータを伝送します。
- SCL(シリアルクロックライン):このラインは同期を提供します。
I2Cバス上のデバイスは、マスターまたはスレーブのいずれかである:
- マスター(コントローラ):バス上のデータ転送を開始し制御する。
- スレーブ(周辺機器):マスターに応答する。
「マスター」と「スレーブ」という用語は、I2Cバス上のデバイスの役割を表すために歴史的に使用されてきたが、多くの文脈では主に「コントローラ」と「ペリフェラル」に置き換えられている。
I2Cデータ通信プロセス
- バスアイドル(バス空き)状態:
- 通信が開始される前には、SDA(シリアルデータライン)とSCL(シリアルクロックライン)の両方がハイレベルを維持し、バスがアイドル状態であることを示す。
- 開始条件:
- マスターによって開始され、SDAラインがハイからローに変化し、かつSCLラインがハイの状態で開始条件が発生する。これにより、すべてのスレーブデバイスに通信が開始されようとしていることが通知される。
- アドレスの送信:
- マスターデバイスは、通信したいスレーブに7ビットのアドレスを送信します。これに続いて8番目のビットである読み取り/書き込み(R/W)ビットが送信され、操作の方向を示します:
0書き込み用1読むために。 - この組み合わせた8ビットのシーケンスはアドレスフレームと呼ばれる。
- 10ビットアドレスの特殊なケースでは、マスターは2バイトを送信する。最初のバイトは11110で始まり、続いて10ビットアドレスのビット9と8、そしてR/Wビットが続く。2番目のバイトには10ビットアドレスのビット7から0が含まれる。
- マスターデバイスは、通信したいスレーブに7ビットのアドレスを送信します。これに続いて8番目のビットである読み取り/書き込み(R/W)ビットが送信され、操作の方向を示します:
- 確認応答(ACK)ビット:
- アドレスとR/Wビットが送信された後、マスターはSDAラインを解放する。アドレス指定されたスレーブデバイスは、アドレスを正常に受信し通信準備が整ったことを示すため、SDAラインをローレベル(応答ビット)に引き下げる。
- データ転送:
- 書き込み操作では、マスターがスレーブに1バイトのデータを送信する。スレーブはSDAラインを1クロックパルス間ローレベルにすることで受信を応答する。
- 読み取り操作において、スレーブは1バイトのデータをマスターに送信する。マスターは受信を承認するが、読み取り操作中の最終バイト送信後、SDAラインを解放する(NACKまたは承認なし)。これによりスレーブはデータ送信を停止するよう指示される。
- 停止条件:
- 通信セッションを終了するには、マスターはSCLラインがハイレベルである間にSDAラインをローからハイへ遷移させることでストップコンディションを生成する。ストップコンディション後、バスはアイドル状態に戻る。
- マスターは、別の読み取りまたは書き込み操作のためにバス制御を維持するため、繰り返し開始条件を生成することもできる。これは、バスを解放せずにデータ方向を変更するといった、より複雑な操作で頻繁に使用される。
詳細はこちら:ボーレートとは何か
複数のスレーブへの対応
複数のスレーブデバイスが存在する場合、マスターは各デバイス固有のアドレスを使用して通信します。該当するアドレスを持つスレーブのみが応答し通信を行い、他のデバイスはメッセージを無視します。
クロックストレッチ
スレーブは、命令の処理やデータのフェッチに追加時間が必要な場合、SCLラインを保持し続ける(クロックストレッチと呼ばれるプロセス)ことができる。マスターは、SCLが解放されるまで待機しなければならない。
バス・アービトレーション(マルチマスター用)
仲裁とは、複数のマスターが同時に、または短時間差で通信を開始しようとした際に、どのマスターデバイスがバスの制御権を得るかを決定するプロセスである。I2Cは複数マスターをサポートしており、複数のマスターが同時にバス制御を試みてもメッセージが破損することはない。
I2C アービトレーション手順:
- マスターが伝送を開始すると、バスを制御しているとみなす。
- アドレスビットとデータビットを送信する際に、各ビット書き込み後にSDAラインをチェックする。書き込みが成功した場合、
0そして読み戻す1別の主人が制御していることを認識し、後退するため、仲裁に敗れる。 - 仲裁に負けたマスターは直ちに送信を停止し、現在の転送終了を示すSCL(シリアルクロック)ラインがHIGHになるのを待ってから再試行する。
わずか2本の配線で効率的なデータ転送を実現するI2Cは、信頼性とコスト効率に優れた通信を求めるシステムにおいて、広く普及したシリアル通信インターフェースとなっている。
詳細はこちら:16x2 COG LCDでのI2C実装例コード
I2Cの利点:
- シンプルさ:接続するデバイスの数にかかわらず、必要な配線はわずか2本のみ。
- 柔軟性:複数のマスターとスレーブをサポートします。
- 電力効率:I2C周辺機器は、使用していない際にバスに影響を与えることなく電源をオフにできる。
- 内蔵アドレス指定:バス上の各デバイスには固有のアドレスが割り当てられている。
- 広くサポートされている:多くのマイクロコントローラや周辺機器にはI2Cハードウェアインターフェースが内蔵されており、統合が容易です。
- 柔軟な速度モード:I2Cは複数の速度モードをサポートします。
I2Cの欠点:
- 速度制限:通常、SPIなどの他のプロトコルよりも遅い。
- 距離制限:I2Cは短距離通信向けに設計されています。長距離では信号の完全性とノイズが問題となる可能性があります。
- 大規模ネットワークにおける複雑性:デバイスが増えるにつれ、アドレス指定が複雑化する可能性がある。
- エラーチェックなし:組み込みのエラーチェック機構が欠如している。
- シングルエンド:差動信号伝送ではないため、ノイズ耐性が向上する可能性がある。
I2Cとその他のシリアル通信プロトコル
プロジェクトでシリアル通信プロトコルを選択する際には、アプリケーションの具体的な要件を考慮することが重要です。I2Cは一般的な選択肢ですが、SPI、RS-232、CAN、UARTなど他のプロトコルも利用可能です。各プロトコルには固有の長所と短所があるため、決定前に利点と欠点を慎重に比較検討することが重要です。
I2C 対 SPI(シリアル周辺機器インターフェース):
- 配線:SPIはより多くの配線を必要とする:SCLK(シリアルクロック)、MOSI(マスター出力スレーブ入力)、MISO(マスター入力スレーブ出力)、および各デバイス固有のSS(スレーブセレクト)。対照的に、I2CはSDAとSCLのみを必要とする。
- 速度:SPIはデータ伝送にアドレスフェーズが存在しないため、I2Cよりも高速である可能性がある。
- 柔軟性:I2Cはネイティブでマルチマスター構成をサポートしていますが、SPIはサポートしていません。
I2C 対 UART (ユニバーサル非同期送受信機):
- プロトコルの複雑さ:UARTは2つのデバイスが2本のライン(TXとRX)で通信するだけなのでより単純である。I2Cは2本のラインだけで複数のデバイスを接続できる。
- 同期方式:UARTは非同期(クロックライン不要)であるのに対し、I2Cは同期(クロックラインが必要)である。
I2C 対 CAN(コントローラエリアネットワーク):
- ユースケース: CANは、ノイズの多い環境下での信頼性が極めて重要な車両や産業システム向けに設計されています。I2Cは、IC間の短距離オンボード通信に適しています。
- 信頼性:CANにはエラーチェックおよび訂正機能が組み込まれているが、I2Cには組み込まれていない。
I2C 対 RS232:
- RS232は3本の配線を使用し、2つのデバイス(送信機1台と受信機1台)のみをサポートします。一方、I2Cは2本の配線のみで複数のデバイスをサポートします。
- RS-232は長距離通信に適している。
| プロトコル | ワイヤ数 | スピード | 複雑性 | 消費電力 | 一般的な用途 |
|---|---|---|---|---|---|
| I2C | 2 | 遅い | 中 | 低 | 組込みシステム、センサー、ディスプレイ、アクチュエータ、周辺機器。 |
| とくべつもくてきじぎょうたい | 4 | 高速 | 中 | 中 | 高速通信、メモリチップ。 |
| UART | 2 | 遅い | 低 | 低 | 非同期通信、長距離におけるシリアル通信。 |
| CAN | 2 | 高速 | 中 | 中 | 自動車および産業用アプリケーション。 |
| RS-232 | 3 | 遅い | 中 | 中 | コンピューター、プリンター、モデム。 |
結論
I2Cは、電子機器の世界で数十年にわたり実証された有効性を誇る不可欠な通信プロトコルです。その簡潔さと、わずか2本のラインで複数のデバイスを接続できる能力が相まって、多くのアプリケーションで広く採用されています。しかし、他のプロトコルと同様に、I2Cにも限界があり、あらゆるシナリオに最適なわけではありません。システム設計時には、アプリケーションの具体的な要件を評価し、それらの要件に最も適合する通信プロトコルを選択すべきです。