2. MIPI CSI-2 协议基础:物理层、协议层与数据格式

MIPI CSI-2(Camera Serial Interface 2)是移动和嵌入式领域最主流的摄像头串行接口标准。本章深入剖析其三层架构:物理层(D-PHY / C-PHY)、协议层(LLP、Packet)以及常见的数据格式(RAW、YUV、JPEG)。理解这些基础是后续 Sensor 初始化与调试的必备前提。

核心要点: CSI-2 采用分层设计,物理层负责比特传输,协议层负责数据打包与解包,应用层定义数据格式。调试时,80% 的问题出在物理层(电压、时钟、阻抗匹配)或协议层(同步头、CRC 错误)。

2.1 物理层:D-PHY 与 C-PHY

物理层定义了 Camera Sensor 与 SoC 之间的电气连接、时钟同步和信号编码方式。CSI-2 支持两种物理层标准:D-PHY(主流)和 C-PHY(更高带宽)。

2.1.1 D-PHY 架构

D-PHY 使用差分信号对(Dp/Dn)传输数据,每个 Lane 包含一对差分线。典型配置为 1 个 Clock Lane + 1~4 个 Data Lane。

  • Clock Lane: 提供 DDR(Double Data Rate)时钟,数据在时钟的上升沿和下降沿各采样一次。
  • Data Lane: 传输串行化的像素数据或控制指令。
  • 工作模式: High-Speed (HS) 模式(80 Mbps ~ 2.5 Gbps per Lane)和 Low-Power (LP) 模式(~10 Mbps,用于控制信号)。
  • 电压摆幅: HS 模式下差分电压约 200 mV,LP 模式下单端电压 1.2V。
实战提示: 调试 D-PHY 时,优先测量 Clock Lane 的 HS 模式差分电压(200 mV ± 20%)和共模电压(200 mV)。电压异常通常导致 SoC 无法锁定时钟,表现为“无帧”或“帧错位”。
D-PHY 连接架构(1 Clock Lane + 2 Data Lane) Camera Sensor TX SoC ISP RX Clock Lane (CLK+) CLK- (差分对) Data Lane 0 (D0+) D0- (差分对) Data Lane 1 (D1+) D1- (差分对) 每个 Data Lane 独立传输像素数据,Lane 数量越多,总带宽越高(如 4-Lane 可达 10 Gbps)

2.1.2 C-PHY 架构

C-PHY 使用 3 线(Triplet)代替差分对,每个 Lane 包含 3 根信号线(A、B、C)。通过 3 线的电压状态组合(共 7 种有效状态)在单个 Symbol 中传输 2.28 bits 数据,带宽密度更高。

特性 D-PHY C-PHY
信号线 / Lane 2 根(差分对) 3 根(Triplet)
每 Lane 峰值带宽 2.5 Gbps ~5.7 Gbps(等效)
时钟传输 独立 Clock Lane 内嵌时钟(无独立 CLK)
功耗 较低 略高(3 线同时翻转)
应用场景 主流 Sensor(IMX/OV/AR 系列) 高分辨率、高帧率(> 48MP)
注意: C-PHY 虽然带宽更高,但信号完整性要求更严格,PCB 布线需等长、阻抗匹配(50Ω 单端)。调试时需使用支持 C-PHY 解码的逻辑分析仪,普通 D-PHY 探头无法直接测量。

2.2 协议层:LLP 与 Packet 结构

协议层(Low-Level Protocol, LLP)负责将物理层传输的比特流组织成有意义的 Packet(数据包)。CSI-2 协议层定义了两种 Packet 类型:长包(Long Packet) 和 短包(Short Packet)。

2.2.1 短包(Short Packet)

短包用于传输帧同步、行同步等控制信息,不包含像素数据。长度为 4 字节(32 bits)。

短包结构(32 bits):
+--------+--------+--------+--------+
|  Data  |  Word  |  ECC   |  VC +  |
|  ID    |  Count |        |  DT    |
+--------+--------+--------+--------+
- Data ID (8 bits): 虚拟通道 (VC[1:0]) + 数据类型 (DT[5:0])
- Word Count (16 bits): 对于短包固定为 0x0000
- ECC (8 bits): 纠错码,保护前 24 bits

常见的短包类型:

  • Frame Start (FS): 数据类型 0x00,标志一帧图像的开始。
  • Frame End (FE): 数据类型 0x01,标志一帧图像的结束。
  • Line Start (LS): 数据类型 0x02,标志一行的开始(可选)。
  • Line End (LE): 数据类型 0x03,标志一行的结束(可选)。

2.2.2 长包(Long Packet)

长包用于传输实际的像素数据。结构包含包头(Packet Header)、数据负载(Payload)和包尾(Packet Footer)。

长包结构:
+----------------+------------------+------------------+----------------+
|  Packet Header |   Payload        |  Packet Footer   |                |
|  (4 bytes)     |   (Word Count    |  (2 bytes CRC)   |                |
|                |    字节数据)     |                  |                |
+----------------+------------------+------------------+----------------+

