IIC总线原理详解

I²C总线通信原理详解

1. I²C是什么?

I²C(Inter-Integrated Circuit,读作"I-squared-C")是一种由飞利浦 (现恩智浦)设计的同步、串行、半双工通信协议,主要用于短距离、低速设备间的通信(如传感器、EEPROM、LCD驱动芯片等)。

核心特点

  • 两根线 :仅需SDA (数据线)和SCL(时钟线)。
  • 多主多从:支持多个主设备(Master)和从设备(Slave)共享总线。
  • 地址寻址:每个从设备有唯一地址(如0x68),主设备通过地址选择通信对象。
2. 硬件连接
  • 开漏输出 :SDA和SCL均为开漏结构,需外接上拉电阻(通常4.7kΩ),避免信号冲突。
  • 设备地址:7位或10位地址(如0x1A),支持广播寻址(所有从机响应)。

SCL SDA SCL SDA 上拉电阻 上拉电阻 Master Slave1 Slave2 SDA SCL VCC


3. 通信流程(以读取传感器数据为例)
步骤1:起始条件(START)
  • SCL为高电平 时,主设备将SDA从高拉低 ,表示通信开始。

    waveform SCL: 1-1-1-1-1-1-1-1-1 SDA: 1-1-1-1-1-0-0-0-0 START: ^
步骤2:发送从机地址 + 读写位
  • 7位地址 + 1位方向 (0=写,1=读)。例如:
    • 写操作:地址0x68(二进制1101000)→ 发送1101000 0
    • 从机回应ACK(拉低SDA表示确认)。
步骤3:数据传输
  • 主设备发送命令 (如寄存器地址0x01),从机ACK。
  • 主设备发送重复起始条件(Repeated START),切换为读模式。
  • 从机返回数据 (如温度值0x25),主设备ACK或NACK(结束读取)。
步骤4:停止条件(STOP)
  • SCL为高电平 时,主设备将SDA从低拉高 ,结束通信。

    waveform SCL: 1-1-1-1-1-1-1-1-1 SDA: 0-0-0-0-0-1-1-1-1 STOP: ^

4. 关键机制
时钟同步(SCL)
  • 多个主设备可通过"线与"逻辑协商时钟速率(慢速设备拉低SCL强制等待)。
仲裁(多主竞争)
  • 若两个主设备同时发送数据,SDA先输出高电平的设备退出(无破坏性冲突)。
错误处理
  • 无ACK:从机未响应(地址错误或设备故障)。
  • 超时:SCL被长时间拉低(从机卡死)。

5. 典型时序图

Master Slave START + 地址(写) + ACK 寄存器地址 + ACK REPEATED START + 地址(读) + ACK 数据字节1 + ACK 数据字节2 + NACK STOP Master Slave


6. 优缺点
优点 缺点
硬件简单(两根线) 速度较慢(标准模式100kbps)
支持多主从 地址冲突需手动管理
无需片选信号(CS) 长距离通信需加驱动

7. 实际应用
  • 读取传感器 (如BMP280气压计):主设备读取从机地址0x77的校准数据。
  • 配置外设 (如OLED屏幕):主设备向地址0x3C发送显示指令。

8. 动手实验
  1. 硬件连接

    • Arduino(主) + MPU6050(从,地址0x68) + 4.7kΩ上拉电阻。
  2. 代码示例 (Arduino):

    cpp 复制代码
    #include <Wire.h>
    void setup() {
      Wire.begin(); // 主设备模式
      Wire.beginTransmission(0x68); // 指定从机地址
      Wire.write(0x3B); // 寄存器地址
      Wire.endTransmission(false); // 保持连接
      Wire.requestFrom(0x68, 6); // 请求6字节数据
      while (Wire.available()) {
        byte data = Wire.read(); // 读取数据
      }
    }
相关推荐
GeW5 小时前
超详细!RHCE10版通用备考策略,内含评分细则解读
linux
用户041328465136 小时前
Linux 服务开机自启动怎么配置?systemctl enable 原理详解
linux
草莓熊Lotso15 小时前
【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景
linux·网络·数据库·windows·redis·tcp/ip·缓存
张文君15 小时前
ubuntu26.04坏道坏块分区隔离急速版260831-V0.12
linux·python
贝锐1 天前
从国产化信创设备到商用安卓终端,向日葵如何帮助企业实现统一运维管理?
linux·运维·远程控制
Julien20041 天前
调查和解决 SELinux 问题
linux·运维·服务器·网络·学习方法
小张同学a.1 天前
Docker 容器实战 1—— docker 基础与镜像构建
linux·运维·docker·容器
Best-Wishes1 天前
BurpSuite Pro教育版在linux系统中配置
linux·运维·服务器·网络安全·burpsuite
wuminyu1 天前
深入剖析 Panama Off-heap 的性能损耗与开销
java·linux·c语言·jvm·c++
虎王物联1 天前
RK3568嵌入式Linux跑Docker:内核配置排查到AIoT容器化的完整路径
linux·运维·docker·rk3568·aiot·嵌入式linux