深入理解 I2C 协议
1. 引言I2CInter-Integrated Circuit集成电路总线是一种由飞利浦公司现恩智浦半导体在 1980 年代开发的同步、多主从、串行、半双工通信总线协议。它以其简洁的硬件接口仅需两根线、支持多设备连接以及灵活的通信速率等优点在嵌入式系统、传感器网络、EEPROM、实时时钟RTC等场景中得到了广泛应用。本文将深入剖析 I2C 协议的工作原理、通信时序、寻址方式并通过实战代码示例帮助读者全面掌握这一经典总线协议。2. I2C 总线物理层与信号I2C 总线仅由两根双向开漏Open-Drain线构成SDASerial Data Line串行数据线用于传输数据。SCLSerial Clock Line串行时钟线由主设备产生用于同步数据位传输。由于采用开漏输出总线需要外接上拉电阻通常为 4.7 kΩ 或 10 kΩ至电源电压VCC。这种设计允许多个设备“线与”Wire-AND任何设备都可以将总线拉低输出 0而释放总线输出 1则依靠上拉电阻将电平拉高。总线电平逻辑低电平0电压接近 GND。逻辑高电平1电压接近 VCC由外部上拉电阻决定。3. I2C 协议通信时序详解一次完整的 I2C 数据传输遵循严格的时序由主设备Master发起和控制。3.1 起始START与停止STOP条件起始条件S在 SCL 为高电平期间SDA 线上产生一个由高到低的下降沿。这标志着一次传输的开始并唤醒总线上所有从设备。停止条件P在 SCL 为高电平期间SDA 线上产生一个由低到高的上升沿。这标志着一次传输的结束总线进入空闲状态。3.2 数据传输与应答数据传输以字节8 位为单位高位MSB先发。每个字节传输后接收方必须发送一个应答ACK或非应答NACK位。数据位传输主设备在 SCL 低电平时改变 SDA 数据在 SCL 高电平时SDA 数据必须保持稳定供接收方采样。应答位ACK/NACK在第 9 个时钟脉冲即字节传输后的第一个时钟期间发送方释放 SDA 线输出高。接收方若成功接收该字节则在此周期内将 SDA 拉低作为应答ACK若接收失败或希望终止传输则保持 SDA 为高作为非应答NACK。主设备在发送数据后需要检测从设备的 ACK从设备在接收主设备发送的数据后也需要发送 ACK。4. I2C 设备寻址I2C 采用 7 位或 10 位地址寻址。7 位地址是最常用的模式可寻址 112 个设备地址 0x00 到 0x07 和 0x78 到 0x7F 为保留地址。7 位地址帧格式主设备在起始条件后立即发送一个字节。这个字节的高 7 位是从设备地址最低位LSB是读写位R/W#。0表示主设备将要向从设备写入数据Write。1表示主设备将要从从设备读取数据Read。例如向地址为 0x50二进制 1010000的设备写入数据主设备发送的地址字节为0xA01010000 0 10100000。从地址为 0x50 的设备读取数据主设备发送的地址字节为0xA11010000 1 10100001。5. 典型通信流程示例5.1 主设备向从设备写入数据主设备发送起始条件S。主设备发送从设备地址 写位0。从设备返回应答ACK。主设备发送数据字节 1。从设备返回应答ACK。…重复步骤 4-5发送更多数据主设备发送停止条件P。5.2 主设备从从设备读取数据主设备发送起始条件S。主设备发送从设备地址 读位1。从设备返回应答ACK。从设备发送数据字节 1。主设备返回应答ACK若还需读或非应答NACK若读取结束。…重复步骤 4-5读取更多数据主设备发送停止条件P。5.3 复合格式写入后读取常用于先发送寄存器地址再读取该地址数据的传感器。主设备发送起始条件S。主设备发送从设备地址 写位0。从设备 ACK。主设备发送寄存器地址字节。从设备 ACK。主设备发送重复起始条件Sr即不发送停止条件直接发起新的起始条件。主设备发送从设备地址 读位1。从设备 ACK。从设备发送数据主设备 ACK/NACK。主设备发送停止条件P。5.4 I2C 通信时序图为了更直观地理解 I2C 协议的时序下面用时序图展示一个主设备向从设备写入一个字节数据地址数据的完整过程时序图说明IDLE空闲状态从 Stop 到 Start 的状态此时 SCL 和 SDA 均为高电平。BUSY忙状态从 Start 到 Stop 的状态表示总线正在进行数据传输。Start起始条件SCL 为高电平时SDA 由高电平变成低电平标志传输开始。Stop停止条件SCL 为高电平时SDA 由低电平变成高电平标志传输结束。ACK应答接收信息的设备驱动 SDA 为低电平告知发送设备接收数据正常。S-TSlave-Transmitter从设备发送信息主设备接收信息。M-TMaster-Transmitter主设备发送信息从设备接收信息。该图清晰地展示了 I2C 协议中起始、停止、数据位传输和应答位的严格时序关系是理解和调试 I2C 通信的重要参考。时序图详细讲解上图展示了一个典型的 I2C 主设备向从设备写入一个字节数据的完整时序过程。我们可以从左到右结合时间轴和信号线变化来理解空闲状态 (IDLE)在传输开始前SCL时钟线和 SDA数据线均被上拉电阻拉至高电平逻辑1总线处于空闲、可用的状态。起始条件 (Start Condition, S)主设备在 SCL 为高电平期间将 SDA 线从高电平拉低产生一个下降沿。这个独特的信号组合SCL高SDA由高变低被总线上所有从设备识别为一次传输的开始并唤醒它们准备接收地址。地址帧传输 (Address Frame)起始条件后主设备开始发送第一个字节。这个字节包含7位从设备地址图中以 A6, A5, …, A0 表示和1位读写控制位R/W#。对于写操作该位为0。数据有效性在 SCL 为低电平期间主设备可以改变 SDA 线上的数据位置高或拉低。当 SCL 变为高电平时SDA 上的数据必须保持稳定此时从设备会采样 SDA 线上的值。每个数据位都遵循这个“低变高稳”的规则。位顺序数据传输是高位MSB先发即先发送地址的最高位 A6。应答位 (Acknowledge Bit, ACK)在发送完8位7位地址1位读写位后主设备会在第9个时钟周期释放 SDA 线即输出高电平由上拉电阻拉高并将总线控制权暂时交给目标从设备。如果总线上存在地址匹配的从设备它会在第9个时钟周期内将 SDA 线主动拉低作为应答信号ACK告知主设备“地址已识别准备就绪”。如果地址不匹配或从设备故障SDA 线将保持高电平即非应答NACK主设备应终止传输。数据帧传输 (Data Frame)收到从设备的 ACK 后主设备继续发送数据字节。图中示例发送了一个8位数据D7, D6, …, D0。数据位的传输和应答机制与地址帧完全相同。再次应答 (ACK for Data)从设备成功接收数据字节后同样在第9个时钟周期将 SDA 拉低发出 ACK 信号。停止条件 (Stop Condition, P)数据传输结束后主设备需要释放总线。停止条件的定义为在 SCL 为高电平期间SDA 线产生一个由低到高的上升沿。此后SCL 和 SDA 均恢复高电平总线再次进入空闲状态等待下一次起始条件。关键点总结主从角色在整个写操作中SCL 时钟始终由主设备产生和控制。SDA 数据线主要由主设备驱动但在两个应答位第9个时钟期间由接收方从设备驱动。同步与采样数据的变化发生在 SCL 为低时数据的采样发生在 SCL 为高时这保证了信号的同步和稳定。握手机制每个字节后的 ACK/NACK 位是重要的握手机制确保了通信的可靠性。没有收到 ACK 通常意味着通信失败。总线状态Start和Stop条件严格定义了总线“忙”BUSY周期的开始与结束。在Start之后、Stop之前总线处于占用状态。通过这张时序图可以清晰地看到 I2C 协议如何通过简单的两根线实现包括寻址、数据传输和确认在内的完整通信流程这也是其成为嵌入式系统经典总线协议的原因之一。若想观看更详细的视频讲解可前往 B 站视频I2C 通信协议详解。7. I2C 协议高级特性与注意事项7.1 时钟拉伸Clock Stretching从设备可以通过在应答位或数据位期间将 SCL 线拉低并保持来暂停主设备的时钟从而为自己争取更多的处理时间。主设备必须检测并等待 SCL 被从设备释放后才能继续。这是 I2C 支持不同速度设备共存的关键机制。7.2 总线仲裁Arbitration当多个主设备同时尝试启动传输时会进行仲裁。仲裁机制基于“线与”特性只要有一个设备输出 0总线就是 0。主设备在发送地址或数据时会同时监听 SDA 线。如果发现自己发送的是 1但检测到总线为 0则说明有其他主设备赢得了总线该设备应立即退出竞争转为从设备监听模式。7.3 通信速率标准模式Standard-mode100 kbit/s快速模式Fast-mode400 kbit/s快速模式Fast-mode Plus1 Mbit/s高速模式High-speed mode3.4 Mbit/s通信速率由主设备的 SCL 频率决定所有设备必须支持主设备设定的速率或更低速率。7.4 注意事项上拉电阻阻值需根据总线电容和电源电压计算选择通常在 4.7 kΩ 到 10 kΩ 之间。阻值过大会导致上升沿过慢通信不可靠阻值过小会导致功耗增加。总线电容总线总电容线缆电容设备引脚电容不能超过 400 pF标准模式否则信号完整性会变差。地址冲突设计系统时需注意从设备地址不能冲突许多设备可通过外部引脚配置部分地址位。8. 总结I2C 协议以其极简的硬件连接和灵活的软件控制成为嵌入式系统内部芯片间通信Inter-IC Communication的事实标准。掌握其起始/停止条件、数据/应答时序、7/10 位寻址以及复合传输格式是进行嵌入式开发和硬件调试的基础。在实际应用中还需结合具体器件的时序要求和电气特性并善用逻辑分析仪等工具进行调试才能构建稳定可靠的 I2C 通信系统。

