尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

I2C通信最全面的讲解:从协议到硬件设计

I2C通信最全面的讲解:从协议到硬件设计
📅 发布时间:2026/6/18 22:00:16

IIC( Inter-Integrated Circuit,or I2C)协议是由飞利浦半导体(现在的恩智浦半导体)开发,并于1982年发布的一种串行、半双工总线,主要用于近距离,低速的芯片之间的通信;I2C总线由两根双向的信号线,一根数据线SDA(serial data)用于收发数据,一根时钟线SCL(serial clock)L用于通信双方时钟的同步;I2C总线硬件结构简单,成本较低,因此在各领域得到了广泛的应用。

主要特性:

特性

说明

物理线路

2根:串行数据线(SDA) + 串行时钟线(SCL)

通信方向

半双工

拓扑结构

多主机、多从机总线

寻址方式

软件地址寻址(7位或10位地址)

速率模式

标准模式(100kbps)、快速模式(400kbps)、高速模式(3.4Mbps)、超快速模式(5Mbps)

输出类型

开漏输出,需外接上拉电阻

显著特点

硬件连接简单、成本低、支持多主仲裁和时钟同步、有应答机制

典型应用

连接传感器、存储器(如EEPROM)、显示屏、实时时钟(RTC)、GPIO扩展芯片等

工作原理与流程:

I²C总线通信时,所有设备都并联在两条线上。每个设备有唯一地址。通信由主机发起,它控制时钟线SCL的节奏。数据在数据线SDA上传输。

一次完整的I²C数据传输,就像一次有序的对话,通常包含以下几个环节:

1. 起始条件 (Start Condition):当SCL为高电平时,SDA线从高电平跳变到低电平。这个下降沿告知所有从机:总线繁忙,注意收听地址。

2. 地址帧 + 读写位 (Address Frame + R/W Bit):主机发送一个7位或10位的从机地址,紧跟着一位数据方向位(读/写位)。0表示主机要向从机写入数据,1表示主机要向从机读取数据。

3. 应答位 (ACK/NACK Bit):接收地址的从机,如果识别到自己的地址,应在接下来的一个时钟脉冲通过将SDA拉低来发送一个应答(ACK) 信号。如果未识别(或无法响应),则SDA保持高电平,即非应答(NACK) 。

4. 数据帧 (Data Frames):地址得到应答后,开始传输数据。每个数据帧为8位,同样在每个字节后都紧跟一个应答位(ACK/NACK)以确认接收成功。数据传输时,高位(MSB)在前。

5. 停止条件 (Stop Condition):当所有数据传输完毕,主机产生停止条件。当SCL为高电平时,SDA线从低电平跳变到高电平。这个上升沿表示通信结束,总线恢复空闲。

空闲状态:I2C空闲时SCL、SDA均为高。

数据有效性:

I2C通信中一个至关重要的规则是:

SCL为高电平期间,SDA上的数据必须保持稳定(不允许变化),以便接收方(无论是主设备还是从设备)能够准确采样

SCL为低电平期间,SDA线上的数据才允许发生变化,为下一个比特的传输做好准备

从机地址:

7bit 地址模式下,I2C 协议规定地址字节的高7 位是从机的地址,最低位为0,表示写入从机,最低位为1,表示读取从机。

10bit 地址模式下,地址由两个字节组成,写从机时,I2C 协议规定:第一个字节发送11110XX0,高5 位固定为11110,bit2,bit1 是10bit 地址中的高2 位,bit0 是方向位,值为0,表示方向为写;第二个字节是10bit 地址的低8 位。读从机时,I2C 规定:先发写的地址(两个字节),再发读的地址(读的地址只需要发送一个字节)。具体流程如下:先发写的地址,第一个字节发送11110XX0,高5位固定为11110,bit2、bit1 是10bit 地址的高2 位,bit0 是方向位,值为0,表示方向为写,第二个字节是10bit 地址的低8 位;再发读的地址,发送11110XX1,bit2、bit1 是10bit 地址中的高2 位,bit0 是方向位,值为1,表示方向为读。

