I2C(Inter-Integrated Circuit)——短距离设备间串行通信协议
一、I2C 概述
I2C(Inter-Integrated Circuit,集成电路总线)是一种由 Philips 公司开发的简单、双向二线制同步串行总线,专为短距离设备间通信设计。它仅需两根信号线——串行数据线(SDA)和串行时钟线(SCL),即可实现主设备与多个从设备之间的数据传输。I2C 总线广泛应用于嵌入式系统、消费电子、工业控制等领域,是连接微控制器与外围设备(如传感器、EEPROM、显示屏等)的常用通信接口。
二、I2C 硬件特性与通信原理
(一)硬件引脚
I2C 总线由两根信号线组成:
- SDA(Serial Data Line):串行数据线,用于主设备与从设备之间的双向数据传输。
- SCL(Serial Clock Line):串行时钟线,由主设备产生时钟信号,用于同步数据传输。
(二)通信原理
I2C 通信基于主从架构,主设备负责发起通信、产生时钟信号并控制数据传输方向,从设备则响应主设备的请求。通信过程包括起始条件、地址传输、数据传输、应答信号和停止条件五个阶段。
- 起始条件:当 SCL 为高电平时,SDA 由高电平跳变为低电平,表示通信开始。
- 地址传输:主设备发送 7 位或 10 位从设备地址,后跟 1 位读/写标志位(0 表示写操作,1 表示读操作)。
- 数据传输:主设备与从设备之间进行数据交换,每次传输一个字节(8 位)。
- 应答信号:每个字节传输后,接收方需发送一个应答位(ACK/NACK),表示数据是否成功接收。
- 停止条件:当 SCL 为高电平时,SDA 由低电平跳变为高电平,表示通信结束。
三、I2C 工作模式与特性
(一)工作模式
I2C 支持多种工作模式,包括标准模式(≤100 kbps)、快速模式(≤400 kbps)、高速模式(≤3.4 Mbps)和超快速模式(≤5 Mbps,部分设备支持)。用户可根据实际需求选择合适的模式。
(二)特性
- 双向通信:SDA 支持双向数据传输,主设备和从设备均可发送和接收数据。
- 多主设备:I2C 总线支持多个主设备同时工作,但需通过总线仲裁机制避免冲突。
- 硬件简单:仅需两根信号线,降低了电路设计的复杂性。
- 地址区分:每个从设备具有唯一的 7 位或 10 位地址,主设备通过地址选择从设备。
四、I2C 通信时序与协议
(一)通信时序
I2C 通信时序严格遵循起始条件、地址传输、数据传输、应答信号和停止条件的顺序。以下是一个典型的写操作时序:
- 主设备发送起始条件。
- 主设备发送从设备地址和写标志位。
- 从设备发送应答信号。
- 主设备发送寄存器地址。
- 从设备发送应答信号。
- 主设备发送数据。
- 从设备发送应答信号。
- 主设备发送停止条件。
(二)协议细节
- 起始与停止条件:通过 SDA 和 SCL 的电平变化实现。
- 地址传输:7 位或 10 位地址后跟 1 位读/写标志位。
- 数据传输:每个字节传输后需接收应答信号。
- 应答信号:低电平表示成功接收,高电平表示接收失败或不需要更多数据。
五、I2C 优缺点分析
(一)优点
- 硬件简单:仅需两根信号线,降低了电路设计的复杂性。
- 支持多设备:一条总线上可连接多个从设备,通过地址区分。
- 双向通信:主设备和从设备均可发送和接收数据。
- 兼容性强:广泛应用于各种微控制器和外围设备。
(二)缺点
- 速度限制:相比 SPI,I2C 的数据传输速率较低,高速模式下也仅能达到 3.4 Mbps。
- 仲裁机制:多主设备情况下,需通过仲裁机制避免冲突,增加了通信复杂性。
- 信号完整性:长距离传输时,信号完整性可能受到影响,需考虑上拉电阻和总线电容。
六、I2C 应用案例:STM32 连接 I2C 传感器
以下是一个使用 STM32 微控制器连接 I2C 温度传感器(如 BMP180)的详细案例:
(一)硬件连接
假设使用 STM32F103 微控制器和 BMP180 温度传感器,硬件连接如下:
- BMP180 VCC 连接 STM32 3.3V。
- BMP180 GND 连接 STM32 GND。
- BMP180 SDA 连接 STM32 PB7(I2C1_SDA)。
- BMP180 SCL 连接 STM32 PB6(I2C1_SCL)。
(二)软件实现
- I2C 初始化
c复制代码#include "stm32f10x.h" void I2C1_Init(void) { I2C_InitTypeDef I2C_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; // 使能 I2C1 和 GPIO 时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); // 配置 I2C1 的 SDA 和 SCL 引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); // 配置 I2C1 参数 I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 = 0x00; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_InitStructure.I2C_ClockSpeed = 100000; // 100 kHz I2C_Init(I2C1, &I2C_InitStructure); // 使能 I2C1 I2C_Cmd(I2C1, ENABLE); }
- 传感器初始化
c复制代码#include "bmp180.h" void BMP180_Init(void) { uint8_t data; // 读取校准数据 BMP180_ReadReg(BMP180_CAL_AC1_MSB, &data, 1); // 其他校准数据读取... // 配置传感器(如设置测量模式) // 具体配置取决于传感器规格书 }
- 数据读取
c复制代码int16_t BMP180_ReadTemperature(void) { uint8_t data[2]; int16_t temperature; // 发送测量命令 BMP180_WriteReg(BMP180_CONTROL, BMP180_TEMP_CONVERT); // 等待转换完成 Delay(5); // 假设转换时间为 5ms // 读取温度数据 BMP180_ReadReg(BMP180_TEMP_MSB, data, 2); temperature = (data[0] << 8) | data[1]; // 根据传感器规格书进行数据转换 // temperature = ...; return temperature; }
- 辅助函数
c复制代码void BMP180_WriteReg(uint8_t reg, uint8_t data) { while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); I2C_GenerateSTART(
扫描下方二维码,一个老毕登免费为你解答更多软件开发疑问!

华为鸿蒙生态发展演讲:从操作系统到数字底座的进化论
【导语】在万物互联的智能时代,操作系统是数字世界的“地基”,而华为鸿蒙生态正以惊人的速度重构这一地基的形态。在2025华为开发者大会(HDC)上,华为消费者业务CEO余承东宣布:“鸿蒙生态已跨越1.5亿设备激活量,开发者数量突破380万,成为全球第三大移动应用生态。”这场演讲不仅揭示了鸿蒙的成长密码,更抛出了一个关键命题:当操作系统进化为数字底座,开发者将如何抓住下一波红利?一、数据透视:鸿蒙生态
百度发布多模态AI程序员Zulu:代码革命还是程序员“饭碗”终结者?
【导语】“让AI写代码,人类程序员该何去何从?”在2025百度AI开发者大会上,百度CTO王海峰抛出的这个问题,随着多模态AI程序员Zulu的发布被推向风口浪尖。这款号称“能听、能看、能思考”的代码生成工具,在内部测试中已实现82%的函数级代码自动生成,开发效率提升4倍。当AI开始入侵程序员最后的“技术护城河”,一场关于效率与饭碗的争论正在硅谷与中关村同步上演。一、技术解密:Zulu的“三头六臂”
苹果管理层大换血:库克押注AI机器人,能否再造“iPhone时刻”?
【导语】“当全球都在追赶Vision Pro时,苹果已经悄悄调转船头。”北京时间2025年4月29日,苹果官网悄然更新高管团队名单:原机器学习与AI战略高级副总裁John Giannandrea晋升为首席运营官(COO),机器人技术负责人Kevin Lynch进入执行董事会。这场被外媒称为“苹果20年来最大规模管理层调整”的变革,正式宣告库克将宝押向AI与机器人赛道。在这场豪赌背后,是苹果营收增速
腾讯云Craft智能体发布:AI开发进入“傻瓜模式”,中小企业迎来技术平权时代
【导语】“以后写代码就像发朋友圈一样简单。”在2025腾讯云峰会上,腾讯云副总裁吴运声抛出的这句话,随着全链路AI开发平台“Craft智能体”的发布引发行业震荡。这款被内部称为“AI开发界的美图秀秀”的产品,凭借“零代码搭建AI应用”“模块化自由组合”“按需付费”三大核心卖点,直击中小企业AI开发成本高、周期长、人才缺的行业痛点。当AI技术从实验室走向田间地头,Craft智能体能否成为企业智能化的