I2C
I2Cは2本の信号線(SCLとSDA)で多点接続を実現する同期式シリアルバスである。マスタがクロックを供給し、アドレス指定でスレーブを選択して半二重通信を行う。最小配線・小面積で実装でき、低速周辺機器の制御や設定レジスタの読み書きに適する。プルアップ抵抗によるワイヤドAND(オープンドレイン)構成を採り、複数デバイスが同一バスを共有可能であり、クロックストレッチやマルチマスタ調停などの機構を備える点に特徴がある。
物理層と信号線
I2CはSCL(Serial Clock)とSDA(Serial Data)の2線式で動作する。両線ともオープンドレイン(またはオープンコレクタ)出力で、外付けプルアップ抵抗によってHighレベルが生成される。論理Lowは任意デバイスが線を引き下げることで成立するため、複数デバイス接続と優先的なLow支配が自然に実現される。配線は短く、寄生容量を抑えることが信号立ち上がり時間の確保に直結する。
アドレッシング
7ビットアドレスが一般的で、アドレスは上位7ビットで表され、後続のR/Wビットで方向を指定する。10ビットアドレス拡張も規定され、大規模システムでのデバイス増加に対応する。アドレスはベンダ既定またはピン設定で決まり、衝突回避のためボード設計時に重複を排除する。
通信基本シーケンス
- スタート条件:SCLがHighの間にSDAをHigh→Lowへ遷移させ通信を開始する。
- アドレス+R/W:7ビット(または10ビット)アドレスとR/Wビットを送出する。
- ACK/NACK:各バイト後に受信側がSDAをLowに保持してACKを返す。無応答や異常時はNACKとなる。
- データ転送:1バイト単位でMSBから送受信する。
- ストップ条件:SCLがHighの間にSDAをLow→Highへ遷移させ終了する。
速度モード
I2C規格にはStandard(~100kHz)、Fast(~400kHz)、Fast Mode Plus(~1MHz)、High-Speed(~3.4MHz)がある。高速化ほど立ち上がり時間規格が厳しくなり、プルアップ抵抗値の低減やドライバ能力の検討が不可欠となる。実装対象デバイスの許容モードを一致させることが前提である。
プルアップ抵抗とバス容量
立ち上がり時間はR(プルアップ)×C(配線・入力容量)で決まり、規格値以内に収める必要がある。Rが大きいと立ち上がりが遅く、Rが小さすぎると消費電流増加やドライバ負荷悪化を招く。基板配線の短縮、枝線の抑制、未使用フットプリントの除去は有効である。必要に応じてバッファやリピータ、FETスイッチによるセグメント分割を検討する。
クロックストレッチ
スレーブが内部処理のためにSCLをLowへ保持し、マスタの転送を一時停止させる機構がクロックストレッチである。対応可否はデバイス依存であり、マスタ側ファームウェアはストレッチを適切に許容し、タイムアウトで異常を検知する設計が望ましい。
マルチマスタと調停
I2Cでは複数マスタが同一バスを共有可能である。開始競合時にはSDAをモニタしながら自送信ビットとバス実測を比較し、Lowを観測した側が敗者として即時送信を停止する。調停喪失後は一定待ち時間を設けて再試行する。
レジスタマップ設計と反復アクセス
周辺ICは内部にレジスタマップを持ち、先頭にインデックス(アドレス)を書き、その後に連続読み出し・書き込みを行う方式が一般的である。連続アクセス(バースト)はオーバーヘッドを削減し、電流計測ICやセンサの時系列データ取得に有効である。
エラーハンドリング
- ACK欠落:配線切断・電源未投入・アドレス誤りを疑い、リトライとフォールト記録を行う。
- バスビジー:SDAがLowで固着する場合、クロックを人工的に数回供給して復帰を試みる。
- タイムアウト:ストレッチ過多やハング対策として実装する。
- リカバリ:失敗回数閾値でデバイス再初期化、必要ならソフトリセットを実行する。
電気的保護とEMC
静電気やサージに対してはESD保護素子の配置、シリーズ抵抗の挿入、グラウンド帰路の低インピーダンス化が有効である。高速モードではエッジ鈍化によるアイマージン低下に注意し、必要に応じ終端やスルーレート制御機能を評価する。
ファームウェア実装の実務
マイコン内蔵コントローラを用いる方法と、GPIOでビットバンギングする方法がある。前者はDMAや割り込みによりCPU負荷を抑制でき、後者は非標準シーケンスやリカバリ動作を柔軟に実装できる。ドライバ層ではトランザクションAPI(書込み、読み出し、書いてから読む)を抽象化し、上位アプリケーションはレジスタ定義に専念できる構造が保守性に優れる。
他プロトコルとの使い分け
I2Cは少ピン・低コスト・多端末接続に強い。一方でスループットや距離ではSPIやUARTに劣ることがある。センサ設定や低速モニタはI2C、高速データ搬送はSPI、長距離・非同期はUART/RS-485といった住み分けが実務的である。
設計チェックリスト
- 許容速度モードの合致、アドレス競合の有無、プルアップ値とバス容量の整合。
- 配線長・枝線・共通インピーダンスの最小化、必要に応じたバッファ挿入。
- クロックストレッチ対応、タイムアウトと例外処理、バスリカバリ手順の用意。
- 電源シーケンスとリセット要件、上位レイヤの再初期化手順。
デバッグと評価の要点
ロジックアナライザでスタート/ストップ、ACK/NACK、クロックストレッチの可視化を行い、立ち上がり時間と電圧レベルをオシロで検証する。バス負荷を増やしたワースト条件試験、温度・電圧変動下のリトライ率観測、ノイズ印加時の耐性評価を計画的に実施することが信頼性を高める。
コメント(β版)