相关新闻

Ruoyi框架MyBatis-Plus代码生成器深度优化实践

Ruoyi框架MyBatis-Plus代码生成器深度优化实践

1. 项目概述ruoyi作为国内流行的开源后台管理系统框架,其前后端分离版本在企业级应用开发中广受欢迎。在实际项目开发中,代码生成器是提升开发效率的利器,但默认生成的MyBatis-Plus代码格式往往需要二次调整才能符合团队规范。本文将分享如何…

2026/8/4 23:51:25 阅读更多 →
IL1RAP在炎症与肿瘤中的关键作用及靶向治疗进展

IL1RAP在炎症与肿瘤中的关键作用及靶向治疗进展

1. 炎症细胞因子共受体IL1RAP的生物学意义IL1RAP(Interleukin-1 Receptor Accessory Protein)作为IL-1受体家族的关键共受体分子,在先天免疫和炎症反应中扮演着不可替代的角色。这个约66kDa的跨膜蛋白通过与IL-1RI或IL-1Rrp2等受体形成复合物…

2026/8/4 23:55:27 阅读更多 →
智能音乐解放方案:打破平台壁垒的跨平台播放革命

智能音乐解放方案:打破平台壁垒的跨平台播放革命

智能音乐解放方案:打破平台壁垒的跨平台播放革命 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gi…

