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 时需精确匹配传感器输出。
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 走线对应。
3.4 驱动开发中的关键配置
在 Linux 内核或 RTOS 驱动中,MIPI CSI-2 接口的配置通常涉及以下步骤:
- 设备树/平台配置: 指定 Lane 映射、时钟频率、数据类型。
- D-PHY PLL 初始化: 设置 SoC 端 PLL 倍频系数,匹配传感器输出速率。
- 虚拟通道(VC)分配: 多传感器场景下,每个传感器使用不同 VC ID(0~3)。
- 中断处理: 注册 ECC 错误、CRC 错误、帧同步丢失等中断回调。
- 流控(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% 的带宽裕度,以应对温度变化和工艺偏差导致的信号退化。