1. 简述 I2C 总线特点
I2C(Inter-Integrated Circuit)是一种同步、半双工、串行通信总线,核心特点如下:
-
物理线少 :仅需 2 根信号线 ------SDA(串行数据线) 和 SCL(串行时钟线),即可实现多设备通信。
-
多主多从架构:支持多个主机和多个从机挂载在同一条总线上,每个从机拥有唯一的 7 位 / 10 位设备地址。
-
开漏输出 + 上拉电阻:总线引脚为开漏输出结构,必须外接上拉电阻才能输出高电平,天然支持线与逻辑与总线仲裁。
-
同步通信:由主机提供时钟信号 SCL,数据收发与时钟同步,接收方按时钟节拍采样数据。
-
应答机制:每传输 1 字节数据后,接收方必须回复应答位,确保通信可靠。
-
总线仲裁:多主机同时发送数据时,通过总线仲裁机制避免冲突,保证数据不损坏。
2. 设计 I2C 时需要注意什么
硬件层面
-
上拉电阻选型:SDA、SCL 必须接上拉电阻,常用阻值 4.7kΩ 或 10kΩ;通信速率越高、总线负载越大,电阻取值应越小。
-
电平匹配:总线上所有设备的 I/O 电平需兼容,不同电压域设备需加电平转换芯片。
-
总线负载:总线寄生电容不能超过规范上限(标准模式最大 400pF),否则会导致信号畸变、通信失败。
-
硬件地址配置:同型号多从机挂载时,需通过硬件引脚设置不同地址,避免地址冲突。
-
共地处理:总线上所有设备必须共地,否则会出现电平偏移。
软件层面
-
时序合规:严格遵守起始 / 停止信号、数据建立 / 保持时间的时序要求,确保 SCL 高电平时 SDA 稳定。
-
超时机制:读写操作必须添加超时判断,防止从机无应答时程序死等、总线挂死。
-
总线恢复:添加总线异常复位逻辑(如模拟时钟脉冲、重新发送起始信号),应对总线锁死场景。
-
多主机场景:需实现总线仲裁与冲突检测,避免多主机同时抢占总线。
3. 描述 I2C 通信的时序
一次完整的 I2C 写传输时序流程如下:
-
起始信号(START):SCL 保持高电平时,SDA 由高电平跳变为低电平,标志一次通信开始。
-
数据传输:SCL 为低电平时,发送方修改 SDA 电平;SCL 为高电平时,接收方采样 SDA 电平(此时 SDA 必须稳定)。每 8 个时钟脉冲传输 1 字节数据,高位在前(MSB)。
-
应答信号(ACK/NACK):每传输完 1 字节(8 位)后,第 9 个时钟周期由接收方驱动 SDA:拉低为应答(ACK),保持高为非应答(NACK)。
-
停止信号(STOP):SCL 保持高电平时,SDA 由低电平跳变为高电平,标志一次通信结束,释放总线。
读传输流程:起始 + 从机地址(写方向)+ 应答 + 寄存器地址 + 应答 + 重复起始 + 从机地址(读方向)+ 应答 + 读取数据 + NACK + 停止。
4. I2C 常见的通信速率
|------------------------|----------|--------------|
| 模式 | 速率 | 说明 |
| 标准模式(Standard-mode) | 100 kbps | 最基础、兼容性最好的速率 |
| 快速模式(Fast-mode) | 400 kbps | 嵌入式开发最常用 |
| 快速模式增强(Fast-mode Plus) | 1 Mbps | 增强型快速模式 |
| 高速模式(High-speed mode) | 3.4 Mbps | 高速传输,需额外协议支持 |
常用的 AT24C02 等存储芯片,通常支持 100 kbps 和 400 kbps 两种速率。
5. 起始信号后的 7 位、第 8 位、第 9 位含义
-
前 7 位 :从机设备地址,用于主机选中总线上对应的从机设备。
-
第 8 位 :读写控制位(R/W) ,
0表示主机向从机执行写操作 ,1表示主机向从机执行读操作。 -
第 9 位 :应答位(ACK/NACK),由从机驱动;从机拉低 SDA 表示应答(ACK,确认收到数据),保持高电平表示非应答(NACK)。
6. AT24C02 的容量大小
AT24C02 的总容量为 2 Kbit(2048 比特) ,换算为字节是 256 字节(Byte),地址范围 0x00 ~ 0xFF。
7. AT24C02 的设备地址
AT24C02 使用 7 位设备地址:
-
高 4 位固定为
1010(二进制),即十六进制0xA; -
低 3 位由芯片的
A2、A1、A0三个硬件引脚的电平决定,接地为 0,接 VCC 为 1。
当 A2、A1、A0 全部接地(最常用接法)时:
-
7 位地址为
0101000,即 0x50; -
加上读写位后,8 位写地址为
0xA0,8 位读地址为0xA1。
总线上最多可同时挂载 8 片 AT24C02,通过 A2/A1/A0 引脚区分地址。