news 2026/6/2 1:11:25

嵌入式测试学习第 25 天:I2C通信协议基础、拓扑、读写逻辑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
嵌入式测试学习第 25 天:I2C通信协议基础、拓扑、读写逻辑

I2C通信协议基础、拓扑、读写逻辑

    • 一、I2C 协议基础认知
      • 1. 基本定义
      • 2. 硬件引脚与电平(3.3V TTL 主流方案)
        • 核心两根总线(所有I2C设备共用)
        • 辅助电路:上拉电阻
      • 3. 主从设备概念(核心角色)
    • 二、I2C 拓扑结构(总线架构 + 实物组网)
      • 1. 标准总线拓扑原理
      • 2. 实物组网实拍(开发板+多外设)
      • 3. 拓扑特点总结
    • 三、I2C 基础时序信号
      • 1. 起始信号(Start)
      • 2. 停止信号(Stop)
      • 3. 应答信号(ACK/NACK)
    • 四、I2C 完整读写逻辑
      • 前置知识点
      • 场景一:主机向从机 **写数据**(主机发、从机收)
        • 分步拆解
        • 实测现象(嵌入式测试)
      • 场景二:主机从从机 **读数据**(从机发、主机收)
        • 分步拆解
    • 五、I2C 实物接线实操
      • 标准接线规则(通用所有I2C设备)
      • 多设备并联接线(总线拓扑落地)
    • 六、嵌入式测试常见故障 & 排查(结合硬件/协议)
      • 故障1:总线完全无应答(全程无ACK)
      • 故障2:能写不能读 / 能读不能写
      • 故障3:通信偶尔丢包、数据跳变
      • 故障4:总线卡死(SDA持续低电平)
    • 七、I2C 总结

一、I2C 协议基础认知

1. 基本定义

I2C(Inter-Integrated Circuit,集成电路总线),半双工同步串行通信总线,由飞利浦公司推出,是嵌入式设备最常用的近距离板内通信协议。

  • 特点:仅两根信号线 + 公共地,布线简单、硬件成本低;
  • 通信距离:板内短距离通信(几十厘米内),不适合长线缆;
  • 典型应用:温湿度传感器、OLED屏、EEPROM、RTC时钟、加速度传感器等外设。

2. 硬件引脚与电平(3.3V TTL 主流方案)

核心两根总线(所有I2C设备共用)
  1. SDA:串行数据线,传输地址、读写指令、数据;双向收发
  2. SCL:串行时钟线,由主机提供时钟节拍,同步双方通信节奏
辅助电路:上拉电阻

I2C 总线为开漏输出,总线空闲时必须依靠4.7kΩ 上拉电阻将 SDA、SCL 拉至高电平(3.3V)。

  • 常规配置:SDA、SCL 各串联一枚 4.7kΩ 上拉电阻接 VCC(3.3V)
  • 电平规则:
    • 总线空闲:SDA=高电平、SCL=高电平
    • 逻辑1:高电平;逻辑0:低电平

配图1:I2C 上拉电阻电路实拍

图片特征:电路板上可见两枚贴片电阻,分别连接在 SDA、SCL 引脚与3.3V电源之间,是I2C正常工作的基础电路。

3. 主从设备概念(核心角色)

  • 主机(Master):发起通信、产生SCL时钟、控制读写流程,一般是单片机/ARM主控芯片;一条总线同一时刻只能有1个主机
  • 从机(Slave):被动响应主机指令,每个从设备拥有唯一7位设备地址(总线寻址的依据);一条总线可挂载多个从机

二、I2C 拓扑结构(总线架构 + 实物组网)

1. 标准总线拓扑原理

所有设备的SDA 引脚并联、SCL 引脚并联,共用一组上拉电阻,公共GND相连,构成一条总线。

  • 组网规则:
    1. 所有设备 SDA 连在一起,所有设备 SCL 连在一起;
    2. 仅主机输出时钟(SCL),从机无法驱动时钟;
    3. 依靠设备地址区分不同从机,实现一对一通信。

配图2:I2C 总线拓扑示意图

图片特征:图形化展示主控芯片(主机)+ 多个传感器/外设(从机),SDA、SCL分别并联,标注上拉电阻、GND、VCC,清晰体现“一主多从”架构。

2. 实物组网实拍(开发板+多外设)

配图3:STM32开发板挂载多个I2C外设 实拍

图片特征:

  1. 主控开发板引出 I2C_SDA、I2C_SCL、GND、3.3V 排针;
  2. 多个外设(温湿度传感器、OLED显示屏、EEPROM)通过杜邦线并联接入同一组SDA/SCL;
  3. 所有设备共地、共电源,整套电路为标准I2C总线组网。

