I2C通信の基本
📌 はじめに
I2C(Inter-Integrated Circuit)は、Philips(現NXP)によって開発されたシリアル通信規格で、主に基板上のIC同士を短距離・低速・シンプルな配線で接続するために使われます。マイコンやセンサーモジュール、ディスプレイなどの間でよく採用されており、Raspberry PiやArduinoなどの電子工作でもおなじみです。
🏛 I2Cの背景と誕生理由
1980年代、家電製品やオーディオ機器の内部で複数のICをつなぐ際、従来のパラレル通信では配線本数が多く、基板設計が複雑になっていました。
Philipsは、少ない配線(2本)で複数デバイスを制御できるマルチマスター・マルチスレーブ対応の通信方式としてI2Cを開発。これにより、製造コストの削減と基板の小型化が進みました。
⚙️ I2Cの物理的特徴
-
配線本数:2本のみ
-
SDA(Serial Data Line):データ線
-
SCL(Serial Clock Line):クロック線
-
-
バス構成:オープンドレイン/オープンコレクタ+プルアップ抵抗
-
速度モード
-
標準モード:最大100 kbps
-
ファストモード:最大400 kbps
-
ファストモードプラス:最大1 Mbps
-
ハイスピードモード:最大3.4 Mbps
-
I2Cは短距離通信が前提で、数十cm程度までが安定運用の目安です。長距離では信号の減衰やノイズの影響が大きくなります。
🔄 通信の基本動作
アドレッシング
-
各スレーブには固有のアドレス(7bitまたは10bit)が割り当てられる
-
マスターがスレーブアドレスを送信して通信相手を指定
通信手順(基本)
-
STARTコンディション:SCLがHighの間にSDAをHigh→Low
-
スレーブアドレス送信+R/Wビット
-
ACK/NACK:相手が応答ビットで確認
-
データ送信/受信(1バイトごとにACK/NACK)
-
STOPコンディション:SCLがHighの間にSDAをLow→High
ACKは「受け取ったよ」の意味、NACKは「もういらない/エラー」の意味です。
🧩 マルチデバイス接続の強み
-
1本のバスに複数のスレーブ接続可(配線はSDAとSCLを共通化)
-
マルチマスター対応(複数のマスターがバスを共有可能)
-
新しいデバイスを追加しやすく、基板設計の拡張性が高い
【成功】1つのI2Cバスに温度センサー、LCD、EEPROMを同時接続し、2本の配線だけで制御できます。
📚 主な用途
-
センサー(温湿度、加速度、照度など)とのデータ通信
-
メモリ(EEPROM、FRAM)への読み書き
-
液晶ディスプレイやLEDドライバ制御
-
RTC(リアルタイムクロック)設定と取得
🆚 他の通信方式との比較
項目 | I2C | SPI | UART |
---|---|---|---|
配線本数 | 2 | 4以上 | 2 |
複数デバイス | 可 | 可 | 基本不可 |
速度 | 低〜中速 | 高速 | 中速 |
制御の容易さ | 高い | 高い | 高い |
用途 | 短距離・多デバイス | 高速通信 | 長距離・点対点 |
I2Cはクロック同期型なので、長距離や高ノイズ環境には不向きです。
💡 I2Cを使う嬉しさ
-
配線がシンプル:2本の信号線+電源GNDでOK
-
複数機器を容易に増設:アドレス設定だけで追加可能
-
広い対応機器:電子工作から産業機器まで、I2C対応ICは非常に豊富
-
ライブラリ充実:ArduinoやRaspberry Piなど主要開発環境に標準サポートあり