1. 概述
1.1 I²C系统简介
I²C(Inter-Integrated Circuit)是一种简单高效的双向同步串行通信总线,由飞利浦公司开发,仅通过SDA(串行数据线)和SCL(串行时钟线)两根信号线即可实现设备间的数据交换。I²C支持多主从架构,允许多个主机与多个从机在同一总线上通信,每个从机拥有唯一地址。由于其结构简洁、占用引脚少、成本低廉,被广泛应用于连接微控制器与低速外设,如传感器、存储器等。
随着系统规模扩大,单一总线段常面临地址冲突与负载电容超限的问题。为此,可通过I²C开关将总线分为多路通道解决地址冲突;使用I²C中继器或缓冲器隔离总线电容并重驱动信号以满足速率要求;在多电压域系统中则需要I²C电平转换器实现跨电压通信。
1.2 I²C总线特性
| 特性 | 规格描述 |
|---|---|
| 总线线路 | 串行数据线(SDA)+串行时钟线(SCL) |
| 通信方式 | 同步、串行、半双工 |
| 输出类型 | 开漏输出,需外加上拉电阻 |
| 最大速率 | 标准模式:100 kbps 快速模式:400 kbps 快速增强模式:1 Mbps 高速模式:3.4 Mbps 超快速模式:5 Mbps |
| 拓扑结构 | 多主多从 |
| 设备寻址 | 软件寻址,每个设备具有唯一地址 |
| 仲裁机制 | 支持总线仲裁 |
| 应答机制 | 支持 |
| 抗干扰能力 | 集成50ns滤波器抑制毛刺干扰 |
| 扩展性 | 理论寻址模式的最大节点数为27(7-Bit地址)或2¹⁰(10-Bit地址),但有保留16个地址用于特殊用途。实际连接设备数量受总线最大电容限制 |
1.3 I²C系统术语表
| 术语 | 描述 |
|---|---|
| I²C | Inter-Integrated Circuit,通常简写为I²C。 |
| SDA | I²C串行数据线(Serial Data Line) |
| SCL | I²C串行时钟线(Serial Clock Line) |
| 控制器/主机 | 发起总线传输、产生时钟信号和终止传输的设备。在最新的I²C/I³C协议规范中,“主机”相关表述已由“Master”更新为“Controller”。本文中“控制器”与“主机”指代同一概念。 |
| 目标设备/从机 | 被控制器寻址并响应其命令的设备。在最新的I²C/I³C协议规范中,“从机”相关表述已由“Slave”更新为 “Target”。本文中“目标设备”与“从机”指代同一概念。 |
| 上拉电阻 | 连接SDA/SCL至总线电源VCC的电阻,为开漏总线提供高电平。 |
| Start | I²C通讯帧起始条件,在总线空闲状态下发起传输,通常简写为“S”。 |
| Stop | I²C通讯帧停止条件,通常简写为“P”。 |
| Repeated Start | 重复起始条件,在控制器不先发出停止条件的情况下,于一次总线传输期间再次发出起始条件。重复起始条件用于在不释放总线控制权的前提下发起新的通讯。通常简写为“Sr”。 |
| 仲裁 | I²C总线多控制器同时尝试控制总线时,确保仅一个控制器获得控制权且其数据不被破坏的机制。 |
| 时钟同步 | I²C总线两个或多个设备的时钟信号同步的机制。 |
| 时钟延展 | 目标设备拉低SCL以暂停总线传输,待就绪后释放SCL继续通信。 |
| 线与 | 开漏输出配合上拉电阻实现的逻辑“与”功能,任一设备拉低总线则总线为低 |
| 应答 | 接收器在每字节传输后发出的确认(ACK)或非确认(NACK)位。 |
| I²C开关 | 通过I²C命令控制多路下游通道选通的器件,用于总线拓扑扩展与解决地址冲突。 |
| I²C中继器 | 具备信号重驱动和两侧电容隔离功能的器件,用于延长总线距离或分段隔离负载。 |
| I²C缓冲器 | 同中继器,部分缓冲器额外支持热插拔保护功能。 |
| I²C I/O扩展芯片 | 通过I²C总线拓展额外 GPIO端口的器件,各端口可独立配置为输入或输出。 |
| I²C电平转换器 | 在两个不同电压的总线之间实现双向 I²C电平转换的器件。 |
2. I²C物理层
I²C系统为总线上的所有设备提供了两条共享的通信线路:SCL和 SDA。其中 SCL是串行时钟线,用于传输由控制器(Controller/Master)生成的时钟。SDA是串行数据线,用于向目标设备(Target/Slave)发送数据或从目标设备接收数据,实现双向、半双工数据传输。I²C支持多个控制器和多个目标设备,所有设备同时挂接在总线上,通过唯一的软件地址进行寻址。I²C器件均为开漏(Open-Drain)输出或开集电极(Open-Collector)输出结构,总线必须通过电阻或者电流源上拉到电源电压(VCC)。这种架构可以实现“线与”(Wired-AND)逻辑,使得任何设备都可以安全地将总线拉低而不会造成破坏性的总线竞争,在此基础上可以实现数据双向传输,地址仲裁,时钟延展等功能。
同一总线上的所有器件需要公共接地(GND)。逻辑电平以电源电压(VCC)为参考。一般情况下,低电平输入(VIL)电压阈值为30%VCC,高电平输入(VIH)电压阈值为70% VCC。
106
