Camera驱动实战:raw图采集与DMA传输调试 - 第2节

2.1 MIPI CSI-2 协议概述

MIPI CSI-2(Camera Serial Interface 2)是移动与嵌入式图像传感器最广泛采用的高速串行接口标准。它定义了物理层(D-PHY)、协议层(CSI-2)与应用层(RAW/JPEG/YUV)的分层架构。在 RAW 图采集场景中,CSI-2 负责将 Sensor 输出的 RAW10/RAW12/RAW16 像素数据打包成短包(Short Packet)与长包(Long Packet),通过差分信号线传输到 SoC 的 ISP 或 DMA 控制器。

核心分层模型: CSI-2 协议栈从上到下依次为:应用层(RAW 像素格式)→ 协议层(包解析、ECC/CRC 校验)→ 物理层(D-PHY 电气与时序)。

2.1.1 协议层包结构

CSI-2 使用两种包类型:

  • 短包(Short Packet, 4 字节): 用于帧同步(Frame Start/End)、行同步(Line Start/End)等控制信息。包含 2 字节数据标识符(Data Identifier, DI)与 2 字节 ECC。
  • 长包(Long Packet): 用于传输 RAW 像素数据。结构为:32 位包首(含 DI + 16 位字计数 WC)+ 像素数据负载 + 16 位 CRC 校验。
CSI-2 长包字段说明
字段长度说明
Data Identifier (DI)1 字节高 6 位:虚拟通道(VC, 0-3);低 2 位:数据类型(如 RAW10=0x2B)
Word Count (WC)2 字节像素数据负载的字节数(不含包头/尾)
ECC1 字节包首的纠错码,可纠正 1 位错误、检测 2 位错误
Pixel DataWC 字节RAW 像素数据,按数据类型规定的位宽排列
CRC2 字节像素数据的循环冗余校验
调试要点: 驱动初始化时,务必确认 Sensor 输出的 数据类型(RAW10/RAW12) 与 SoC CSI-2 接收控制器配置一致。数据类型不匹配会导致像素错位或 CRC 错误风暴。

2.2 D-PHY 电气特性

D-PHY 是 MIPI 联盟定义的物理层标准,采用差分信号对(Dp/Dn)传输数据与时钟。在 Camera 场景中,通常使用 1 条时钟 Lane + 1~4 条数据 Lane。D-PHY 有两种工作模式:高速模式(HS, High Speed) 用于传输像素数据,低功耗模式(LP, Low Power) 用于控制与总线周转(BTA)。

2.2.1 关键电气参数

D-PHY v1.2 典型电气参数
参数HS 模式LP 模式
差分电压摆幅200 mV(典型)1.2 V(单端)
共模电压200 mV0~1.2 V
数据传输速率80 Mbps ~ 2.5 Gbps/Lane≤ 10 Mbps
信号编码DDR(双沿采样)单端 NRZ
终端电阻100 Ω(差分)高阻
硬件调试常见陷阱: HS 模式下差分电压摆幅仅 200 mV,PCB 走线阻抗不匹配(目标 100 Ω 差分)会导致信号反射、眼图闭合。调试时优先用示波器测量 Dp/Dn 差分波形,确认摆幅与共模电压是否在规格内。

2.3 Lane 映射与配置

Lane 映射(Lane Mapping)是指 Sensor 输出的物理 Lane 与 SoC CSI-2 接收控制器的 Lane 序号之间的对应关系。由于 PCB 走线可能交叉或绕线,驱动必须支持可编程 Lane 重映射(Lane Reorder)。

2.3.1 映射配置流程

  1. 读取 Sensor 规格书: 确认 Sensor 支持的 Lane 数(1/2/4 Lane)及 Lane 极性(P/N 是否可交换)。
  2. 检查原理图: 记录 Sensor 输出 Lane 与 SoC 输入 Lane 的实际连接关系(如 Sensor Lane0 → SoC Lane2)。
  3. 配置 SoC 寄存器: 在 CSI-2 接收控制器的 Lane 映射寄存器中写入对应关系(通常为 4 个 2 位字段,每个字段指定物理 Lane 映射到哪个虚拟 Lane)。
  4. 极性交换: 如果 Dp/Dn 在 PCB 上反接,需使能极性翻转(Polarity Swap)寄存器位。