总线仲裁:

I²C支持多主机操作。总线仲裁是为了解决多设备同时竞争中线控制权的问题,通过一定的裸机来决定哪个设备能够获得最终的总线控制权。主机在发送每一位后都会检测SDA线上的实际电平。如果发现自己发送的是1(释放总线),而SDA线却是低电平(被另一个主机拉低),则该主机仲裁失败,退出竞争并转为从机模式。仲裁从地址帧的高位开始比较,最终能完整发送地址的主机赢得仲裁。

时钟同步机制允许多个主机在SCL线上产生自己的时钟时,通过“线与”逻辑共同决定最终的时钟周期,从而实现同步。

(I²C 设备的 SDA 和 SCL 引脚均为开漏输出,只要有一个设备输出低电平,总线就被拉低;只有当所有设备都输出高电平(释放总线)时,总线才为高。这是仲裁的物理基础。)

警惕总线死锁:如果某个设备(尤其是从设备)异常(如程序跑飞、电源故障)并持续拉低 SDA 线,会导致整个总线挂起,所有通信中断。解决方法包括:

  • 软件复位:主设备产生多个 SCL 时钟脉冲(如9个),尝试“唤醒”卡住的从设备

  • 硬件复位:必要时复位整个系统或故障设备

上拉电阻选择:

I²C总线采用开漏输出,这意味着设备只能将总线拉低(输出低电平),而不能直接驱动为高电平。总线的高电平状态需要依靠上拉电阻(Rp) 拉到电源电压(VDD)。Rp的值需要仔细计算,过大或过小都会导致通信失败。I2C总线上为什么需要接上拉

1. 计算最小值 Rp(min):Rp不能太小,否则当器件试图将总线拉低时,所需的灌电流(Iol) 会过大,可能超过器件的额定值,导致低电平电压(Vol)抬高甚至损坏端口。公式为:

Rp(min) = (VDD - Vol(max)) / Iol

其中 Vol(max) 是协议允许的最大低电平电压(通常为0.4V或0.3VDD),Iol 是器件的灌电流能力(数据手册提供)

2. 计算最大值 Rp(max):Rp也不能太大,否则总线上的负载电容(Cb) 通过Rp充电的上升时间(tr) 会过长,导致信号边沿过于缓慢,在高波特率下可能无法在时钟周期内达到可靠的高电平。公式为:

Rp(max) = tr / (0.8473 * Cb)

其中 tr 是I²C模式允许的最大上升时间(数据手册或协议规范),Cb 是总线总电容。

3. 权衡与选择:在Rp(min)和Rp(max)之间选择一个标称值。较小的Rp(如1.5kΩ)能提供更快的上升边沿,适合更高速度,但功耗更大;较大的Rp(如4.7kΩ或10kΩ)功耗更小,但会限制最高通信速率。

PCB布局与布线规范

  • SDA和SCL信号线应平行等长走线,线宽通常建议0.2-0.3mm,间距大于线宽以减少串扰。优先走在表层并尽量缩短总长度。

  • 减少分支:设备应尽量集中布局,避免总线出现过长分支(Stub),以减少信号反射

  • 上拉电阻位置:上拉电阻通常应放置在主控制器附近



相关新闻

  • 【题解】Luogu P10752 [COI 2024] Sirologija
  • Python字符串:别只用来打印!这5个高级用法让代码效率翻倍
  • 【题解】Atcoder ABC432 C

最新新闻

  • PowerPC 601缓存时序与总线仲裁机制深度解析
  • 一念成仙:看山不是山,看水不是水,为什么OPC创业的核心是商业模式,而非代码本身
  • 国内主流打包机厂家实测排行 适配电商物流多场景 - 起跑123
  • 终端(Terminal)通俗完整讲解
  • 车载雷达架构迭代|全网量产复盘 场景反向定义ODD边界、L2-L4全域硬件升级、分布式转集中架构迭代、多雷达时序融合、整车感知全套工程复现
  • Windows系统优化神器:3分钟让你的电脑焕然一新

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号