Packet Header (32 bits):
+--------+--------+--------+--------+
|  Data  |  Word  |  ECC   |  VC +  |
|  ID    |  Count |        |  DT    |
+--------+--------+--------+--------+
- Data ID: 同短包定义
- Word Count (16 bits): Payload 的字节数(0 ~ 65535)
- ECC (8 bits): 保护 Header 的前 24 bits

Packet Footer (16 bits):
+----------------+----------------+
|  CRC (16 bits) |                |
+----------------+----------------+
- CRC: 对 Payload 进行循环冗余校验
调试技巧: 当 SoC 报告“CRC 错误”或“ECC 错误”时,通常意味着物理层信号质量差(抖动、串扰)或时钟不稳定。检查 HS 模式下数据眼图是否满足规范(眼高 > 100 mV,眼宽 > 0.5 UI)。
CSI-2 传输时序:短包 + 长包 t0 t FS 0x00 Long Packet (Line 0) Header | Payload | CRC LS 0x02 Line 1 Header|Payload|CRC FS = Frame Start, LS = Line Start, 长包之间由短包分隔以保持同步

2.3 数据格式:RAW、YUV、JPEG

应用层定义了 Sensor 输出数据的格式。CSI-2 通过 数据类型(Data Type, DT) 字段标识当前长包中负载的格式。常见格式如下:

数据类型 (DT) 格式名称 位深 / 描述 典型应用
0x2A RAW8 8 bits / 像素,Bayer 模式 低端 Sensor、快速预览
0x2B RAW10 10 bits / 像素,4 像素打包为 5 字节 主流手机 Sensor(IMX586 等)
0x2C RAW12 12 bits / 像素,2 像素打包为 3 字节 高动态范围(HDR)Sensor
0x1E YUV422 8-bit YUV 4:2:2 采样,每个像素 16 bits ISP 处理后输出、视频通话
0x1C YUV420 8-bit YUV 4:2:0 采样,节省带宽 视频编码(H.264/H.265)
0x40 JPEG 压缩图像数据,可变长度 拍照、压缩输出

2.3.1 RAW 格式详解

RAW 格式直接输出 Sensor 像素阵列的原始值,未经过 ISP 处理。每个像素对应一个颜色通道(R/G/B),通过 Bayer 模式排列。

RAW10 打包示例(4 像素 -> 5 字节):
像素: P0[9:0]  P1[9:0]  P2[9:0]  P3[9:0]
字节: [P0[9:2]] [P1[9:2]] [P2[9:2]] [P3[9:2]] [P3[1:0] P2[1:0] P1[1:0] P0[1:0]]
      Byte 0    Byte 1    Byte 2    Byte 3    Byte 4 (低 2 bits 拼接)
关键点: RAW 格式的位深直接影响图像动态范围。RAW10 提供 1024 级灰度,RAW12 提供 4096 级。调试时需确认 Sensor 寄存器配置的位深与 CSI-2 DT 字段一致,否则 ISP 会解析错误导致图像偏色或条纹。

2.3.2 YUV 格式详解

YUV 格式将亮度(Y)与色度(UV)分离,便于压缩和显示。CSI-2 常用 YUV422 和 YUV420。

  • YUV422: 每 2 个像素共享一组 UV,水平分辨率减半。每个像素 16 bits(Y8 + U8/V8 交替)。
  • YUV420: 每 4 个像素(2x2 块)共享一组 UV,水平和垂直分辨率均减半。每个像素平均 12 bits。

2.3.3 JPEG 格式

部分 Sensor(如自带 JPEG 编码器的型号)可直接输出 JPEG 压缩数据。JPEG 在 CSI-2 中以长包形式传输,Word Count 表示压缩后的字节数。

注意: JPEG 输出时,Sensor 内部已完成压缩,SoC 无法再对原始 RAW 数据进行 ISP 处理。适用于需要直接存储或传输的场景(如网络摄像头),但会丢失后期调整的灵活性。
常见 CSI-2 数据格式对比 RAW10 10 bits/pixel Bayer 原始数据 YUV422 16 bits/pixel Y + UV 交替 JPEG 可变长度 压缩数据 RAW 格式保留最多信息,适合后期 ISP 处理;YUV 适合实时预览和编码; JPEG 适合直接存储,但无法再调整图像质量。选择格式需权衡带宽、处理能力和应用需求。

2.4 本章小结

MIPI CSI-2 协议的分层设计使得物理传输、数据打包和格式解析解耦。调试时,应遵循“从下至上”的原则:

  1. 物理层: 确认 D-PHY/C-PHY 电压、时钟频率、Lane 数量与 Sensor 配置一致。
  2. 协议层: 使用逻辑分析仪捕获 Packet,检查 FS/FE 短包和长包 CRC 是否正常。
  3. 数据格式: 确认 DT 字段与 Sensor 输出格式匹配,ISP 端正确配置解包方式。