I2C (Inter-Integrated Circuit)

I2C(读作 I-squared-C)是一种同步、多主从架构的串行通信总线,由飞利浦(现 NXP)在 1980 年代设计,主要用于连接低速外设。

协议概述

  • 物理层:仅需两根信号线。
    • SDA (Serial Data):串行数据线。
    • SCL (Serial Clock):串行时钟线。
  • 架构:多主从(Multi-Master, Multi-Slave),但最常见的是单主多从。
  • 地址:每个从设备都有唯一的 7 位或 10 位地址。
  • 速率
    • 标准模式 (Standard-mode): 100 kbps
    • 快速模式 (Fast-mode): 400 kbps
    • 高速模式 (High-speed mode): 3.4 Mbps

通信模式:寻址与应答

I2C 采用地址寻址机制,主机通过发送设备地址来选择通信对象。

sequenceDiagram
    participant Master as 主机 (MCU)
    participant Slave1 as 从机 1 (传感器)
    participant Slave2 as 从机 2 (EEPROM)

    Note over Master: 发起通信
    Master->>Slave1: Start + Address(Slave1) + Write
    Slave1-->>Master: ACK (应答)
    Master->>Slave1: 发送寄存器地址
    Slave1-->>Master: ACK
    Master->>Slave1: 发送数据
    Slave1-->>Master: ACK
    Master->>Slave1: Stop

特点

  • 硬件简单:只需要两根线,且支持多设备挂载(总线电容允许范围内)。
  • 开漏输出:SDA 和 SCL 都是开漏结构,必须接上拉电阻
  • 应答机制:每发送一个字节(8位),接收方必须回复一个 ACK 位(第9位)。

优缺点

优点缺点
引脚少:仅需 2 根线,节省 MCU 引脚。速度慢:相比 SPI,通信速率较低。
多设备:通过软件地址区分设备,无需片选线。半双工:同一时间只能收或发。
流控:支持时钟拉伸 (Clock Stretching) 进行流控。硬件复杂:协议相对复杂,软件模拟较难。

典型应用

  • 传感器(温度、湿度、加速度计)
  • EEPROM 存储器
  • RTC 实时时钟
  • 显示屏(OLED, LCD)