| Up | I2C | 作成: 2026-09-08 更新: 2026-09-08 |
「感覚器 IMU の末梢神経」 の見方が立つ。 bus.read_byte_data(addr, reg) で起こること: スレーブアドレス送信(7bit/10bit) ACK/NACK の応答 レジスタアドレス送信 データの読み取り(高位バイト → 低位バイト) ストップコンディション I2C を使用する 「感覚器官」: 気圧センサ 温度センサ 磁気センサ 距離センサ(ToF) モータドライバの設定レジスタ バッテリ管理IC(電圧・電流・温度) ○ I²C の内部プロトコル 7bit アドレス + R/W ビット(どのデバイスに話しかけるか) ACK/NACK(相手が受け取ったかどうか) DATA バイト列(レジスタ番号 → データ) STOP 条件(通信終了) これらはすべて, SCL(クロック) SDA(データ) という 2 本の線の電圧変化で表現される。 ○ START / STOP 条件(波形レベル) SCL が HIGH のときに SDA が変化したら,それは「記号」である。 つまり: START 条件(通信開始) SCL = HIGH のときに SDA が HIGH → LOW に落ちる SCL = HIGH のときに SDA が LOW → HIGH に戻る ○ アドレスフェーズ(7bit アドレス + R/W) [START] [ADDR(7bit)] [R/W] [ACK] R/W ビット(0 = 書き込み,1 = 読み出し) スレーブが ACK を返す(SDA を LOW に引く) ○ ACK / NACK の意味 →「受け取った,続けてよい」 →「受け取れない,通信を終わらせてほしい」 これは I²C の「会話の相槌」。 参考: lab.route-eight.com. I2C通信の仕組みと実装——スタート条件からACKまで【連載#4】 | Route Eight Lab ○ データ転送(レジスタ → データ) 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 ○ オープンドレインとプルアップ抵抗(物理層) 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 読み方: ADDRESS : 話し先 REGISTER : データ取り出し口か」 DATA : データ ACK/NACK : 相手が受け取ったかの相槌 STOP : 会話を終える |