I2C
2 本の線で機器がやり取りする I2C の信号を追います。
バス
0 / 0 クロック
速さ 速さ
再生の速さ
クロック/秒
波形
全体
拡大
- 結果
- –
- 立ち上がり時間
- –
- Low の電圧
- –
- クロック
- –
- 所要時間
- –
操作
宛先
データ 1 データ 1
データ 2 データ 2
場面
速度
電源電圧
Rp プルアップ抵抗
VDD と線の間
Ω
Cb 配線の容量
線 1 本と機器の端子の合計
F
1オープンドレイン
1 台でも下げれば Low
2開始と終了
SCL が High の間の SDA の変化
3ビット
SCL が High の間に読む
4アドレス
7 ビット+読み書き
5ACK と NACK
9 ビット目は受け手の返事
6クロックストレッチ
スレーブが SCL を Low に保持
7調停
1 を送って Low なら負け
8プルアップ抵抗
大きいほど立ち上がりが遅い
動作原理と式
線の電圧
機器の出力は線を Low に下げるか放すかだけです(オープンドレイン)。1 台でも下げていれば線は Low になり、誰も下げなければプルアップ抵抗 を通して へ戻ります。戻る速さは抵抗と配線の容量 の積で決まります。
立ち上がり時間 は 0.3 から 0.7 までの時間です。機器は 0.3 (VIL)より下を Low、0.7 (VIH)より上を High と読み、その間では直前の値を保ちます。
プルアップ抵抗の範囲
下げている機器は Low の電圧 0.4 V で (標準・ファストで 3 mA、ファストプラスで 20 mA)を流せます。抵抗が小さすぎると Low が下がりきらず、大きすぎると立ち上がりが上限(1000・300・120 ns)に間に合いません。
Low の電圧は、下げている機器の出力を抵抗 とみて、 との分圧で求めます。
通信の手順
- 開始: SCL が High のまま SDA を Low へ
- ビット: SDA は SCL が Low の間に変え、SCL が High の間に読む
- 最初の 8 ビット: 宛先の 7 ビットのアドレスと読み書きの 1 ビット(0 が書き込み)
- 9 ビット目: 受け手が SDA を Low にすれば ACK、High のままなら NACK
- 読み出しでは、マスタが最後のバイトに NACK を返す
- 終了: SCL が High のまま SDA を High へ
- クロックストレッチ: スレーブが SCL を Low のまま保持し、マスタは High になるまで待つ
- 調停: 1 を送ったのに SDA が Low なら、ほかのマスタが送っている。負けた側は送信をやめ、終了の後に送り直す
出典
- 開始と終了・ACK・クロックの同期・調停・クロックストレッチ(3.1 節)、入出力と線の特性(表 10・表 11)、プルアップ抵抗の範囲(7.1 節)NXP Semiconductors, UM10204 I2C-bus specification and user manual, Rev. 7.0, 2021
このツールで決めたこと
- 仕様書の Rev. 7.0 はマスタ・スレーブをコントローラ・ターゲットと呼ぶ。画面では広く使われているマスタ・スレーブを使う
- マスタの SCL の Low は周期の 53 %、データを変えるのは SCL の立ち下がりから周期の 12 % 後
- スレーブは SCL の立ち下がりから周期の 10 % 後に SDA を変える
- マスタは SCL を放したあと High になるまで待つ(クロックの同期)。立ち上がりが遅いとクロックが遅くなる
- しきい値のヒステリシスは VIL と VIH の間とし、その間では直前の値を保つ
- クロックストレッチは、宛先のスレーブがアドレスの ACK の後に 3.2 周期だけ保持する
- 2 台目のマスタは同時に送り始め、1 台目と違う宛先へ書き込む
- スレーブは 2 バイトを持ち、書き込むと置き換わり、読み出しで返す。アドレス 0x3C の機器はない
- 時間刻みは周期の 1/200