I2C通信I2C基本电路结构串口的缺点
串口通信(UART/USART 为代表)虽因简单、低成本、硬件要求低 成为嵌入式制作的 “标配”,但受限于物理层设计和通信协议,存在不少固有缺点 —— 尤其在高速、大容量、高可靠性场景下。下面指出串口通信的一些缺点:
串口的缺点本质是 “为容易和低成本牺牲了速率、抗干扰、扩展性”,因此它的核心适用场景是:
I2C简介
仅需 2 根线(SDA 数据线 + SCL 时钟线) 即可实现多设备间通信,广泛应用于嵌入式环境(如 STM32 与传感器、EEPROM、LCD 模块的连接就是I2C(Inter-Integrated Circuit,集成电路间总线)是由 Philips(现 NXP)开发的 短距离、同步串行通信总线,核心特点
I2C总线的电路结构

时钟线与数据线
I2C 通信的核心是 “时钟同步”,而 SCL(Serial Clock,串行时钟线)就是完成同步的关键 —— 它由主机(如 STM32)完全控制,从机(如传感器、EEPROM)必须严格跟随 SCL 的时钟节拍收发数据,因此 SCL 也被称为 I2C 总线的 “节拍器”
SCL 线的唯一作用是提供同步时钟信号,所有数据传输都必须在时钟的 “指挥” 下进行,具体职责:
“无意义的电平跳变”,从机无法识别就是简单说:SCL 决定了 I2C 通信的 “速度” 和 “节拍”,没有 SCL 的同步,SDA 线上的数据流就
I2C 总线的 SCL 和 SDA 线电气特性完全一致,核心是 “开漏输出(OD)+ 上拉电阻”,这是 SCL 稳定工作的基础:
开漏输出(OD)
优势:避免总线冲突 —— 多个设备同时驱动 SCL 时,最多只有一个设备拉低(低电平主导),释放后总线自动恢复高电平,不会出现 “高电平 vs 低电平” 的短路冲突
上拉电阻的作用
SCL 线必须在总线两端(靠近主机和最远从机)接4.7KΩ~10KΩ 的上拉电阻(电源匹配设备电平,如 3.3V/5V),核心作用:
提供高电平:开漏输出无法主动输出高电平,上拉电阻将总线默认拉为高电平;限制电流:避免设备拉低总线时电流过大(保护芯片引脚);稳定信号:抑制 SCL 线的电平抖动,提升抗干扰能力
SDA(Serial Data,串行数据线)是 I2C 总线中唯一传输实际数据的通道,与 SCL(时钟线)配合实现 “同步数据收发”——SCL 提供 “节拍”,SDA 承载 “信息”,两者缺一不可。SDA 的核心特点是双向传输 + 开漏输出 + 应答机制,这是它能在一根线上实现主机与从机双向通信的关键
SDA 线的唯一职责是传输二进制数据和应答信号,所有 I2C 通信的核心信息(从机地址、寄存器地址、数据、应答)都通过 SDA 传输,具体包括:
简单说:SDA 是 I2C 总线的 “信息高速公路”,所有应该交互的内容都在这根线上传输,而 SCL 是 “交通信号灯”,确保数据传输有序不冲突
开漏输出(OD):双向通信的基础
所有设备(主机 + 从机)的 SDA 引脚都必须配备为开漏输出:
上拉电阻:SDA 稳定的关键
SDA 线必须与 SCL 线共用或单独接4.7KΩ~10KΩ 的上拉电阻(电源匹配设备电平,如 3.3V/5V),核心作用:
提供默认高电平:开漏输出无法主动输出高电平,上拉电阻确保 “无设备驱动时” SDA 为高电平(I2C 总线的空闲状态)稳定数据信号:抑制 SDA 线的电平抖动(尤其是数据跳变时),提升抗干扰能力限制驱动电流:避免设备拉低 SDA 时电流过大,保护芯片引脚逻辑线与
在 I2C 通信中,“逻辑线与”(Logical AND)是SDA 和 SCL 总线电气特性的核心底层逻辑—— 正是因为 I2C 总线(SDA/SCL)本质是 “线与” 结构,才实现了 “开漏输出 + 上拉电阻” 的设计,进而支撑多设备共享总线、避免冲突、双向通信等核心功能

什么是 “逻辑线与”?
指就是“逻辑线与” 多根信号线利用硬件连接到同一条总线时,总线的最终电平由 “所有设备的输出电平” 凭借 “与逻辑” 决定—— 对应数字电路中的 “与门” 逻辑:
为什么要采用 “逻辑线与” ?
“逻辑线与” 是 I2C 构建 “极简硬件 + 多设备共享” 的根本,解决了 3 个关键问题:
1.避免总线冲突(多设备驱动同一总线)
UART 是点对点通信,若多设备同时驱动 TX 线,会出现 “高电平 vs 低电平” 的短路冲突(可能烧毁引脚);而 I2C 总线因 “线与” 逻辑:
2. 承受多设备共享总线(一主多从)
所有从机和主机共用 SDA/SCL 两根线,通过 “线与” 逻辑构建 “谁需要谁驱动”:
3. 建立双向通信(SDA 线的核心需求)
SDA 线必须在 “主机发送→从机发送” 之间切换,“线与” 逻辑让切换无需额外控制信号:
I2C通信协议I2C通信的基本流程

准备:SDA、SCL 线接好上拉电阻,主机和从机通电就绪,总线空闲时两线均为高电平启动:主机发起启动条件(SCL 高电平时,SDA 从高变低),告知从机通信开始寻址:主机发送 7 位从机地址 + 1 位读写方向(0 = 写、1 = 读),等待从机应答应答:从机地址匹配则拉低 SDA 发应答(ACK),不匹配则无应答,主机需终止通信传数据: 停止:主机发起停止条件(SCL 高电平时,SDA 从低变高),通信结束,总线回归空闲I2C协议的数据格式


数据帧(8 位 / 字节,可多字节)
应答位(ACK/NACK,1 位,每帧后必带)
停止条件:SCL 高电平时,SDA 从低→高(标志数据传输结束)

例子
假设从机地址时0x78,现在使用主机向从机写素材0x5a与0x33,SCL与SDA的时序图如下:

版权声明
本文仅代表作者观点,不代表xx立场。
本文系作者授权xx发表,未经许可,不得转载。
最新留言