驱动代码示例: 以下为某 SoC 的 Lane 映射配置片段(寄存器基址 0x1C20000):
/* Lane mapping: physical Lane 0 -> virtual Lane 2 */
#define CSI2_LANE_MAP_REG  0x1C20010
#define LANE_MAP_PHY0_VIRT2  (2 << 0)   /* bits[1:0] */
#define LANE_MAP_PHY1_VIRT0  (0 << 2)   /* bits[3:2] */
#define LANE_MAP_PHY2_VIRT1  (1 << 4)   /* bits[5:4] */
#define LANE_MAP_PHY3_VIRT3  (3 << 6)   /* bits[7:6] */

writel(CSI2_LANE_MAP_REG, 
       LANE_MAP_PHY0_VIRT2 | LANE_MAP_PHY1_VIRT0 |
       LANE_MAP_PHY2_VIRT1 | LANE_MAP_PHY3_VIRT3);

2.4 时钟恢复与同步

CSI-2 使用源同步时钟方案:Sensor 通过专用的时钟 Lane(CLK+ / CLK-)向 SoC 发送 DDR 时钟。SoC 内部的 D-PHY 接收器利用该时钟采样数据 Lane 上的信号。时钟恢复的关键在于 同步序列(Sync Pattern) 与 逃逸时钟(Escape Clock) 机制。

2.4.1 同步序列

每次从 LP 模式切换到 HS 模式时,D-PHY 发送器会先发送一段固定的同步序列:

  • LP→HS 桥接序列: LP-11 → LP-01 → LP-00(进入 HS 准备)
  • HS 同步头: 00011101(8 位,用于接收器 PLL 锁定与字节对齐)
  • 数据流: 后续为 CSI-2 包数据,每个字节在时钟的双沿采样
调试技巧: 如果 SoC 报告“HS 同步失败”或“PLL 失锁”,首先用示波器检查时钟 Lane 的 HS 跳变是否干净(无毛刺),其次检查数据 Lane 的同步头是否被噪声破坏。常见原因是 Sensor 上电时序不满足 D-PHY 初始化要求。

2.4.2 时钟恢复的驱动配置

在 Linux 内核中,时钟恢复通常由 D-PHY 硬件自动完成,但驱动需要正确配置以下参数:

时钟恢复相关寄存器配置项
配置项说明典型值
HS 时钟频率Sensor 输出的 HS 时钟频率(MHz)200~1000 MHz
PLL 倍频系数SoC 内部 PLL 倍频,用于生成采样时钟根据频率计算
同步头超时等待同步头的最大时间(us)100 us
逃逸时钟周期LP 模式下用于控制命令的时钟周期100 ns

2.5 本章知识结构图

以下 SVG 图展示了 MIPI CSI-2 从 Sensor 到 SoC 的完整数据流与各层关系:

MIPI CSI-2 协议栈与数据流 MIPI CSI-2 协议栈与数据流 图像传感器 (Sensor) RAW10/RAW12 像素输出 CSI-2 协议层 短包/长包封装 + ECC/CRC D-PHY 物理层 (TX) HS/LP 模式 + 差分信号 差分线 Dp/Dn SoC CSI-2 接收器 Lane 映射 + 极性交换 时钟恢复与同步 PLL 锁定 + 字节对齐 协议解析 ECC 校验 + CRC 校验 DMA 到内存 Lane 映射示例(4 Lane 配置) 物理 Lane 0 → 虚拟 Lane 2 | 物理 Lane 1 → 虚拟 Lane 0 | 物理 Lane 2 → 虚拟 Lane 1 | 物理 Lane 3 → 虚拟 Lane 3 极性交换:若 Dp/Dn 反接,使能对应 Lane 的 Polarity Swap 位(通常为寄存器 bit[8+ lane_id])

2.6 本章小结

MIPI CSI-2 接口是 Camera 驱动开发的核心硬件基础。理解协议层的包结构、D-PHY 的电气特性、Lane 映射的配置方法以及时钟恢复的同步机制,是后续 RAW 图采集与 DMA 传输调试的前提。在实际调试中,建议按以下顺序排查问题:

  1. 电气层: 用示波器确认 HS 差分摆幅、共模电压、时钟频率是否达标。
  2. Lane 映射: 核对原理图与寄存器配置,确保物理 Lane 与虚拟 Lane 对应正确。
  3. 同步与时钟: 检查 PLL 锁定状态、同步头超时计数,必要时调整逃逸时钟周期。
  4. 协议层: 通过 CSI-2 接收器的 ECC/CRC 错误计数器定位包损坏来源。