深入理解 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 通信系统。

相关新闻

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

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

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

2026/8/3 8:43:46阅读更多 →
算法工程中的性能测试与可重复性分析7

算法工程中的性能测试与可重复性分析7

引言算法工程的核心挑战:性能与可重复性在复杂系统中的作用性能测试与可重复性分析对算法落地的影响性能测试的关键维度测试指标设计吞吐量、延迟、资源利用率等核心指标的定义与适用场景统计学方法(如分位数、方差分析)在指标评估中的应用测…

2026/8/3 8:43:46阅读更多 →
洛阳企事业单位食堂厨具更新改造:关林后厨工程设备供货与安装一体化服务

洛阳企事业单位食堂厨具更新改造:关林后厨工程设备供货与安装一体化服务

企事业单位食堂因设备老化、环保标准升级或就餐人数变化,需要更新改造后厨设备时,选择一家能提供勘察设计、设备供货、安装调试、旧设备拆除一体化服务的供应商至关重要。洛阳市洛龙区聚鑫厨房设备商行(线上宣传名:关林奇灿厨具&a…

2026/8/3 8:43:46阅读更多 →
杰理之双备份测试盒无线升级更新不了ANC参数问题【篇】

杰理之双备份测试盒无线升级更新不了ANC参数问题【篇】

替换下面的库rebuild,并且需要重复进行两次无线升级

2026/8/3 10:01:02阅读更多 →
Java+Vue在线考试系统毕业设计:从环境搭建到防作弊策略

Java+Vue在线考试系统毕业设计:从环境搭建到防作弊策略

1. 毕业设计选在线考试系统,先想清楚要解决什么问题如果你正在为计算机专业的毕业设计选题发愁,看到“在线考试系统”这个题目,第一反应可能是“这个题目太老了,会不会没新意?”或者“技术栈看起来就是增删改查&#x…

2026/8/3 10:01:02阅读更多 →
大模型RAG知识库全链路实战:从零构建高性能检索增强生成系统

大模型RAG知识库全链路实战:从零构建高性能检索增强生成系统

这次我们来看一个关于大模型RAG知识库的实战教程项目。这个项目不是单纯的概念讲解,而是聚焦于“全链路优化方案”与“工程级落地实战”,目标是在一周内让你掌握从零到一构建高性能RAG系统的核心能力,避开99%的常见坑点。对于想将大模型与私有…

2026/8/3 10:01:02阅读更多 →
杰理之DAC没有设置为高阻状态【篇】

杰理之DAC没有设置为高阻状态【篇】

void hw_close_dac(void) { memset(JL_ADDA, 0x0, sizeof(JL_ADDA_TypeDef)); SFR(JL_ADDA->DAA_CON2, 15, 1, 1); SFR(JL_ADDA->DAA_CON2, 5, 1, 1); }

2026/8/3 10:01:02阅读更多 →
QwenPaw 2.0.1实战:从对话AI到自动化Agent的工程化构建指南

QwenPaw 2.0.1实战:从对话AI到自动化Agent的工程化构建指南

上周在帮一个朋友处理一个自动化任务时,他提了一个问题:“现在这些AI工具,单次对话都挺聪明,但我想让它每天定时帮我检查邮件、整理摘要、再根据内容生成报告,这一套流程下来,每次都得我手动触发、复制粘贴…

2026/8/3 10:01:02阅读更多 →
MFC MDI静态切分窗口实现:多视图界面布局与文档视图架构详解

MFC MDI静态切分窗口实现:多视图界面布局与文档视图架构详解

1. 项目概述与核心价值 最近在整理一些老项目的代码,又翻到了当年用VC MFC做的一个多文档界面(MDI)应用,里面用到了静态切分窗口来组织复杂的视图。这个技术点现在提的人少了,但在处理需要同时展示多种数据、多个视角的…

2026/8/3 9:59:02阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

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

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

2026/8/3 0:29:53阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/3 0:33:53阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/3 0:20:37阅读更多 →
3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:32阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:32阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:32阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/3 2:32:59阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/3 2:33:01阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/3 2:33:04阅读更多 →