Up I2C 作成: 2026-09-08
更新: 2026-09-08

4足歩行ロボット > 自律型> 身体 > 感覚系 >移動覚 > I2C

    IMU とのデータ通信 (電気的な会話) の方法の一つに,I2C がある。
    「感覚器 IMU の末梢神経」 の見方が立つ。

    bus.read_byte_data(addr, reg) で起こること:
      スタートコンディション
      スレーブアドレス送信(7bit/10bit)
      ACK/NACK の応答
      レジスタアドレス送信
      データの読み取り(高位バイト → 低位バイト)
      ストップコンディション

    I2C を使用する 「感覚器官」:
      IMU
      気圧センサ
      温度センサ
      磁気センサ
      距離センサ(ToF)
      モータドライバの設定レジスタ
      バッテリ管理IC(電圧・電流・温度)

    ○ I²C の内部プロトコル
    これは,次の 5 つの要素で構成される:
      START 条件(通信開始)
      7bit アドレス + R/W ビット(どのデバイスに話しかけるか)
      ACK/NACK(相手が受け取ったかどうか)
      DATA バイト列(レジスタ番号 → データ)
      STOP 条件(通信終了)

    これらはすべて,
      SCL(クロック)
      SDA(データ)
    という 2 本の線の電圧変化で表現される。

    ○ START / STOP 条件(波形レベル)
    I²C の最も重要なルール:
      SDA は,SCL が LOW のときだけ変化してよい。
      SCL が HIGH のときに SDA が変化したら,それは「記号」である。

    つまり:
    START 条件(通信開始)
      SCL = HIGH のときに SDA が HIGH → LOW に落ちる
    STOP 条件(通信終了)
      SCL = HIGH のときに SDA が LOW → HIGH に戻る

    ○ アドレスフェーズ(7bit アドレス + R/W)
    START の直後に送られるのが「アドレスバイト」。

    [START]
    [ADDR(7bit)] [R/W] [ACK]
      7bit アドレス(例:0x68 = MPU6050)
      R/W ビット(0 = 書き込み,1 = 読み出し)
      スレーブが ACK を返す(SDA を LOW に引く)

    ○ ACK / NACK の意味
    各バイト送信後,受信側は必ず ACK/NACK を返す:
      ACK(SDA = LOW)
       →「受け取った,続けてよい」
      NACK(SDA = HIGH)
       →「受け取れない,通信を終わらせてほしい」

    これは I²C の「会話の相槌」。

    参考:
    lab.route-eight.com. I2C通信の仕組みと実装——スタート条件からACKまで【連載#4】 | Route Eight Lab

    ○ データ転送(レジスタ → データ)
    I²C の典型的な IMU 読み取りは次のようになる:
      レジスタ読み出し(READ)
        START
        ADDR + W → ACK
        REGISTER → ACK
        REPEATED START
        ADDR + R → ACK
        DATA → NACK
        STOP

    参考:
    i2c.net. How Does i2c Work? The Protocol, Byte by Byte | i2c.net

    ○ オープンドレインとプルアップ抵抗(物理層)
    I²C の物理層は オープンドレイン という特殊な方式。
      デバイスは LOW に引くことしかできない
      HIGH は プルアップ抵抗が作る

    つまり:
      I²C の「HIGH」は誰も作っていない。
      抵抗が勝手に作っている。

    この設計があるからこそ:
      複数デバイスが同じ線を共有できる
      クロックストレッチができる
      マルチマスターが可能

    参考:
    NerdyElectronics. I2C Protocol Deep Dive: Complete Embedded Guide

    ○ 完全な I²C トランザクションの構造
    参考:
    ecrionix.org. I2C Protocol – Inter-Integrated Circuit Complete Guide | EcrioniX

       START
       ADDRESS
       R/W
       ACK
       DATA BYTE
       ACK
        ‥‥
       STOP

    読み方:
       START : 会話を始める」
       ADDRESS : 話し先
       REGISTER : データ取り出し口か」
       DATA : データ
       ACK/NACK : 相手が受け取ったかの相槌
       STOP : 会話を終える