メインコンテンツへスキップ

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)が割り当てられる

  • マスターがスレーブアドレスを送信して通信相手を指定

通信手順(基本)

  1. STARTコンディション:SCLがHighの間にSDAをHigh→Low

  2. スレーブアドレス送信+R/Wビット

  3. ACK/NACK:相手が応答ビットで確認

  4. データ送信/受信(1バイトごとにACK/NACK)

  5. 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など主要開発環境に標準サポートあり