3. Sensor 上电时序关键参数与典型波形

Sensor 上电时序是 Camera 模组正常工作的基础。若 AVDD、DVDD、IOVDD、MCLK、PWDN、RST 等信号的时序关系不满足 Sensor 数据手册要求,轻则 I2C 无法通信,重则 Sensor 初始化失败甚至损坏硬件。本章逐一拆解每个关键参数的定义、时序约束与典型波形。

3.1 电源域:AVDD、DVDD、IOVDD

Sensor 通常需要三路独立电源,分别供给模拟电路、数字核心与 IO 接口。三者的上电顺序、电压稳定时间与纹波要求直接影响 Sensor 内部 PLL 锁定与像素阵列偏置。

电源符号 典型电压 供电对象 关键约束
AVDD 2.8V / 3.3V 模拟电路(像素偏置、PLL、ADC) 纹波 < 30mVpp;先于 DVDD 稳定
DVDD 1.2V / 1.8V 数字核心(逻辑、ISP 前端) 纹波 < 50mVpp;必须在 AVDD 之后建立
IOVDD 1.8V / 2.8V IO 接口(I2C、MCLK、PWDN、RST) 与 DVDD 同时或稍后;需匹配主控 IO 电平
工程经验: 多数 Sensor 要求 AVDD 先于 DVDD 上电,间隔至少 0.1ms~1ms。若使用同一 PMIC 供电,需确认 LDO 使能顺序或增加 RC 延时。
三路电源上电顺序与稳定时间要求 AVDD AVDD DVDD IOVDD t t0 t1 t2 t3 AVDD 先于 DVDD 至少 0.1ms DVDD 与 IOVDD 可同时或 IOVDD 稍后

3.2 MCLK:主时钟输入

MCLK 是 Sensor 内部 PLL 的参考时钟,通常由主控 SoC 或外部晶振提供。MCLK 的频率精度与占空比直接影响帧率与像素时钟的稳定性。

  • 典型频率: 6MHz / 12MHz / 24MHz / 27MHz(依 Sensor 型号而定)
  • 频率容差: ±1% 以内,部分高速 Sensor 要求 ±0.5%
  • 占空比: 45%~55%
  • 建立时间: MCLK 必须在电源稳定后、RST 释放前稳定输出
时序约束: 从 DVDD 稳定到 MCLK 开始振荡,通常需要 1ms~5ms 的等待时间。若 MCLK 来自 SoC GPIO 模拟,需确认 GPIO 驱动能力与输出阻抗匹配。
MCLK 稳定时序要求 DVDD MCLK t0 t1 稳定时间 1~5ms MCLK 必须在 RST 释放前稳定 频率精度 ±1% 以内

3.3 PWDN 与 RST:控制信号时序

PWDN(Power Down)与 RST(Reset)是 Sensor 的硬件控制引脚,用于控制 Sensor 的工作模式与复位状态。错误的电平组合会导致 Sensor 无法进入正常模式。

信号 有效电平 典型连接 时序要求
PWDN 高有效(部分 Sensor 低有效) GPIO 或 PMIC 控制 上电期间保持有效;电源稳定后释放
RST 低有效(通常内部上拉) GPIO 或专用复位 IC RST 低电平宽度 ≥ 1ms;释放后等待 Tready
常见错误: PWDN 与 RST 同时拉高导致 Sensor 进入测试模式;或 RST 释放过早,MCLK 尚未稳定,造成 PLL 失锁。务必按照数据手册的时序图严格操作。
PWDN 与 RST 时序关系 PWDN 高 低 RST 低 高 t t0 t1 t2 t3 t0-t1: PWDN 保持高电平,Sensor 处于复位态 t1-t2: PWDN 拉低,RST 仍低,等待 MCLK 稳定 t2-t3: RST 释放,Sensor 开始初始化

3.4 I2C 通信时序要求

I2C 是 Sensor 与主控之间最常用的控制总线。上电后,I2C 通信必须在所有电源稳定、MCLK 振荡、RST 释放之后才能发起。过早的 I2C 访问会导致 NACK 或寄存器写入失败。

  • I2C 地址: 7bit 或 10bit,常见 Sensor 地址 0x20~0x6C
  • 速率: 标准模式 100kHz,快速模式 400kHz,高速模式 1MHz
  • 上电等待时间: 从 RST 释放到首次 I2C 通信,通常需要 5ms~20ms
  • 时序参数: SCL 高/低电平宽度、上升/下降时间、数据建立/保持时间
驱动实现要点: 在 Linux 内核中,I2C 通信通过 i2c_transfer() 完成。上电时序控制通常在 Sensor 驱动 probe() 函数中,使用 msleep() 或 usleep_range() 实现延时等待。
/* 典型上电时序代码片段 */
static int sensor_power_on(struct sensor_dev *sdev)
{
    /* 1. 使能 AVDD */
    regulator_enable(sdev->avdd);
    usleep_range(1000, 2000);   /* 等待 1ms */

    /* 2. 使能 DVDD */
    regulator_enable(sdev->dvdd);
    usleep_range(1000, 2000);   /* 等待 1ms */

    /* 3. 使能 IOVDD */
    regulator_enable(sdev->iovdd);
    usleep_range(1000, 2000);   /* 等待 1ms */

    /* 4. 使能 MCLK */
    clk_prepare_enable(sdev->mclk);
    usleep_range(2000, 5000);   /* 等待 MCLK 稳定 */

    /* 5. 释放 PWDN */
    gpiod_set_value(sdev->pwdn, 0);
    usleep_range(1000, 2000);   /* 等待 PWDN 生效 */

    /* 6. 释放 RST */
    gpiod_set_value(sdev->rst, 1);
    msleep(20);                 /* 等待 Sensor 初始化完成 */

    return 0;
}

3.5 完整上电时序波形图

将上述所有信号整合到一张时序图中,可以清晰看到各信号之间的先后关系与等待窗口。这是驱动开发中最重要的参考图。

Sensor 完整上电时序波形图 AVDD DVDD IOVDD MCLK PWDN RST I2C t Phase 1 Phase 2 Phase 3 Phase 4 Phase 1: 电源依次上电 Phase 2: MCLK 稳定 Phase 3: PWDN/RST 释放 Phase 4: I2C 通信开始

3.6 常见时序问题与排查方法

现象 可能原因 排查方法
I2C 通信 NACK IOVDD 未稳定;RST 未释放;Sensor 地址错误 用示波器测量 IOVDD 与 RST 波形;核对数据手册地址
Sensor 输出全黑或花屏 AVDD 纹波过大;MCLK 频率偏差超限 检查电源纹波;用频率计测量 MCLK
Sensor 无法退出 standby PWDN 电平错误;上电顺序不满足 确认 PWDN 有效电平;调整电源使能顺序
帧率不稳定 DVDD 电压偏低;MCLK 占空比异常 测量 DVDD 电压;检查 MCLK 占空比
调试建议: 在驱动 probe() 函数中增加 dev_dbg() 打印每个步骤的时间戳,配合示波器多通道同时抓取 AVDD、DVDD、IOVDD、MCLK、PWDN、RST、SCL、SDA 共 8 个信号,可以快速定位时序问题。