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 控制器。
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 校验。
| 字段 | 长度 | 说明 |
|---|---|---|
| Data Identifier (DI) | 1 字节 | 高 6 位:虚拟通道(VC, 0-3);低 2 位:数据类型(如 RAW10=0x2B) |
| Word Count (WC) | 2 字节 | 像素数据负载的字节数(不含包头/尾) |
| ECC | 1 字节 | 包首的纠错码,可纠正 1 位错误、检测 2 位错误 |
| Pixel Data | WC 字节 | RAW 像素数据,按数据类型规定的位宽排列 |
| CRC | 2 字节 | 像素数据的循环冗余校验 |
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 关键电气参数
| 参数 | HS 模式 | LP 模式 |
|---|---|---|
| 差分电压摆幅 | 200 mV(典型) | 1.2 V(单端) |
| 共模电压 | 200 mV | 0~1.2 V |
| 数据传输速率 | 80 Mbps ~ 2.5 Gbps/Lane | ≤ 10 Mbps |
| 信号编码 | DDR(双沿采样) | 单端 NRZ |
| 终端电阻 | 100 Ω(差分) | 高阻 |
2.3 Lane 映射与配置
Lane 映射(Lane Mapping)是指 Sensor 输出的物理 Lane 与 SoC CSI-2 接收控制器的 Lane 序号之间的对应关系。由于 PCB 走线可能交叉或绕线,驱动必须支持可编程 Lane 重映射(Lane Reorder)。
2.3.1 映射配置流程
- 读取 Sensor 规格书: 确认 Sensor 支持的 Lane 数(1/2/4 Lane)及 Lane 极性(P/N 是否可交换)。
- 检查原理图: 记录 Sensor 输出 Lane 与 SoC 输入 Lane 的实际连接关系(如 Sensor Lane0 → SoC Lane2)。
- 配置 SoC 寄存器: 在 CSI-2 接收控制器的 Lane 映射寄存器中写入对应关系(通常为 4 个 2 位字段,每个字段指定物理 Lane 映射到哪个虚拟 Lane)。
- 极性交换: 如果 Dp/Dn 在 PCB 上反接,需使能极性翻转(Polarity Swap)寄存器位。
/* 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 包数据,每个字节在时钟的双沿采样
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 的完整数据流与各层关系:
2.6 本章小结
MIPI CSI-2 接口是 Camera 驱动开发的核心硬件基础。理解协议层的包结构、D-PHY 的电气特性、Lane 映射的配置方法以及时钟恢复的同步机制,是后续 RAW 图采集与 DMA 传输调试的前提。在实际调试中,建议按以下顺序排查问题:
- 电气层: 用示波器确认 HS 差分摆幅、共模电压、时钟频率是否达标。
- Lane 映射: 核对原理图与寄存器配置,确保物理 Lane 与虚拟 Lane 对应正确。
- 同步与时钟: 检查 PLL 锁定状态、同步头超时计数,必要时调整逃逸时钟周期。
- 协议层: 通过 CSI-2 接收器的 ECC/CRC 错误计数器定位包损坏来源。