2. Sensor硬件接口

在瑞芯微 RK 平台 Sensor 驱动开发中,MIPI CSI-2 是连接图像传感器与 SoC 的最主流物理层与协议层标准。本章深入解析 MIPI CSI-2 协议栈、D-PHY 电气特性、Lane 动态配置以及时钟数据恢复(CDR)机制,为后续 RAW 数据采集性能调优奠定硬件基础。

2.1 MIPI CSI-2 协议分层架构

MIPI CSI-2 采用分层设计,从物理层到应用层共分为五层。每一层职责清晰,便于跨平台兼容与驱动抽象。

层级 名称 功能描述 RK 驱动关注点
Layer 4 应用层 定义像素格式(RAW8/10/12/14)、帧结构、元数据 V4L2 像素格式映射、CSI 接收器配置
Layer 3 协议层 长包/短包格式、ECC 校验、CRC 校验 包头解析、错误统计、重传机制
Layer 2 链路层 Lane 合并/拆分、字对齐、低功耗模式控制 D-PHY 初始化序列、LP/HS 模式切换
Layer 1 物理层 D-PHY 电气特性、时钟 Lane、数据 Lane 电压摆幅、预加重、阻抗匹配
Layer 0 互连层 PCB 走线、连接器、ESD 防护 信号完整性、眼图测试
关键概念: CSI-2 协议层使用“长包”传输像素数据,使用“短包”传输帧同步、行同步等控制信息。短包只有 32 位数据头,长包包含 32 位头 + 可变长度数据 + 16 位 CRC。
MIPI CSI-2 协议分层架构 MIPI CSI-2 协议分层架构 应用层 (Layer 4) — 像素格式 / 帧结构 / 元数据 协议层 (Layer 3) — 长包 / 短包 / ECC / CRC 链路层 (Layer 2) — Lane 合并 / 字对齐 / LP-HS 切换 物理层 (Layer 1) — D-PHY 电气特性 / 时钟 Lane / 数据 Lane 互连层 (Layer 0) — PCB 走线 / 连接器 / ESD 防护 驱动开发重点:协议层解析 + 物理层时序配置 + 链路层初始化序列

2.2 D-PHY 电气特性与信号完整性

D-PHY 是 MIPI 联盟定义的物理层标准,采用差分信号传输,支持高速(HS)和低功耗(LP)两种模式。RK 平台 SoC 的 CSI 接口兼容 D-PHY v1.2/v2.0。

2.2.1 关键电气参数

参数 HS 模式 LP 模式 RK 平台典型值
差分电压摆幅 200 mV (min) ~ 300 mV (typ) 1.2 V (单端) 200 mV (HS) / 1.2V (LP)
共模电压 200 mV 0 ~ 1.2 V 200 mV (HS)
数据传输速率 80 Mbps ~ 2.5 Gbps / Lane ≤ 10 Mbps 1.2 Gbps (RK3588)
上升/下降时间 ≤ 150 ps ≤ 25 ns 100 ps (HS)
端接电阻 100 Ω (差分) 高阻 100 Ω (内部端接)
信号完整性警告: 在 RK 平台调试中,HS 模式下差分电压摆幅低于 150 mV 将导致眼图闭合,引发 CRC 错误或 Lane 失锁。务必使用示波器测量 Sensor 输出端与 SoC 接收端的眼图。

2.2.2 LP 与 HS 模式切换时序

D-PHY 在 LP 和 HS 模式之间切换时,需要遵循严格的时序序列。驱动初始化时必须正确实现以下状态机:

  1. Stop → HS 准备: LP-11 → LP-01 → LP-00 → HS-0 (桥接) → HS 数据传输
  2. HS → Stop: HS 数据传输结束 → HS-0 → LP-00 → LP-10 → LP-11 (Stop)
  3. 时钟 Lane 持续运行: 时钟 Lane 在 HS 数据传输期间必须保持连续时钟,不可进入 LP 模式
D-PHY LP/HS 模式切换时序 D-PHY LP → HS → LP 模式切换时序 t0 t1 t2 t3 t4 LP-11 LP-01 LP-00 HS 桥接 HS 数据传输 LP-00 驱动初始化序列必须严格遵循 LP-11 → LP-01 → LP-00 → HS 桥接 → HS 数据 的顺序 退出 HS 时需反向经过 LP-00 → LP-10 → LP-11 回到 Stop 状态

2.3 Lane 配置与动态重配

MIPI CSI-2 支持 1/2/4 Lane 配置,RK 平台 SoC 最多支持 4 Lane 输入。Lane 数量的选择直接影响带宽上限和 PCB 布局复杂度。

2.3.1 Lane 带宽计算

总带宽计算公式:

总带宽 (Gbps) = Lane 速率 (Gbps) × Lane 数量 × (8 / 10)  // 8b10b 编码开销
有效像素带宽 (MP/s) = 总带宽 (Gbps) / (像素位深 × 10^6)

示例:4 Lane @ 1.2 Gbps,RAW10 格式:

总带宽 = 1.2 × 4 × 0.8 = 3.84 Gbps
有效像素带宽 = 3.84 / (10 × 10^-6) = 384 MP/s
支持 4K@60fps (3840×2160×60 ≈ 498 MP/s) 需要 5.2 Gbps 总带宽 → 需提升 Lane 速率或增加 Lane

2.3.2 Lane 映射与重配流程

RK 平台通过 rockchip-csi2-dphy 驱动管理 Lane 映射。Sensor 端与 SoC 端的 Lane 顺序可以不同,驱动需在初始化时完成重映射。

步骤 操作 驱动接口 说明
1 解析设备树 Lane 映射 of_property_read_u32_array 读取 data-lanes 属性
2 配置 D-PHY PLL phy_set_mode_ext 设置 Lane 速率和参考时钟
3 设置 Lane 使能掩码 phy_configure 使能实际使用的 Lane
4 启动时钟 Lane phy_power_on 时钟 Lane 先于数据 Lane 启动
5 启动数据 Lane phy_power_on 按映射顺序依次启动
调优建议: 在 RK3588 平台上,如果使用 4 Lane 配置,建议将 Lane 速率设置在 1.0 ~ 1.5 Gbps 之间。超过 1.5 Gbps 时,PCB 走线长度差必须控制在 ±5 mm 以内,否则会出现 Lane 间 skew 导致数据错位。
Lane 配置与映射关系 Lane 配置与映射关系 Sensor 输出 Lane 0 (D0+) Lane 1 (D1+) Lane 2 (D2+) Lane 3 (D3+) 时钟 Lane (CLK+) Lane 重映射 设备树 data-lanes <0 1 2 3> 或 <3 2 1 0> 支持任意顺序 SoC 接收 MIPI_RX Lane 0 MIPI_RX Lane 1 MIPI_RX Lane 2 MIPI_RX Lane 3 MIPI_RX 时钟 Lane 重映射通过设备树 data-lanes 属性配置,支持任意 Lane 顺序 时钟 Lane 必须直连,不可重映射;Lane 速率需在驱动中统一配置

2.4 时钟恢复机制与 CDR

时钟数据恢复(CDR)是 MIPI CSI-2 接收端的核心模块。RK 平台 SoC 使用基于 PLL 的 CDR 电路,从数据 Lane 的跳变边沿中提取时钟信息,与时钟 Lane 的参考时钟进行相位对齐。

2.4.1 CDR 工作原理

CDR 电路包含三个关键子模块:

  • 相位检测器(PD): 比较数据跳变沿与本地时钟相位,输出超前/滞后信号
  • 环路滤波器(LF): 低通滤波,抑制高频抖动,输出控制电压
  • 压控振荡器(VCO): 根据控制电压调整输出时钟频率

CDR 锁定过程分为两个阶段:

  1. 频率捕获: VCO 频率被牵引至接近数据速率,误差 ≤ ±5%
  2. 相位锁定: 相位检测器将时钟边沿对齐到数据眼图中心,抖动 ≤ ±0.1 UI

2.4.2 RK 平台 CDR 调试参数

参数 寄存器/接口 典型值 调优方向
CDR 带宽 GRF_CSI2PHY_CON0[7:4] 0x5 (约 5 MHz) 带宽过小 → 锁定慢;过大 → 抖动传递
VCO 增益 GRF_CSI2PHY_CON1[3:0] 0x8 增益过高 → 振荡;过低 → 无法锁定
锁定检测阈值 GRF_CSI2PHY_STATUS[1:0] 0x3 (锁定) 读取状态寄存器确认锁定
眼图采样位置 GRF_CSI2PHY_CON2[5:0] 0x20 (中心采样) 根据眼图测试结果微调
调试技巧: 在 RK 平台中,如果遇到“CRC 错误持续增长”或“帧丢失”,首先检查 CDR 锁定状态寄存器。若 CDR 未锁定,优先调整 VCO 增益和 CDR 带宽,而非盲目增加 Lane 速率。
CDR 时钟恢复原理框图 CDR 时钟数据恢复原理框图 输入数据 相位检测器 环路滤波器 VCO 恢复时钟 反馈时钟 CDR 锁定条件:数据跳变密度 ≥ 20%(8b10b 编码保证)、VCO 频率误差 ≤ ±5% RK 平台通过 GRF_CSI2PHY_STATUS 寄存器读取锁定状态,锁定后眼图采样位置自动对齐

2.5 常见硬件调试问题与对策

现象 可能原因 排查方法 解决方案
CDR 无法锁定 VCO 增益过低 / 数据跳变不足 读取锁定状态寄存器 增大 VCO 增益;检查 Sensor 是否输出测试图案
CRC 错误持续增长 信号完整性差 / Lane 间 skew 过大 示波器测量眼图 调整 PCB 走线长度差;降低 Lane 速率
帧丢失或花屏 Lane 映射错误 / 时钟 Lane 失锁 检查设备树 data-lanes 属性 确认 Lane 顺序与硬件一致;重新初始化 D-PHY