コンテンツにスキップ

I2C

概要

I2C(Inter-Integrated Circuit)は、複数のデバイスを少ない配線で接続するためのシリアル通信規格である。

STM32やRaspberry Piなどのマイコンで広く利用されており、センサやOLEDディスプレイとの通信によく使用される。


特徴

  • 配線はSDA(データ線)とSCL(クロック線)の2本のみ
  • 複数のデバイスを同じバスに接続可能
  • 各デバイスは固有のアドレスを持つ
  • マスター・スレーブ方式で通信を行う
  • 半二重通信

信号線

信号名 説明
SDA Serial Data Line(データ線)
SCL Serial Clock Line(クロック線)
VCC 電源
GND グランド

通信方式

I2Cでは、マスターが通信を開始し、スレーブに対してアドレスを送信する。

STM32 (Master)
    │
    ├── SDA
    └── SCL
         │
 ┌───────┼────────┐
 │       │        │
IMU     OLED    EEPROM

通信手順

  1. スタートコンディション送信
  2. スレーブアドレス送信
  3. 読み取り/書き込み指定
  4. データ送受信
  5. ストップコンディション送信

ACK/NACK

I2Cでは1バイト送信するごとに受信側が応答を返す。

信号 意味
ACK 正常受信
NACK 受信失敗または通信終了

通信速度

代表的な通信速度は以下の通り。

モード 速度
Standard Mode 100 kHz
Fast Mode 400 kHz
Fast Mode Plus 1 MHz
High Speed Mode 3.4 MHz

プルアップ抵抗

I2CのSDAおよびSCLにはプルアップ抵抗が必要である。

一般的な値:

  • 4.7 kΩ
  • 2.2 kΩ
  • 10 kΩ

配線長や通信速度に応じて選定する。


利点

  • 配線数が少ない
  • 複数デバイスを接続可能
  • 実装が容易
  • センサとの接続に適している

欠点

  • 通信速度はSPIより遅い
  • 配線が長いとノイズの影響を受けやすい
  • 同一アドレスのデバイスはそのままでは共存できない

Asterでの利用

AsterではI2Cを使用して各種センサや表示デバイスとの通信を行う。

接続デバイス

デバイス 用途
IMU 姿勢・加速度取得
OLED 状態表示
その他センサ 状態監視

通信方向

STM32 (ALEO)
   │
   ├─ I2C → IMU
   ├─ I2C → OLED
   └─ I2C → センサ

I2Cは主に機体内部のデバイス制御および状態取得に使用される。