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总线连接结构,包含上拉电阻、开漏输出和总线电容等关键物理要素。
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连接,支持多主设备仲裁和时钟延展。理解内部架构有助于定位驱动层故障。