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(
扫描下方二维码,一个老毕登免费为你解答更多软件开发疑问!

物业管理工单AI调度方案:维修响应缩短至30分钟的核心算法
物业报修总是慢半拍?业主群里天天吐槽维修不及时?物业管理人员为工单分配焦头烂额?别慌!今天给大家揭秘一套超实用的物业工单 AI 调度方案,手把手教你用核心算法把维修响应时间从几小时压缩到 30 分钟内,让业主满意度直线飙升!据中国物业管理协会发布的《2023 年物业管理行业发展报告》显示,在业主对物业的投诉中,维修响应不及时占比高达 38%。而当维修响应时间控制在 30 分钟以内时,业主对物业的
电商网站加速方案:WooCommerce加载从5s到0.9s的实操
你的 WooCommerce 电商网站是不是也总被用户吐槽 “加载慢如龟”?明明商品超有吸引力,却因为 5 秒的加载时间,白白流失了大量潜在客户!别慌!今天手把手教你把网站加载速度从 5 秒直接干到 0.9 秒,让你的店铺直接起飞!根据 Akamai 的研究报告显示,网页加载时间每延迟 1 秒,就会导致用户转化率下降 7%,销售额降低 11% ,用户跳出率增加 16%。想象一下,每天几百上千的访
APP开发后如何做A/B测试? (转化率提升指南!界面/文案/按钮优化案例)
辛辛苦苦开发的 APP,转化率却总是上不去?根据麦肯锡发布的《2024 年移动应用用户行为报告》显示,经过科学 A/B 测试优化的 APP,平均转化率能提升 35%!想要让界面、文案、按钮成为转化 “利器”,A/B 测试绝对是必备技能。今天就通过真实案例,手把手教你用 A/B 测试提升 APP 转化率!一、为啥 A/B 测试是转化率的 “加速器”?用数据说话先看两组真实数据:某电商 APP 对商品
APP开发后如何做热更新? (动态修复BUG!不重新上架的更新方案)
APP 刚上线就发现严重 BUG,难道只能等重新上架 “干着急”?据 App Annie 发布的《2024 年移动应用质量报告》显示,因等待重新上架修复问题,平均每个 APP 会流失 12% 的用户。而热更新技术能让你绕过应用商店审核,动态修复 BUG!今天就手把手教你 APP 热更新的实现方案,让你的应用随时 “满血复活”。一、为啥热更新成了开发者的 “救命稻草”?先看一组真实数据:某热门游戏