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 通信基于主从架构,主设备负责发起通信、产生时钟信号并控制数据传输方向,从设备则响应主设备的请求。通信过程包括起始条件、地址传输、数据传输、应答信号和停止条件五个阶段。

  1. 起始条件:当 SCL 为高电平时,SDA 由高电平跳变为低电平,表示通信开始。
  2. 地址传输:主设备发送 7 位或 10 位从设备地址,后跟 1 位读/写标志位(0 表示写操作,1 表示读操作)。
  3. 数据传输:主设备与从设备之间进行数据交换,每次传输一个字节(8 位)。
  4. 应答信号:每个字节传输后,接收方需发送一个应答位(ACK/NACK),表示数据是否成功接收。
  5. 停止条件:当 SCL 为高电平时,SDA 由低电平跳变为高电平,表示通信结束。

三、I2C 工作模式与特性

(一)工作模式

I2C 支持多种工作模式,包括标准模式(≤100 kbps)、快速模式(≤400 kbps)、高速模式(≤3.4 Mbps)和超快速模式(≤5 Mbps,部分设备支持)。用户可根据实际需求选择合适的模式。

(二)特性
  • 双向通信:SDA 支持双向数据传输,主设备和从设备均可发送和接收数据。
  • 多主设备:I2C 总线支持多个主设备同时工作,但需通过总线仲裁机制避免冲突。
  • 硬件简单:仅需两根信号线,降低了电路设计的复杂性。
  • 地址区分:每个从设备具有唯一的 7 位或 10 位地址,主设备通过地址选择从设备。

四、I2C 通信时序与协议

(一)通信时序

I2C 通信时序严格遵循起始条件、地址传输、数据传输、应答信号和停止条件的顺序。以下是一个典型的写操作时序:

  1. 主设备发送起始条件。
  2. 主设备发送从设备地址和写标志位。
  3. 从设备发送应答信号。
  4. 主设备发送寄存器地址。
  5. 从设备发送应答信号。
  6. 主设备发送数据。
  7. 从设备发送应答信号。
  8. 主设备发送停止条件。
(二)协议细节
  • 起始与停止条件:通过 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)。
(二)软件实现
  1. 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);
}
  1. 传感器初始化
c复制代码
#include "bmp180.h"
void BMP180_Init(void) {
uint8_t data;
// 读取校准数据
BMP180_ReadReg(BMP180_CAL_AC1_MSB, &data, 1);
// 其他校准数据读取...
// 配置传感器(如设置测量模式)
// 具体配置取决于传感器规格书
}
  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;
}
  1. 辅助函数
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智能体能否成为企业智能化的

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部