I2C协议初识

在嵌入式系统中,我们常见I2C作为板级通信,那实际情况I2C只能做板级通信吗?本文将从什么是I2C通信,I2C协议的核心规则、I2C协议的主要应用场景三方面展开介绍

一、什么是I2C协议

I2C协议(Inter-Integrated Circuit集成电路总线),是一种串行、半双工、多主多从 的通信协议。

它的核心特点是信号少、硬件实现简单、寻址灵活 ,广泛应用于嵌入式系统中芯片间的短距离通信--这也是常说的"板级通信的简洁性 "。

I2C总线仅需两根信号线就可以完成数据的传输,无需额外的片选线,简化了硬件连接:

名称 作用
SDA(Serial Data Line) 串行数据线,用于传输实际的数据和地址信息
SCL(Serial Clock Line) 串行时钟线,由主设备产生时钟信号,同步数据的收发节奏

两根总线都需要外接上拉电阻,保证总线在空闲状态处于高电平。

二、I2C协议的核心规则

1、数据传输时序

I2C是以字节(8位)为最小传输单元 ,每传输一个字节后必须伴随1位"应答位(ACK/NACK)",这是判断单字节是否传输完成的核心依据,整帧/整会话的完毕则基于主设备发送的"停止信号"或从设备的非应答NACK。

名称 含义
起始信号 在SCL保持高电平时,主设备拉齐SDA(即由高电平变为低电平),则意味通信开始
地址与读写位 主设备先发送7位从设备地址,再发送1位读写位(1:读,0:写),从设备匹配地址后返回应答信号(ACK)
数据传输 地址匹配后,主从设备按照字节进行数据传输,每个字节后都需要应答信号确认。
停止信号 主设备在SCL高电平时,拉高SDA,则意味着通信结束。

2、主从架构

设备 作用 常见设备
主设备 负责发起通信、产生始终信号、控制通信的起始和停止 单片机(如STM32)
从设备 拥有唯一的7位或10位地址,被动响应主设备的指令,只能在主设备允许时发送数据 各种低速外围器件(温湿度传感器、存储器芯片(RTC)、显示器控制器(OLED、液晶显示模块))

3、多主多从架构

一条I2C总线上可以挂载多个主设备、多个从设备,当多个主设备同时请求总线时,会通过总线仲裁机制避免冲突,保证通信有序。
总线仲裁是通过检测SDA上自身发送的电平来判断是否发生总线"冲突"

多个主设备对总线实施控制是平等的,没有优先级别

总线控制遵循"低电平优先"的原则(即谁先发送低电平谁就掌握对总线的控制器)

三、主要应用场景

由于简单、灵活、占用引脚少的特点,I2C协议主要 用于同一个电路板上的芯片间短距离通信,但并非只能用于板级通信(板级通信是其最主流、最原生适配场景)。

1、板级通信(<10cm)

在板级I2C稳定、也不需要额外设计场景(直接用两根线+上拉电阻),但是物理层缺陷直接导致I2C板级通信是主战场

原因 解析
传输距离短 原生 I2C(无任何优化)的有效距离通常≤1 米(标准模式下),主要因为两根总线时"开漏输出+上拉电阻"的设计,距离越长,信号衰减、延迟越严重,容易出现时许错乱
抗干扰能力弱 SDA/SCL是普通单端信号线(无查分平衡设计),对电源噪声、电磁干扰(EMI)敏感(板级芯片间距离近--常常几cm,干扰小,能规避这个问题)
总线负载受限 I2C总线的电容负载(设备引脚电容、线缆分布电容)需要控制在100pF以内(标准模式) ,线缆越长,分布电容越大,超过阈值后信号无法正常跳变

2、非板级通信

通过物理层优化、协议适配,I2C也能实现短距离线缆通信(跨板、跨设备)

通信场景 I2C是否可行 关键条件 典型场景
短距离跨板/跨设备通信(1-5m) 可行(需要优化) 选用低电容线缆(eg屏蔽线),减少分布电容;降低通信速率,提升抗干扰能力;必要时添加总线缓冲器(eg:PCA965)扩展总线驱动能力和负载容量 通过屏蔽线连接外置温湿度传感器;工业控制器的主板和扩展板总线互联
中长距离通信(5-100m) 不推荐原生I2C 该用I2C转RS485/CAN;或直接用RS485或CAN 通过专用模块将I2C信号转为485信号,跨设备传输后再转回I2C;使用专门的I2C差分收发器;通过I@C-CAN模块实现协议转换

对于工业距离大于100m,建议优先选用485、CAN、Modbus等工业总线。

综上所述:I2C的核心优势是板级通信,距离过远I2C优势会快速减弱,建议选择远距离/抗干扰设计的总线(RS485、CAN),不要强行使用I2C扩展。

相关推荐
sramdram4 小时前
基于32位MCU微控制器的电动扳手控制方案
单片机·嵌入式硬件·微控制器·32位mcu·mcu微控制器
服务器硬件项目经理4 小时前
《超节点修仙录》· 第一卷·炼气期【第01话】 什么是超节点?——从「一台电脑不够用」说起
服务器·嵌入式硬件·gpu算力·硬件
远翔调光芯片^138287988725 小时前
单节锂电自行车车灯如何实现稳定亮度?FP6291 升压 + IP2332N 充电管理方案分享
人工智能·单片机·嵌入式硬件·物联网·智能家居
逐步前行5 小时前
嵌入式图形库-LVGL v9.6-基础概念
单片机·嵌入式硬件
新晨单片机设计5 小时前
S025F-STM32蓝牙智能手环(心率、血氧、体温、计步)【Proteus仿真+Keil程序+原理图】
stm32·嵌入式硬件·proteus·蓝牙智能手环
coward915 小时前
全志和瑞芯微平台反编译设备树
linux·嵌入式硬件
深圳海导科技6 小时前
深圳海导科技navynav|小型RTK数传电台:高精度定位场景下的枢纽
单片机·嵌入式硬件
创界工坊工作室7 小时前
49-基于单片机的火警报警器设计
stm32·单片机·嵌入式硬件·51单片机·proteus
笨笨饿7 小时前
144_Codex变慢的解决办法
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机·proteus
学linux的QQ蛋7 小时前
IMX6 嵌入式多传感器系统整体架构梳理
linux·嵌入式硬件·架构