2026/8/4 22:47:57 阅读更多 →

最新新闻

Golang JSON序列化与反序列化:从字符串到结构体的高效转换

Golang JSON序列化与反序列化:从字符串到结构体的高效转换

1. 项目概述:从字符串到结构化数据的桥梁在Golang的后端开发日常里,处理JSON数据就像呼吸一样自然。无论是从HTTP API接收请求体,还是从数据库读取配置字段,亦或是与前端、微服务进行数据交换,JSON都是那个绕不开的“世…

2026/8/5 2:19:03 阅读更多 →
威海拉伸膜的耐温范围是多少?

威海拉伸膜的耐温范围是多少?

威海拉伸膜的耐温范围是多少?在工业和日常生活中,拉伸膜的应用十分广泛。威海作为工业发展较快的地区,其拉伸膜的使用量也相当可观。拉伸膜的耐温范围是影响其使用效果和应用场景的重要因素,下面我们就来深入探讨一下威海拉伸膜的…

2026/8/5 2:19:03 阅读更多 →
022、EMO注意力高效多尺度注意力复现:YOLOv12轻量化改进的即插即用模块

022、EMO注意力高效多尺度注意力复现:YOLOv12轻量化改进的即插即用模块

022、EMO注意力高效多尺度注意力复现:YOLOv12轻量化改进的即插即用模块 昨晚调模型调到凌晨两点,发现一个特别有意思的现象——YOLOv12在COCO上跑得好好的,换到自制的工业零件数据集上,小目标漏检率直接飙到37%。我盯着TensorBoar…

2026/8/5 2:19:03 阅读更多 →
Unity Addressables资源热更新实战:从配置到部署全流程解析

Unity Addressables资源热更新实战:从配置到部署全流程解析

1. 项目概述:为什么我们需要Addressables?在Unity项目开发中,尤其是移动端和在线游戏,资源管理一直是个老大难问题。回想一下,你是不是也经历过这样的场景:为了修复一个UI贴图错误,或者更新一个…

2026/8/5 2:19:03 阅读更多 →
023、EfficientAdditiveAttention高效加法注意力复现:消除矩阵乘法的YOLOv12注意力改进

023、EfficientAdditiveAttention高效加法注意力复现:消除矩阵乘法的YOLOv12注意力改进

023、EfficientAdditiveAttention高效加法注意力复现:消除矩阵乘法的YOLOv12注意力改进 兄弟们,今天这篇咱们聊个有意思的东西。上周我在调YOLOv12的时候,发现一个特别膈应人的问题——模型跑起来倒是挺快,但一看nvidia-smi&#…

2026/8/5 2:19:03 阅读更多 →
TikTok Shop店群自动化管理系统:秒级轮询监控,竞品一动你3秒内跟进

TikTok Shop店群自动化管理系统:秒级轮询监控,竞品一动你3秒内跟进

TikTok Shop店群自动化管理系统:秒级轮询监控,竞品一动你3秒内跟进 做店群的老板都知道,TikTok Shop的批量抓取采集,是店群运营中最耗人力也最容易出错的环节。 采集竞品数据是店群运营的命脉。但各大平台的反爬系统越来越强&am…

2026/8/5 2:18:03 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →