在嵌入式系统中,我们常见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扩展。