I2C通信原理与时序图、读写流程全解析

发布时间:2026/8/25 21:47:52
I2C通信原理与时序图、读写流程全解析 一、I2C硬件基础物理层1.1硬件接线构成I2C总线为双线通信架构仅需两根信号线即可完成数据传输搭配电源、地线即可实现完整通信硬件结构极简SDA数据线双向数据传输线负责指令、数据、地址信息的收发SCL时钟线时钟同步线由主设备控制提供固定频率时序统一主从设备通信节奏上拉电阻两根信号线均并联2.2K上拉电阻无通信时SDA、SCL默认保持高电平初始状态辅助接线主从设备共地GND、共电源VDD保证电平信号统一传输性能双线传输最高速率可达500万比特/秒协议诞生超40年稳定性极强。1.2主从设备架构I2C为典型的单主多从架构通信角色固定职责明确设备角色核心设备主要功能常见设备主设备MCU/单片机发起通信、控制时钟、下发读写指令、接收从设备数据、校验应答信号STM32、51单片机等控制芯片从设备外设器件响应主设备指令、执行读写动作、返回应答信号、上传自身数据LCD显示屏、温度传感器、风扇、电量检测模块二、I2C核心电平与基础信号规则2.1基础电平逻辑机器无法识别文字指令仅识别高低电平I2C通过电平对应二进制0/1是数据传输的底层基础低电平 → 逻辑0高电平 → 逻辑1关键机制SCL时钟线决定数据读取时机解决连续相同电平无法区分数据的问题。SCL高电平工作态从设备读取SDA数据线的稳定电平识别有效数据SCL低电平休息态从设备停止读取可在此期间切换SDA电平准备下一组数据2.2特殊信号起始信号终止信号普通高低电平已用于表示0/1因此I2C通过SCL高电平期间的SDA电平跳变定义通信起止标识区分数据位信号类型电平跳变规则作用起始信号SSCL高电平期间SDA由高变低标记通信正式开始后续SCL高电平为有效数据读取周期终止信号PSCL高电平期间SDA由低变高标记本次通信结束结束数据传输2.3应答信号ACK/NACK为解决单向传输无校验、无法确认数据是否接收成功的问题I2C规定每传输1字节8位数据后必须跟随1位应答位核心规则谁接收、谁应答。应答类型电平状态含义有效应答ACK/A接收方拉低SDA低电平数据接收成功可继续传输下一组数据无应答NACK/ĀSDA保持默认高电平上拉电阻作用数据丢失、接收错误或设备忙碌终止传输三、I2C核心参数地址与指针寄存器I2C总线上挂载多个从设备且每个从设备内置多个功能寄存器通过器件地址寄存器地址指针精准定位通信目标。3.1器件地址设备地址相当于从设备的“唯一电话号码”用于区分总线上的多个外设避免通信混乱。占用字节1字节8位高7位为器件地址最低1位为读写标志位容量7位地址最大支持 2⁷127 个从设备注意部分地址段为协议预留广播、十位扩展地址不可自定义使用开发要求使用前必须查阅芯片手册确认对应从设备的固定器件地址3.2读写标志位器件地址字节的最低1位用于标识本次通信的传输方向是I2C半双工通信的核心控制位标志位 0写操作→ 主设备发送数据从设备接收数据标志位 1读操作→ 从设备发送数据主设备接收数据3.3寄存器地址指针/子地址可理解为从设备内部的“带编号快递柜”每个寄存器对应独立功能开关控制、温度数据、电量数据等。作用精准定位从设备内部的目标寄存器避免默认从第一个寄存器顺序读写的繁琐操作特性指针设置后会自动保存下次通信可直接复用无需重复配置别名国内资料常翻译为子地址与指针Pointer为同一概念四、I2C通信模式半双工通信I2C为半双工通信同一时刻仅支持单向数据传输传输方向由读写标志位决定写模式标志位0主发、从收全程数据流向MCU → 从设备读模式标志位1从发、主收全程数据流向从设备 → MCU核心痛点直接发送读指令会失败因为读模式下从设备直接切换为发送方无法接收后续的寄存器地址导致无法定位读取目标。解决方案读操作必须先写后读先通过写指令锁定设备和寄存器地址再发起读指令读取数据。五、I2C完整读写流程数据帧结构一个完整的I2C数据帧 起始信号 多组数据字节 对应应答位 终止信号所有字节均遵循“先发高位、后发低位”规则。5.1 I2C写数据流程主→从适用场景MCU控制外设开启风扇、LCD显示数据、设置参数等流程简单、单次通信即可完成。完整帧结构起始信号(S) → 器件地址写标志(0) → ACK → 寄存器地址(指针) → ACK → 待写入数据 → ACK → 终止信号(P)分步拆解主设备发送起始信号唤醒总线发送8位字节7位从设备地址 1位写标志位(0)等待从设备应答(ACK)确认设备匹配发送目标寄存器地址确定操作外设的具体功能等待应答后发送需要写入的功能数据如风扇开启指令接收应答确认数据写入成功发送终止信号结束本次写通信5.2 I2C读数据流程从→主适用场景MCU读取外设数据温度、电量、状态值等受半双工限制必须采用先写定位、后读数据双阶段流程。完整帧结构第一阶段写定位起始信号(S) → 器件地址写标志(0) → ACK → 寄存器地址 → ACK第二阶段读数据起始信号(S) → 器件地址读标志(1) → ACK → 从设备返回数据 → 主设备应答(NACK/ACK) → 终止信号(P)分步拆解发起第一次起始信号进入写模式发送设备地址写标志锁定目标从设备发送需要读取的寄存器地址指针定位接收应答确认定位成功发起第二次起始信号重启通信发送设备地址读标志(1)切换为读模式从设备根据预设指针地址返回对应寄存器数据主设备接收数据单次读取完毕发送NACK连续读取发送ACK发送终止信号结束读通信六、I2C时序图极简识图规则时序图是驱动编程的核心依据所有波形本质都是SDA、SCL的高低电平变化通用识图符号定义时序符号对应含义底层电平逻辑S起始信号SCL高、SDA由高变低P终止信号SCL高、SDA由低变高DATA1字节数据8位SCL高电平期间SDA稳定高低电平A(ACK)有效应答接收方拉低SDAĀ(NACK)无应答SDA保持高电平七