海思ISP Sensor初始化与AF对焦联调实战 - 第4节

4.1 硬件上电序列

Sensor 上电序列是芯片正常工作的第一道门槛。不同厂商(Sony、Samsung、OmniVision)的时序要求略有差异,但核心原则一致:先供电、再拉高复位、最后配置 I²C。错误的顺序可能导致 sensor 无法识别、输出花屏甚至损坏。

4.1.1 典型三路电源

电源域 典型电压 用途 上电顺序
VDD_IO (DVDD) 1.8V / 2.8V I²C、MIPI、GPIO 接口电源 第 1 位
VDD_CORE (AVDD) 1.2V / 1.8V 内部核心逻辑、PLL、ADC 第 2 位
VDD_PIX (VAA) 2.8V / 3.3V 像素阵列、模拟读出 第 3 位
实战提示:多数 sensor 要求 VDD_IO 先稳定,再上 VDD_CORE,最后 VDD_PIX。部分 Sony IMX 系列允许 VDD_IO 与 VDD_CORE 同时上升,但 VDD_PIX 必须最后。查阅 datasheet 中的 "Power-Up Sequence Timing Diagram" 确认。

4.1.2 上电时序关键参数

  • T1 – 电源上升时间:通常要求 < 1ms(从 10% 到 90%),过慢可能导致 sensor 内部 POR(Power-On Reset)误触发。
  • T2 – 电源稳定到复位释放:所有电源达到标称值后,需等待至少 1ms 再拉高 XCLR(复位引脚)。
  • T3 – 复位释放到 I²C 通信:复位释放后,sensor 内部 PLL 和寄存器需要初始化,通常等待 5ms~20ms 才能进行 I²C 读写。
Sensor 上电时序图 VDD_IO 1.8V VDD_CORE 1.2V VDD_PIX 2.8V XCLR 高电平 I²C 通信开始 时间 T1 T2 T3

4.2 Reset 与 Standby 模式

Reset 和 Standby 是 sensor 两种低功耗/复位状态,驱动工程师必须清楚它们的区别和切换条件。

4.2.1 硬件复位 vs 软件复位

复位类型 触发方式 寄存器状态 恢复时间 典型场景
硬件复位 (XCLR) 拉低 XCLR 引脚 ≥ 1ms 全部恢复默认值 5~20ms 上电初始化、异常恢复
软件复位 (Register 0x0103) I²C 写入复位命令 全部恢复默认值 2~10ms 模式切换、参数重载
Group Hold 寄存器 0x0104 控制 部分寄存器锁定 立即生效 多寄存器同步写入

4.2.2 Standby 模式

Standby 模式下 sensor 停止输出图像,但保留寄存器配置,唤醒速度比完全复位快得多。

  • 硬件 Standby:通过 XCLR 引脚拉低进入,功耗 < 100μA,唤醒需重新初始化 PLL。
  • 软件 Standby:通过寄存器 0x0100[0] = 0 进入,功耗 < 500μA,唤醒仅需恢复 MIPI 时钟。
  • Streaming On/Off:寄存器 0x0100[0] = 1 开始输出,= 0 停止输出,这是日常对焦调试最常用的控制方式。
常见陷阱:部分 sensor 在 Standby 模式下 I²C 仍然响应,但 MIPI 时钟停止。如果此时读取帧计数器,可能返回无效值。务必在唤醒后等待至少 1 帧时间再读取图像数据。
Reset / Standby 状态切换 Normal HW Reset SW Reset Standby XCLR 拉低 写 0x0103 写 0x0100[0]=0 重新初始化 重新配置 写 0x0100[0]=1

4.3 PLL 锁定时间

PLL(锁相环)负责为 sensor 内部 ADC、MIPI 和像素驱动提供时钟。PLL 锁定时间直接影响上电到出图的总延迟。

4.3.1 PLL 锁定时间的影响因素

  • 参考时钟频率:通常为 6~27MHz 晶振或外部时钟。频率越高,锁定越快。
  • VCO 增益与环路带宽:带宽越宽,锁定越快,但噪声越大。sensor 厂商会平衡锁定时间与抖动性能。
  • 分频比:从参考时钟到目标频率的分频倍数。分频比越大,锁定时间通常越长。
  • 温度与电压:极端温度下 PLL 锁定时间可能延长 2~3 倍。

4.3.2 典型锁定时间范围

Sensor 类型 参考时钟 典型锁定时间 最大锁定时间
VGA / 1MP 低端 6~12 MHz 1~3 ms 5 ms
2~8MP 主流 12~24 MHz 3~8 ms 15 ms
12MP+ 高端 24~27 MHz 5~15 ms 25 ms
驱动实现要点:在 I²C 初始化序列中,配置完 PLL 相关寄存器后,必须插入至少 max_lock_time + 2ms 的延时,再开始配置其他寄存器。部分 sensor 提供 PLL Lock 状态寄存器(如 0x001E[0]),建议轮询该位确认锁定后再继续。

4.3.3 代码示例:PLL 锁定等待

// 配置 PLL 寄存器
sensor_write_reg(0x0300, 0x04);  // PLL 分频配置
sensor_write_reg(0x0301, 0x00);
sensor_write_reg(0x0302, 0x1E);  // VCO 倍频
sensor_write_reg(0x0303, 0x00);
sensor_write_reg(0x0304, 0x03);  // 输出分频

// 等待 PLL 锁定(最大 15ms)
uint32_t timeout = 15000;  // 15ms 超时
while (timeout--) {
    uint8_t status = sensor_read_reg(0x001E);
    if (status & 0x01) {
        break;  // PLL 已锁定
    }
    delay_us(1);
}

if (timeout == 0) {
    // 处理 PLL 锁定失败
    printf("ERROR: PLL lock timeout!\n");
    return -1;
}
PLL 锁定时间与初始化流程 配置 PLL 寄存器 等待锁定 轮询状态 继续 t = 0 t = 5~15ms t = 5~15ms + 轮询 锁定时间取决于参考时钟、VCO 增益和分频比 建议使用轮询 + 超时机制,避免固定延时浪费

4.4 上电时序实战检查清单

在驱动调试阶段,使用示波器或逻辑分析仪验证以下时序点:

  1. 电源上升顺序:VDD_IO → VDD_CORE → VDD_PIX,上升时间 < 1ms。
  2. XCLR 释放时机:所有电源稳定后至少 1ms 再拉高。
  3. I²C 首次通信时机:XCLR 拉高后等待 5~20ms(具体值查 datasheet)。
  4. PLL 锁定确认:配置 PLL 后轮询锁定状态或等待最大锁定时间。
  5. MIPI 时钟稳定:PLL 锁定后再等待 1~2 帧时间,确保 MIPI 时钟稳定再开始接收图像数据。
调试技巧:如果 sensor 初始化后无输出,优先检查 XCLR 引脚电平是否被外部电路拉低。部分开发板的 XCLR 默认接 GPIO,需要在 bootloader 阶段提前拉高,否则 sensor 一直处于复位状态。