1. MIPI CSI-2 协议概述

1.1 MIPI CSI-2 协议分层架构

MIPI CSI-2(Camera Serial Interface 2)是移动与嵌入式领域最主流的摄像头串行接口标准。其协议栈采用经典的三层分层结构,从下至上依次为:物理层(Physical Layer)、协议层(Protocol Layer) 和 应用层(Application Layer)。每一层都承担明确的职责,并通过标准化的接口与相邻层交互。

核心要点: CSI-2 的分层设计使得物理层可以独立演进(如 D-PHY 升级到 C-PHY),而协议层和应用层保持兼容,极大降低了摄像头驱动开发的适配成本。
MIPI CSI-2 三层协议栈架构 MIPI CSI-2 协议栈分层架构 应用层(Application Layer) 像素数据格式封装(RAW8/10/12, YUV, JPEG) 帧/行/像素语义定义 协议层(Protocol Layer) 长包/短包传输、ECC校验、CRC校验 虚拟通道(Virtual Channel)多路复用 数据包解析与重组 物理层(Physical Layer) D-PHY / C-PHY 电气特性与时钟/数据 Lane 高速(HS)与低功耗(LP)模式切换 驱动 关注 点 寄存器 配置 时序

1.2 各层职责详解

1.2.1 物理层(Physical Layer)

物理层定义了摄像头传感器与主机处理器之间的电气接口、信号时序和传输介质。CSI-2 物理层支持两种 PHY 标准:D-PHY 和 C-PHY。物理层负责将协议层的并行数据转换为串行比特流,通过差分信号线(D-PHY)或三线编码(C-PHY)进行传输。

  • 高速模式(HS): 用于传输像素数据,差分信号摆幅约 200mV,速率可达 Gbps 级别。
  • 低功耗模式(LP): 用于控制信号和总线握手,单端信号摆幅约 1.2V,速率较低但功耗极低。
  • Lane 配置: 支持 1/2/4 条数据 Lane,时钟 Lane 独立(D-PHY)或嵌入数据(C-PHY)。

1.2.2 协议层(Protocol Layer)

协议层负责将应用层的像素数据封装为符合 CSI-2 规范的数据包格式,并处理多路复用、错误检测与恢复。协议层是驱动开发中需要重点解析的部分。

数据包类型 功能描述 长度
短包(Short Packet) 传输帧起始(FS)、帧结束(FE)、行起始(LS)、行结束(LE)等同步信息 4 字节(含 ECC)
长包(Long Packet) 传输像素数据、嵌入式数据(如曝光参数、增益值) 可变(含 16-bit 数据长度 + ECC + CRC)
驱动调试提示: 协议层最常见的故障是 ECC 校验失败或 CRC 不匹配,通常由物理层信号完整性下降或 Lane 映射错误导致。在调试初期,建议先检查短包同步头是否正确。

1.2.3 应用层(Application Layer)

应用层定义了像素数据的格式与语义,包括色彩深度(RAW8/10/12/14/16)、色彩空间(YUV、RGB、JPEG)、数据交错方式以及帧/行结构。应用层直接与摄像头驱动中的 V4L2(Video for Linux 2)或 Android Camera HAL 对接。

  • RAW 格式: 直接输出 Bayer 模式原始数据,常用于 ISP 后处理。
  • YUV 格式: 亮度和色度分离,便于压缩和显示。
  • JPEG 格式: 压缩图像数据,适用于拍照场景。

1.3 D-PHY 与 C-PHY 的区别

D-PHY 和 C-PHY 是 MIPI 联盟定义的两套物理层标准,它们在信号编码、时钟方案、带宽效率和引脚数量上存在显著差异。下表从多个维度进行对比:

对比维度 D-PHY C-PHY
信号线 每 Lane 2 根差分线(Dp/Dn)+ 1 根时钟差分线 每 Lane 3 根三线(A/B/C),时钟嵌入数据
时钟方案 独立时钟 Lane,DDR 双沿采样 无独立时钟,通过三线状态转换编码时钟信息
每 Lane 峰值带宽 2.5 Gbps(D-PHY v2.0) 5.7 Gbps(C-PHY v2.0,等效 2.85 Gsym/s × 2 bits/sym)
编码方式 NRZ(不归零)差分编码 3 线 3 态编码,每符号传输 2 bits
功耗效率 中等,HS 模式约 1.2 mW/Gbps 较高,相同带宽下功耗比 D-PHY 低约 20-30%
引脚数量(4 Lane 配置) 10 根(8 数据 + 2 时钟) 12 根(12 数据,无独立时钟)
适用场景 成熟、兼容性广,主流传感器和 SoC 均支持 高带宽需求、引脚受限场景(如折叠屏、多摄)
D-PHY 与 C-PHY 信号对比 D-PHY 与 C-PHY 信号拓扑对比 D-PHY 拓扑 时钟 Lane(CLK+ / CLK-) 数据 Lane 0(D0+ / D0-) 数据 Lane 1(D1+ / D1-) 数据 Lane 2(D2+ / D2-) C-PHY 拓扑 Lane 0(A0 / B0 / C0) Lane 1(A1 / B1 / C1) Lane 2(A2 / B2 / C2) 每 Lane 3 线,时钟嵌入数据编码中

1.4 驱动开发视角的关键差异

从摄像头驱动调试的角度,D-PHY 和 C-PHY 的差异直接影响以下配置项:

  1. 时钟配置: D-PHY 需要独立配置时钟 Lane 的频率和相位;C-PHY 无需独立时钟,但需要配置三线编码的符号率。
  2. Lane 映射: D-PHY 的 Lane 映射相对简单,只需匹配正负差分对;C-PHY 的三线映射更复杂,需要确保 A/B/C 三线顺序正确。
  3. 均衡与去加重: C-PHY 在高速下对信号完整性更敏感,通常需要开启接收端均衡(CTLE)和发送端去加重(De-emphasis)。
  4. 功耗管理: C-PHY 在低功耗模式下支持更细粒度的电源门控,驱动需要实现对应的 ULPS(超低功耗状态)控制。
常见陷阱: 在混合使用 D-PHY 和 C-PHY 的系统中(如某些 SoC 同时支持两种 PHY),驱动必须通过读取传感器或 SoC 的 PHY 类型寄存器来动态切换配置,否则会导致链路无法训练或数据错乱。

1.5 本章小结