3. 拓扑特点总结

  1. 一主多从:单条总线最多可挂载127个从设备(7位地址);
  2. 线序极简:两根信号线即可完成多设备通信;
  3. 地址寻址:靠设备地址区分目标从机,无需额外片选线;
  4. 限制:总线距离短、速率偏低(标准100KHz,高速400KHz),仅用于板内通信。

三、I2C 基础时序信号

I2C 所有读写动作,都基于起始信号、停止信号、应答信号三种基础时序,结合示波器波形理解。
默认前提:总线空闲 → SDA=高、SCL=高。

1. 起始信号(Start)

  • 时序规则:SCL 保持高电平期间,SDA 从高电平跳变到低电平
  • 作用:主机通知所有从机,即将开始一次通信。

2. 停止信号(Stop)

  • 时序规则:SCL 保持高电平期间,SDA 从低电平跳变到高电平
  • 作用:主机结束本次通信,总线回归空闲状态。

3. 应答信号(ACK/NACK)

  • 时序规则:每传输1个字节(8位)后,接收方会拉低SDA一个时钟周期,代表应答ACK;若SDA保持高电平,代表无应答NACK
  • 作用:校验数据是否正常接收,无应答通常代表:设备地址错误、从机离线、硬件故障。

配图4:I2C 起始+停止+应答信号 示波器波形实拍

图片特征:

  • 横向为时间轴,纵向为电压;
  • 清晰区分:空闲电平 → 起始波形 → 数据位 → ACK应答位 → 停止波形;
  • 可直观看到 SCL(时钟)、SDA(数据)的电平先后变化关系。

关键规则:SCL高电平时,SDA的跳变代表起始/停止;SCL低电平时,允许改变SDA数据位


四、I2C 完整读写逻辑

以最常用的7位地址、标准速率100KHz为例,分为写数据流程读数据流程两大核心场景,结合实操现象、故障点说明。

前置知识点

  1. 设备地址:7位从机地址 + 1位读写位(0=写,1=读),组成1字节寻址帧;
  2. 数据传输:高位在前(MSB first),逐位在SCL低电平阶段切换SDA。

场景一:主机向从机写数据(主机发、从机收)

完整流程:起始信号 → 寻址字节(地址+写位) → 等待ACK → 寄存器地址 → 等待ACK → 写入数据 → 等待ACK → 停止信号

分步拆解
  1. 发起起始信号
    主机拉低SDA,产生起始时序,总线进入通信状态。
  2. 发送寻址字节
    主机依次输出7位从机地址 + 1位写标志(0),所有从机接收并比对地址;地址匹配的从机准备响应。
  3. 检测应答ACK
    从机拉低SDA返回应答;无ACK= 地址错误/从机未上电/接线故障。
  4. 发送从机内部寄存器地址
    主机下发要操作的从机寄存器编号(比如EEPROM存储地址、传感器配置寄存器)。
  5. 再次等待ACK
    从机确认寄存器地址接收完成。
  6. 发送有效数据
    主机逐字节写入目标数据,每写完1字节,等待一次ACK。
  7. 发送停止信号
    主机拉高SDA,结束本次写操作,总线恢复空闲。

配图5:I2C写数据 逻辑分析仪波形

图片特征:按时间顺序展示 起始→寻址→ACK→寄存器→数据→停止 全流程波形,SCL时钟脉冲规律输出,SDA对应数据逐位变化。

实测现象(嵌入式测试)
  • 正常:从机(传感器/EEPROM)成功写入配置/数据,设备功能切换;
  • 异常:无ACK、总线卡死、从机无响应。

场景二:主机从从机读数据(从机发、主机收)

读操作分为随机读(指定寄存器读取),是测试中最常用流程:
完整流程:起始信号 → 寻址字节(写位) → ACK → 寄存器地址 → ACK → 重复起始信号 → 寻址字节(读位) → ACK → 读取数据 → NACK → 停止信号

分步拆解
  1. 第一次起始 + 写寻址
    主机先以写模式寻址从机,发送需要读取的寄存器地址(告诉从机:我要读哪个地址的数据)。
  2. 重复起始信号
    不发送停止信号,直接再次发起起始(I2C特有“重复起始”,避免总线释放)。
  3. 第二次寻址(读模式)
    发送从机地址 +读标志(1),切换为读方向。
  4. 从机返回数据
    在SCL时钟驱动下,从机将寄存器数据逐位送到SDA总线,主机采样接收。
  5. 主机回复NACK
    读取完成后,主机发送无应答(NACK),通知从机不再继续读。
  6. 停止信号
    通信结束,总线空闲。

