3. MIPI CSI-2接口:MIPI物理层、协议层、数据包格式、Lane配置

MIPI CSI-2(Camera Serial Interface 2)是移动和嵌入式摄像头领域最主流的传感器-处理器接口标准。本章深入剖析其物理层(D-PHY)、协议层(CSI-2)、数据包结构以及多Lane配置策略,帮助你在驱动开发中准确配置时序与带宽。

3.1 MIPI D-PHY 物理层

D-PHY 是 MIPI 联盟定义的串行高速物理层标准,采用差分信号传输,具有低功耗、低电磁干扰(EMI)的特点。物理层分为两层:PHY 协议接口(PPI)和物理编码子层(PCS)。

关键指标: D-PHY v1.2 单 Lane 最高速率 2.5 Gbps;v2.0 提升至 4.5 Gbps。嵌入式摄像头常用 1.0~1.5 Gbps/Lane。

3.1.1 差分信号与 Lane 结构

每个 Lane 由一对差分线(Dp/Dn)组成,支持两种工作模式:

  • 高速模式(HS): 差分摆幅 200~300 mV,用于传输图像数据和控制指令。
  • 低功耗模式(LP): 单端信号,摆幅 1.2V,用于控制握手和总线空闲。

典型的 CSI-2 接口包含:

  • 1 条时钟 Lane(CLK): 提供差分时钟参考。
  • 1~4 条数据 Lane(DATA0~DATA3): 传输串行数据。
驱动提示: 时钟 Lane 的频率通常等于数据 Lane 的比特率。例如 1 Gbps 数据速率对应 1 GHz 时钟频率。配置 SoC 的 D-PHY PLL 时需精确匹配传感器输出。
D-PHY 物理层结构(4 Data Lane + 1 Clock Lane) CLK Lane DATA Lane 0 DATA Lane 1 DATA Lane 2 DATA Lane 3 SoC D-PHY
接收器 差分对 (Dp/Dn) 串行数据流 差分对 (Dp/Dn) 串行数据流 差分对 (Dp/Dn) 串行数据流 差分对 (Dp/Dn) 串行数据流 差分对 (Dp/Dn) 串行数据流

3.2 CSI-2 协议层

CSI-2 协议层定义了数据如何组织成包、如何区分不同数据类型以及如何进行错误检测。协议层位于 D-PHY 之上,负责将像素数据、嵌入式数据和帧控制信息封装为统一格式。

3.2.1 数据包格式

每个 CSI-2 数据包由三部分组成:包首(Packet Header, PH)、数据负载(Data Payload)和包尾(Packet Footer, PF)。

字段 长度(字节) 说明
数据标识符(DI) 1 高 6 位:虚拟通道(VC);低 2 位:数据类型(DT)
字计数(WC) 2 数据负载的字节数(0~65535)
ECC 1 包首的纠错码,可纠正 1 位错误、检测 2 位错误
数据负载 0~65535 像素数据、嵌入式数据或帧控制数据
校验和(Checksum) 2 数据负载的 CRC-16 校验(可选)
常见错误: 驱动开发中,包首 ECC 错误是最常见的链路问题。如果 SoC 持续报告 ECC 错误,应检查 D-PHY 电压摆幅、时钟抖动或 PCB 走线长度匹配。

3.2.2 数据类型(DT)

数据类型字段标识负载内容的格式。以下是嵌入式摄像头最常用的 DT 值:

DT 值(Hex) 数据类型 典型用途
0x00~0x0F 帧同步/行同步 帧起始(FS)、帧结束(FE)、行起始(LS)、行结束(LE)
0x10 嵌入式 8 位数据 传感器元数据、增益/曝光值
0x1E YUV 420 8 位 视频预览流
0x2B RAW10 10 位原始 Bayer 数据(4 像素打包为 5 字节)
0x2C RAW12 12 位原始 Bayer 数据(2 像素打包为 3 字节)
0x2D RAW14 14 位原始 Bayer 数据
0x2E RAW16 16 位原始 Bayer 数据

3.3 多 Lane 配置与带宽计算

CSI-2 支持 1、2、3 或 4 条数据 Lane。多 Lane 配置通过字节分发(Byte Distribution)机制将数据流拆分到各 Lane 上并行传输。

