2. I2C基础:协议概述、两线制功能、半双工通信原理、开漏输出与上拉电阻

2.1 I2C协议概述

I2C(Inter-Integrated Circuit)总线由Philips(现NXP)于1980年代开发,是一种同步、多主从、半双工的串行通信协议。在车载嵌入式系统中,I2C广泛用于连接传感器(如温度、压力)、EEPROM、ADC/DAC、触摸控制器、音频编解码器等中低速外设。其核心优势在于仅需两根信号线即可挂载多个设备,极大节省了MCU的GPIO引脚资源。

车载应用场景: 在车载信息娱乐系统、T-Box、域控制器中,I2C常用于读取环境光传感器、控制音频音量、配置PMIC寄存器等。标准模式(100kHz)和快速模式(400kHz)最为常见,高速模式(3.4MHz)在车载中较少使用,因其对总线电容和信号完整性要求更高。

2.2 两线制:SCL与SDA功能

I2C总线仅由两根双向信号线构成:

信号线 全称 功能描述 方向
SCL Serial Clock Line 由主设备产生的时钟信号,同步数据传输。每个时钟脉冲传输1位数据。 主设备→从设备
SDA Serial Data Line 传输地址、读写标志、数据以及应答位。数据在SCL低电平时变化,高电平时采样。 双向(主↔从)

所有连接到I2C总线的设备都通过这两根线进行通信。每个从设备拥有唯一的7位或10位地址,主设备通过发送地址来选择目标从设备。总线上的设备数量仅受限于最大总线电容(通常为400pF)和地址空间。

I2C总线拓扑结构(两线制) Rₚ Rₚ VDD (3.3V / 5V) SCL SDA 主设备 (MCU) 时钟发生器 从设备1 地址: 0x50 从设备2 地址: 0x68 所有设备通过开漏输出连接到SCL和SDA,外部上拉电阻Rₚ将总线拉高至VDD 空闲时总线为高电平;设备通过拉低总线进行通信

2.3 半双工通信原理

I2C采用半双工通信模式,即在同一时刻,数据只能在一个方向上进行传输。主设备与从设备之间通过SDA线交替发送和接收数据。通信过程由主设备发起,并始终控制SCL时钟。

一次典型的I2C数据传输流程如下:

  1. 起始条件(START): SCL为高电平时,SDA由高电平切换到低电平。
  2. 发送从设备地址: 主设备发送7位或10位地址,后跟1位读写标志(0=写,1=读)。
  3. 从设备应答(ACK): 从设备在第9个SCL周期将SDA拉低,表示确认。
  4. 数据传输: 每8位数据后跟随1位应答位。写操作时主设备发送数据;读操作时从设备发送数据。
  5. 停止条件(STOP): SCL为高电平时,SDA由低电平切换到高电平。
半双工 vs 全双工: 与SPI的全双工(同时发送和接收)不同,I2C在半双工模式下,主设备发送地址后必须等待从设备应答,然后才能继续发送或接收数据。这种机制简化了总线仲裁,但降低了理论吞吐量。

2.4 开漏输出与上拉电阻

I2C总线的物理层核心是开漏输出(Open-Drain)结构。每个设备的SCL和SDA引脚内部都是一个N沟道MOSFET,漏极开路连接到总线。设备只能将总线拉低(输出低电平),而不能主动驱动总线为高电平。总线的高电平由外部上拉电阻提供。

特性 开漏输出 推挽输出(对比)
输出高电平 依赖外部上拉电阻 由内部电路主动驱动
输出低电平 内部MOSFET导通,拉低总线 内部MOSFET导通,拉低总线
多设备冲突 支持“线与”逻辑,不会短路 多个设备同时输出不同电平会导致短路
电平转换 通过选择不同VDD,可轻松实现3.3V与5V设备混合连接 需要额外的电平转换电路

上拉电阻的选型直接影响I2C总线的信号质量和最大通信速率。电阻值的选择需平衡上升时间、功耗和噪声容限:

  • 最小电阻值(Rₚₘᵢₙ): 由VOL(最大低电平电压,通常0.4V)和IOL(最大灌电流,通常3mA)决定。Rₚₘᵢₙ = (VDD - VOL) / IOL。例如VDD=3.3V时,Rₚₘᵢₙ ≈ (3.3 - 0.4) / 0.003 ≈ 967Ω。
  • 最大电阻值(Rₚₘₐₓ): 由总线电容Cb和要求的上升时间tr决定。Rₚₘₐₓ = tr / (0.8473 × Cb)。标准模式(100kHz)要求tr ≤ 1000ns,快速模式(400kHz)要求tr ≤ 300ns。
  • 典型值: 对于大多数车载I2C应用(总线电容50~200pF),上拉电阻通常选择4.7kΩ(标准模式)或2.2kΩ(快速模式)。
开漏输出与上拉电阻工作原理 VDD Rₚ SDA 主设备内部 NMOS GND 控制 从设备内部 NMOS GND 控制 总线空闲时:Rₚ将SDA拉高 设备通信时:NMOS导通,拉低总线
车载设计注意事项: 在车载环境中,I2C总线可能受到电磁干扰(EMI)。过大的上拉电阻会使上升沿变缓,增加信号对噪声的敏感度;过小的上拉电阻会增加功耗并可能导致VOL超标。建议在PCB布局时,将上拉电阻靠近主设备放置,并确保SCL和SDA走线长度尽量相等,以减少信号偏移。

2.5 关键时序参数速查

下表列出了I2C标准模式和快速模式的关键时序参数,供驱动开发时参考:

参数 符号 标准模式 (100kHz) 快速模式 (400kHz) 单位
SCL时钟频率 fSCL 0 ~ 100 0 ~ 400 kHz
保持时间(起始条件) tHD;STA 4.0 0.6 μs
低电平周期 tLOW 4.7 1.3 μs
高电平周期 tHIGH 4.0 0.6 μs
数据上升时间 tr ≤ 1000 ≤ 300 ns
数据下降时间 tf ≤ 300 ≤ 300 ns
总线电容 Cb ≤ 400 ≤ 400 pF