配图6:I2C读数据 实操演示(开发板+串口助手)

图片特征:

  1. 硬件:开发板 + I2C温湿度传感器;
  2. 软件:串口助手打印读取到的温度、湿度数值;
  3. 现象:数值稳定刷新,代表I2C读流程正常。

五、I2C 实物接线实操

标准接线规则(通用所有I2C设备)

主控板 SDA ↔ 外设 SDA 主控板 SCL ↔ 外设 SCL 主控板 GND ↔ 外设 GND 主控板 3.3V ↔ 外设 VCC (外设供电)

✅ 重点:SDA、SCL必须并联,GND必须共地,缺一不可。

配图7:单I2C外设接线实拍

图片特征:四根杜邦线对应连接 VCC、GND、SDA、SCL,走线清晰,是入门基础接线方式。

多设备并联接线(总线拓扑落地)

配图8:多个I2C设备并联接线实拍

图片特征:多个外设的SDA全部接在一起、SCL全部接在一起,共用主控的一组I2C引脚,完美体现一主多从拓扑。


六、嵌入式测试常见故障 & 排查(结合硬件/协议)

结合协议与时序,整理测试高频故障,对应实物现象:

故障1:总线完全无应答(全程无ACK)

  • 现象:主机发送地址后,始终收不到从机应答,通信直接失败。
  • 原因:
    1. SDA/SCL接反、GND未共地(最高发);
    2. 从机未上电、电源引脚虚焊;
    3. 上拉电阻缺失/损坏,总线无法回到高电平;
    4. 从机设备地址填写错误。
  • 排查:核对接线 → 测量外设供电 → 用示波器查看总线空闲电平是否为高。

故障2:能写不能读 / 能读不能写

  • 现象:单方向通信正常,反向失效。
  • 原因:固件读写时序配置错误、从机寄存器只读/只写属性不匹配。
  • 排查:抓取完整波形,对比标准读写时序,检查寄存器配置。

故障3:通信偶尔丢包、数据跳变

  • 现象:大部分时间正常,偶尔读取数据错乱、应答丢失。
  • 原因:
    1. 杜邦线过长、走线靠近电机/继电器,引入电磁干扰;
    2. 上拉电阻阻值不匹配;
    3. 总线挂载设备过多,负载超标。
  • 排查:缩短线缆、远离干扰源、减少总线设备数量。

故障4:总线卡死(SDA持续低电平)

  • 现象:SDA一直被拉低,后续所有通信都无法进行。
  • 原因:通信中途断电、从机程序卡死、时序异常导致总线锁死。
  • 解决:硬件断电重启设备,优化固件异常复位逻辑。

七、I2C 总结

  1. 硬件:两根线(SDA+SCL)+ 共地 + 4.7k上拉电阻,开漏输出;
  2. 拓扑一主多从、总线并联,靠7位设备地址寻址;
  3. 时序:SCL高电平 → SDA跳变 = 起始/停止;逐字节传输+ACK应答;
  4. 流程:写=起始→寻址(写)→数据→停止;读=两次起始+读写切换;
  5. 排查优先级:接线→共地→上拉电阻→设备地址→时序波形。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 1:08:32

为什么企业需要 Spec Driven:AI 写代码越快,需求越要结构化

为什么企业需要 Spec Driven:AI 写代码越快,需求越要结构化 中智凯灵 2026年6月1日 17:17 北京——基于第9届 AI研发数字峰会(AiDD 2026 上海站)的系列观察报道(4) ▼ AI 编程最容易制造一种错觉&#xff…

作者头像 李华
网站建设 2026/6/2 1:08:23

GPU 测试开发的一些概念总结

1. 常见概念1. NCCL(NVIDIA Collective Communications Library)做什么:专门优化 多 GPU / 多节点 的集体操作:AllReduce(最常用,梯度汇总)Broadcast、Reduce、AllGather 等特点:拓扑…

作者头像 李华
网站建设 2026/6/2 1:06:35

Xshell分屏实战:一边看日志一边执行命令,Linux运维效率神器这样用

Xshell分屏实战:高效运维的窗口管理艺术凌晨三点,服务器告警铃声刺破夜空——又一次线上故障紧急排查。作为运维工程师,你是否经历过这样的场景:左手忙着tail -f追踪实时日志,右手需要不断切换窗口执行诊断命令&#x…

作者头像 李华