1. I2C总线基础:协议概述、物理层特性与电气特性

1.1 I2C协议概述

I2C(Inter-Integrated Circuit)总线由Philips(现NXP)公司于1980年代推出,是一种同步、多主从、串行通信总线。在RK平台Sensor调试中,I2C是连接主控SoC与各类传感器(如摄像头、陀螺仪、加速度计、温湿度传感器)最常用的板级通信接口。

I2C总线仅需两根信号线即可完成双向数据传输:

  • SDA(Serial Data Line):串行数据线,用于传输地址、数据和控制信号。
  • SCL(Serial Clock Line):串行时钟线,由主设备产生,同步数据传输。
核心特点: 同步、半双工、多主设备仲裁、7位/10位地址、支持标准模式(100kHz)、快速模式(400kHz)及高速模式(3.4MHz)。

1.2 I2C物理层特性(SDA/SCL)

I2C物理层采用开漏(Open-Drain)结构,这是理解I2C故障排查的关键基础。每个I2C设备的SDA和SCL引脚内部为开漏输出,只能将总线拉低(输出低电平),无法主动输出高电平。

特性 说明 调试意义
开漏输出 设备只能拉低总线,高电平由上拉电阻提供 总线卡低时需检查设备是否异常拉低
线与逻辑 多个设备可同时驱动SDA/SCL,低电平优先 仲裁机制依赖此特性,地址冲突可检测
双向传输 SDA和SCL均为双向信号线 示波器测量时需注意探头负载影响
总线空闲 SDA和SCL均为高电平 空闲电平异常是常见故障现象
调试提示: 在RK平台Sensor调试中,若示波器测量SDA/SCL空闲电平低于VDD×0.7,应优先检查上拉电阻是否焊接不良或阻值过大。

1.3 I2C电气特性与上拉电阻

上拉电阻是I2C总线正常工作的核心外部元件,直接影响信号上升时间、噪声容限和功耗。RK平台Sensor子板通常使用1.8V或3.3V I2C总线,上拉电阻的选择需根据总线电容和通信速率计算。

上拉电阻计算公式:

R_p(min) = (V_DD - V_OL(max)) / I_OL(max)
R_p(max) = t_r / (0.8473 × C_bus)

其中:

  • V_DD:总线供电电压(如1.8V或3.3V)
  • V_OL(max):输出低电平最大值(通常0.4V)
  • I_OL(max):输出低电平电流(通常3mA)
  • t_r:允许的最大上升时间(标准模式1000ns,快速模式300ns)
  • C_bus:总线总电容(包括引脚、走线、连接器电容)
总线电压 标准模式(100kHz) 快速模式(400kHz) 常见RK平台取值
1.8V 2.2kΩ ~ 10kΩ 1.5kΩ ~ 4.7kΩ 2.2kΩ / 4.7kΩ
3.3V 4.7kΩ ~ 10kΩ 2.2kΩ ~ 4.7kΩ 4.7kΩ
常见故障: 上拉电阻过大会导致上升沿变缓,在高速通信时出现数据采样错误;上拉电阻过小则增加功耗,且可能超出设备I_OL规格,导致低电平无法被正确识别。

1.4 I2C总线结构示意图

下图展示了RK平台SoC与多个Sensor设备之间的I2C总线连接结构,包含上拉电阻、开漏输出和总线电容等关键物理要素。

RK平台I2C总线物理连接结构图 VDD (1.8V / 3.3V) Rp Rp SDA SCL C_bus(走线 + 引脚 + 连接器寄生电容) RK SoC 主设备(Master) 开漏输出(Open-Drain) Sensor 1 从设备(Slave) Sensor 2 从设备(Slave) 7位地址:0x48 7位地址:0x6B 物理层关键检查点: 1. 上拉电阻Rp是否焊接?阻值是否在推荐范围内? 2. 总线空闲时SDA/SCL电平是否接近VDD? 3. 总线电容C_bus是否过大(走线过长、分支过多)? 4. 各Sensor设备地址是否冲突?

1.5 I2C总线时序基础

I2C通信以起始条件(START)开始,以停止条件(STOP)结束。每个字节传输后,接收方需回复应答位(ACK/NACK)。这是RK平台Sensor驱动调试中分析逻辑分析仪波形的基础。

  • 起始条件(S):SCL高电平时,SDA从高电平切换到低电平。
  • 停止条件(P):SCL高电平时,SDA从低电平切换到高电平。
  • 数据采样:数据在SCL低电平时变化,SCL高电平时采样。
  • 应答位:第9个SCL时钟周期,接收方将SDA拉低表示ACK,保持高电平表示NACK。
RK平台调试要点: 当Sensor无应答(NACK)时,常见原因包括:设备地址错误、Sensor未上电、I2C总线被其他设备拉死、上拉电阻失效导致信号幅值不足。

1.6 常见I2C物理层故障速查表

故障现象 可能原因 排查手段
SDA/SCL空闲电平为0V 上拉电阻虚焊/损坏;某设备异常拉低总线 万用表测电阻两端电压;逐设备断开排查
SDA/SCL空闲电平偏低 上拉电阻阻值过大;总线漏电流 示波器测上升时间;计算C_bus
波形上升沿缓慢 总线电容过大;上拉电阻偏大 减小上拉电阻;缩短走线;增加驱动能力
通信时出现NACK 地址错误;Sensor未初始化;时钟延展超时 核对Datasheet地址;检查Sensor供电和复位
SCL无时钟输出 SoC I2C控制器未使能;GPIO复用配置错误 检查RK平台DTS配置;确认i2c节点状态

1.7 RK平台I2C控制器内部架构

RK平台I2C控制器集成在SoC内部,通过APB总线与CPU连接,支持多主设备仲裁和时钟延展。理解内部架构有助于定位驱动层故障。

RK平台I2C控制器内部架构 APB总线 寄存器接口 控制寄存器 状态寄存器 数据寄存器 时钟分频器 数字滤波器 多主仲裁 I2C总线接口(SDA/SCL) GPIO复用(IOMUX)→ 物理引脚

1.8 本章小结