- 名称
I²C : Inter Integrated Circuit
- 同期・半2重
2線式のシリアル・バスで,ひとつはクロック,もうひとつをデータに使う。
それぞれ,
SCL(Serial Clock Line)
SDA(Serial DAta line)
と呼ばれ
データはクロックに同期してやり取りされる。
データの通信方向は,送信・受信の両方に対応している。
1本のデータ線を,送信・受信を切り替えて使う。
- オープンドレイン出力
比較:プッシュプル出力
HIGH:信号線に規定電圧を出す (push)
LOW:GNDに引っ張る (pull)
ワイヤード・アンド
すべてのデバイスがHIGH出力 = スイッチ OFF
いずれかのデバイスがLOW出力 = スイッチ ON
- クロック周波数
standard mode (Sm) : 100kHz以下
fast mode (Fm) : 最大 400kHz
fast mode plus (Fm+) : 最大 1MHz
Sm, Fm は,ほとんどのデバイスが対応。
Fm+ は,通信量が多いアプリケーションに使われる。
- 接続トポロジ
2本の信号線 (SCLとSDA) に,デバイスすべてを接続。
接続できるデバイスの数は,「バス容量」 によって制限される。
通信は,主と従の関係で行われる。
この役割を,それぞれコントローラ (マスタ),ターゲット (スレーブ) と呼ぶ。
例
STM32 センサ A, B, C
PB6 ───┬── A (SCL)
├── B (SCL)CL
└── C (SCL)
PB7 ───┬── A (SDA)
├── B (SDA)CL
└── C (SDA)
- プロトコル
通信はコントローラが主導する。
デバイスは,7bit のターゲット・アドレスを持つ。
コントローラは通信を行うデバイスをターゲット・アドレスで指定し,データの転送方向を指示する。
1. 通信開始
2. データ転送
3. 通信終了
例えば,MPU6050 のターゲット・アドレスが 0x68 の場合,MPU を読み出す MCU は,つぎのように通信する:
START
ADDRESS (0x68)
READ
STOP
転送開始 (START) 直後の1バイト (ADDRESS) は,コントローラからターゲットへの転送で,
ターゲット・アドレス (7ビット)
データ転送方向(送信か受信か)
を指定。
- データの転送単位
基本の通信の単位は,データの8ビットのあとに1ビットを追加した9ビット。
1クロックで1ビットを送信/受信。
- 強み
I2C の最大の利点は:
SDA(データ)
SCL(クロック)
の 2本だけで複数デバイスを接続できること。
IMU,気圧センサ,温度センサなどを同じ I2C バスにぶら下げられる。
UART だと,デバイスごとに
TX
RX
GND
の3本線のポートが必要。
つまり,I2C は
「センサ集約」
に圧倒的に向いている。
- ケーブル長
I2C はノイズに弱い。
ロボット内部でも 10〜20cm 程度 に抑えるのが理想。
- I2C 専用分岐 (ブレークアウト) 基板
製品例
Qwiic ハブ(SparkFun)
Stemma QT ハブ(Adafruit)
実質ハブであり,:
SDA/SCL を内部で共通化
コネクタを複数並べる
ケーブルで簡単に分岐できる
|