3.3.1 Lane 配置策略

Lane 数 最大带宽(1.5 Gbps/Lane) 典型分辨率/帧率 适用场景
1 Lane 1.5 Gbps 1080p @ 30fps (RAW10) 低功耗 IoT、入门级摄像头
2 Lane 3.0 Gbps 4K @ 30fps (RAW10) 主流手机、行车记录仪
4 Lane 6.0 Gbps 4K @ 60fps (RAW12) 或 8K @ 30fps 旗舰手机、工业相机

3.3.2 带宽计算公式

驱动开发中,必须验证传感器输出带宽是否在 CSI-2 接口能力范围内:

/* 带宽计算示例:RAW10 格式,1920x1080,60fps,4 Lane */
总像素率 = 1920 * 1080 * 60 = 124,416,000 像素/秒
每像素位数 = 10 bits
原始数据率 = 124,416,000 * 10 = 1,244,160,000 bps ≈ 1.244 Gbps

考虑打包开销(RAW10 每 4 像素打包为 5 字节):
有效数据率 = 1.244 Gbps * (40/40) = 1.244 Gbps(打包后不变)

加上包首开销(每行约 4 字节):
假设每行 1920 像素,每行包首开销 = 4 字节 * 8 = 32 bits
行开销率 = 32 / (1920 * 10) ≈ 0.17%
总链路带宽需求 ≈ 1.244 Gbps * 1.0017 ≈ 1.246 Gbps

4 Lane 配置下,每 Lane 速率 = 1.246 / 4 ≈ 311.5 Mbps
远低于 1.5 Gbps/Lane 上限,配置安全。
驱动配置要点: 在设备树或平台代码中,必须正确设置 data-lanes 属性。例如 4 Lane 配置:data-lanes = <1 2 3 4>;。物理 Lane 编号必须与传感器和 SoC 的 PCB 走线对应。
CSI-2 数据包格式与 4 Lane 字节分发 CSI-2 数据包结构 包首 (PH) 数据负载 (Payload) 包尾 (PF) DI WC ECC 字节分发到 4 条数据 Lane Lane 0: 字节 0, 4, 8... Lane 1: 字节 1, 5, 9... Lane 2: 字节 2, 6, 10... Lane 3: 字节 3, 7, 11... SoC CSI-2 接收器:重新组合字节流

3.4 驱动开发中的关键配置

在 Linux 内核或 RTOS 驱动中,MIPI CSI-2 接口的配置通常涉及以下步骤:

  1. 设备树/平台配置: 指定 Lane 映射、时钟频率、数据类型。
  2. D-PHY PLL 初始化: 设置 SoC 端 PLL 倍频系数,匹配传感器输出速率。
  3. 虚拟通道(VC)分配: 多传感器场景下,每个传感器使用不同 VC ID(0~3)。
  4. 中断处理: 注册 ECC 错误、CRC 错误、帧同步丢失等中断回调。
  5. 流控(Flow Control): 处理帧起始/结束信号,确保 DMA 传输同步。
实战经验: 调试 MIPI 链路时,先用示波器测量时钟 Lane 的差分信号。如果时钟正常但无数据,检查传感器端是否已正确配置输出格式和 Lane 数。常见错误是传感器输出 4 Lane 但 SoC 只配置了 2 Lane 接收。

3.5 常见问题与调试方法

现象 可能原因 排查步骤
无帧数据 时钟 Lane 无信号;传感器未初始化 1. 示波器测 CLK Lane 差分对
2. 检查 I2C 通信是否正常
图像花屏/错位 Lane 映射错误;字节对齐问题 1. 核对设备树 data-lanes 顺序
2. 检查 RAW 格式打包方式
ECC 错误频繁 信号完整性差;时钟抖动过大 1. 降低 D-PHY 速率
2. 检查 PCB 走线等长
帧率不达标 带宽不足;HBLANK 过小 1. 计算实际链路带宽
2. 增加水平消隐(HBLANK)
重要提醒: 修改 MIPI 配置后,务必重新计算带宽余量。建议保留至少 20% 的带宽裕度,以应对温度变化和工艺偏差导致的信号退化。