嵌入式系统中的I2C总线时序
I2C 总线在嵌入式系统中非常常见,本文详细讲解 I2C 总线的时序规则。
许多电子工程师第一次接触 I2C 总线,都是通过 EEPROM 或 ROM 通信。实际上,I2C 的应用远不止存储芯片,其使用场景与 RS‑485、SPI 等总线类似。

EEPROM内存系统架构图
1. 位传输
I2C 是由飞利浦公司开发的双向两线同步串行总线,只需要 SCL(时钟线) 和 SDA(数据线) 两根线,就能实现总线上多个芯片之间的控制与数据传输。

I2C 总线位传输
I2C 总线上的数据是逐位传输的:
SCL 为高电平时:SDA 上的数据必须保持稳定,不允许变化。
SCL 为低电平时:SDA 可以改变电平状态。
关键时序条件
起始条件:SCL 为高电平时,SDA 从高电平变为低电平 → 表示传输开始。
停止条件:SCL 为高电平时,SDA 从低电平变为高电平 → 表示传输结束。
空闲状态:SDA 与 SCL 均保持高电平 → 表示总线空闲。
2. 数据传输
字节传输
主机发送数据时,先发出起始信号,然后将 SDA 设为输出模式,先发送最高位(MSB),依次发送 8 位数据。
发送完 8 位后,主机会将 SDA 切换为输入模式,等待从机回复 ACK(应答) 或 NAK(非应答),之后再发送下一个字节。
从机地址
I2C 总线上的每个设备都有固定地址,通常由芯片上的 A0、A1、A2 引脚配置。
地址字节包含:
7 位地址位(D7~D1)
1 位读写方向位(D0)
设备地址的高 4 位(D7~D4)通常由厂商固定为 1111,低 3 位(D3~D1)由 A2、A1、A0 引脚设置。
D0 = 0:写操作
D0 = 1:读操作
这就是常见地址如 0xA0、0xA1 的由来。

EEPROM设备地址
3. 读 / 写流程
① 写操作流程
主机发送停止信号,避免总线忙碌导致写入失败。
主机发送总线复位信号,确保总线空闲。
主机发送起始信号,启动写操作。
主机发送从机地址 + 写位(W/R=0),等待从机 ACK。
收到 ACK 后,主机连续写入多个字节,每写完 1 字节等待从机 ACK。
收到最后一次 ACK 后,主机发送停止信号,释放总线。
② 读操作流程
主机发送停止信号,避免总线忙碌导致读取失败。
主机发送总线复位信号,确保总线空闲。
主机发送起始信号,启动读操作。
主机发送从机地址 + 读位(W/R=1),等待从机 ACK。
收到 ACK 后,主机连续读取多个字节,每读完 1 字节向从机回复 ACK。
读完最后 1 字节并回复 ACK 后,主机发送停止信号,释放总线。
I2C 在嵌入式领域应用广泛,在各类电源、工控、消费电子设备中都十分常见。
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码
