I2C 超简单介绍
I2C,也叫 IIC、I²C,全称 Inter-Integrated Circuit,内部集成电路总线。采用双线制串行通信架构,包含串行数据线(SDA, Serial Data)和串行时钟线(SCL, Serial Clock)。
特点
- 同步、半双工、串行总线
- 仅2根信号线,可挂载多个设备,靠地址区分设备
一、硬件接口
2根信号 + GND共地,必须外部上拉电阻
- SDA(Serial Data):串行数据线,双向传输数据
- 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 位应答位:
- 发送方释放 SDA(交给接收方控制)
- 主机继续产生第 9 个 SCL 时钟
- ACK应答:接收方把 SDA 拉低 = 0,表示收到数据
- NACK应答:SDA 保持高 = 1,表示没收到/结束读取
- 写操作:从机回复 ACK;
- 读操作:主机回复 ACK/NACK;主机发 NACK 告诉从机:不再读,准备 STOP。
三、操作
写数据
读数据
四、地址格式
- 7位地址(绝大多数设备)
- 地址占用 7bit,后面拼接 1bit 读写位,组成完整一字节:
bit7~bit1: 设备地址,bit0: R/W 0写 1读
总线上看到的第一个字节 =(addr <<1) | R/W
例:设备 7bit 地址 0x48
写:0x90 = (0x48 <<1) | 0
读:0x91 = (0x48 <<1) | 1
- 10位地址:用于设备特别多的场景,比较少见
五、数据传输演示
点此跳转演示链接