ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

I2C 介绍【过于简单】

I2C 介绍【过于简单】

I2C 超简单介绍

I2C,也叫 IIC、I²C,全称 Inter-Integrated Circuit,内部集成电路总线。采用双线制串行通信架构,包含串行数据线(SDA, Serial Data)和串行时钟线(SCL, Serial Clock)。

特点

  • 同步、半双工、串行总线
  • 仅2根信号线,可挂载多个设备,靠地址区分设备

一、硬件接口

2根信号 + GND共地,必须外部上拉电阻

  1. SDA(Serial Data):串行数据线,双向传输数据
  2. SCL(Serial Clock):串行时钟线,由主机产生时钟

二、协议:信号时序定义

同步:数据采样跟随 SCL 时钟。SCL高电平时,SDA的变化代表特殊信号;SCL低电平时,才允许SDA改变数据。

1. 起始信号 START

当SCL 为高电平期间,SDA 由 高→低 跳变,代表通信开始。

总线从空闲进入传输状态。

2. 停止信号 STOP

当SCL 为高电平期间,SDA 由 低→高 跳变,代表通信结束,总线回到空闲。

⚠️普通数据位:SCL高的时候,SDA电平必须稳定,不能跳变;只有 START/STOP 允许SCL高时SDA跳变,

3. 数据位传输

  • SCL = 高电平:读取SDA上的数据bit(0/1)
  • SCL = 低电平:允许发送方改变SDA电平,准备下一位
  • 1字节 = 8个bit,高位先行 MSB first(先传最高位)

4. ACK/NACK 应答(第9位)

每发送完 8bit(1字节),接收方要回复 1 位应答位:

  1. 发送方释放 SDA(交给接收方控制)
  2. 主机继续产生第 9 个 SCL 时钟
  3. ACK应答:接收方把 SDA 拉低 = 0,表示收到数据
  4. NACK应答:SDA 保持高 = 1,表示没收到/结束读取
  • 写操作:从机回复 ACK;
  • 读操作:主机回复 ACK/NACK;主机发 NACK 告诉从机:不再读,准备 STOP。

三、操作

写数据

读数据

四、地址格式

  1. 7位地址(绝大多数设备)
  • 地址占用 7bit,后面拼接 1bit 读写位,组成完整一字节:
    bit7~bit1: 设备地址,bit0: R/W 0写 1读
    总线上看到的第一个字节 =(addr <<1) | R/W

例:设备 7bit 地址 0x48
写:0x90 = (0x48 <<1) | 0
读:0x91 = (0x48 <<1) | 1

  1. 10位地址:用于设备特别多的场景,比较少见

五、数据传输演示

点此跳转演示链接

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进