MIPI CSI-2:从 Sensor 到 SoC 的像素高速公路
MIPI CSI-2从 Sensor 到 SoC 的像素高速公路Sensor 把光变成了电信号下一步就是把这些像素数据搬到 SoC。这条高速公路叫 MIPI CSI-2。CSI-2 协议栈三层叠罗汉MIPI CSI-2 不是单一协议是三层叠起来的┌──────────────────────┐ │ Application Layer │ ← RAW10/RAW12/YUV422/JPEG ├──────────────────────┤ │ Protocol Layer │ ← 短包/长包/Virtual Channel ├──────────────────────┤ │ Physical Layer │ ← D-PHY / C-PHY (差分信号) └──────────────────────┘流程图大多数安防 SoC 用 D-PHYC-PHY 主要用在手机高端屏。踩过的坑把 RAW10 配成了 RAW8 的 lane 数去算结果带宽不够、图像花屏。这属于最低级的错误但压力大的时候谁都会犯。D-PHY差分线上的 1 和 0D-PHY 的核心是差分信号——一对线传一路数据Dp/Dn。HS高速模式下电压摆幅只有 200mV速率能达到 80Mbps 到 2.5Gbps per lane。LP低功耗模式摆幅 1.2V速率只有 10Mbps用于控制指令。HS 和 LP 的切换时序非常关键——从 LP-11 进入 HS 需要先经过 LP-01→LP-00 的序列时间必须严格满足 spec。有一个寄存器很多 SDK 里不公开配置但实际很关键T_HS_PREPARE T_HS_ZERO这两个时序参数决定了 HS 进入的建立时间。芯片原厂给的默认值通常是偏保守的如果 PCB 走线短、质量好可以适当减小来提速。Lane 数怎么算公式就一个公式所需 Lane 数 (像素位深 × 分辨率宽 × 分辨率高 × 帧率) / (每 Lane 带宽 × 2)除以 2 是因为 DDRDouble Data Rate——时钟上升沿和下降沿都传数据。举个例子Sensor: 500万像素 (2592×1944), 30fps, RAW10 每帧像素 2592 × 1944 5,038,848 每帧数据量 5,038,848 × 10bit 50,388,480bit 每秒数据量 50,388,480 × 30 1.51Gbps 每 Lane 带宽按 1Gbps 算 所需 Lane 1.51 / (1 × 2) 0.755 → 1 Lane 勉强够建议 2 Lane实际做产品时千万要留余量。如果没算 MIPI 时钟裕量导致低温下图像偶尔撕裂。建议留 20-30% 的余量。短包 vs 长包帧同步的秘密CSI-2 的包分两种短包4字节用于帧同步——Frame StartFS、Frame EndFE、Line StartLS、Line EndLE长包包头(4B) 数据(可变) 包尾(2B CRC)承载实际的像素数据每个帧的传输序列FS Short Packet → LE Short Packet (optional) → Line 0 Long Packet → LS Short Packet (optional) → LE Short Packet → Line 1 Long Packet → ... → FE Short Packet很多工程师只知道配 sensor 的 output 格式忽略了帧同步包的插入时序。如果 FS 和 FE 之间的时间差跟 sensor 的 VBLANK 不匹配SoC 的 VI 模块就会丢帧。这个 bug 在快速预览时看不出来但在录像回放时帧率会忽高忽低。Virtual Channel四路复用的技巧CSI-2 支持最多 4 个 Virtual ChannelVC0-VC3通过同一个物理 lane 传输不同数据流。典型用法VC用途分辨率VC0主码流2592×1944 30fpsVC1子码流640×480 15fpsVC2JPEG 快照2592×1944VC3Meta 数据AE/AWB 统计值注意不是所有 SoC 都支持 VC 解复用。有些便宜芯片的 VICAP 模块只能接 VC0接了多路数据直接扔。选型时一定要看 datasheet 的「MIPI CSI-2 Virtual Channel Support」这一段。调试三板斧MIPI 最烦人的地方是——要么通要么不通中间态很少。不像 I2C 能看波形MIPI 是高速差分信号普通示波器看不了。我总结了三步调试法第一板斧检查 LP 状态机用 SoC 的 MIPI PHY 测试模式看 D-PHY 是否成功从 LP-11 进入了 HS 模式常见问题Sensor 端 T_HS_PREPARE 过短SoC 端没识别到 HS 进入第二板斧检查 CRC 错误计数大多数 SoC 的 MIPI RX 模块都有 CRC 错误统计寄存器CRC 错误持续增长 → 物理层有问题信号完整性/走线过长/阻抗不匹配CRC 错误为零但图像花 → Protocol Layer 配置错了VC mismatch / Data Type 不对第三板斧检查帧长/行长读 SoC 的 VICAP 寄存器看接收到的行像素数是否跟 sensor 输出一致常见Sensor 的 HTSHorizontal Total Size跟 SoC 预期的 H_ACTIVE 不匹配总结MIPI CSI-2 的坑总结起来就三类类型现象根因物理层图花/撕裂/无图D-PHY 时序/阻抗/走线协议层丢帧/帧率不对VC/DataType/HTS 不匹配时序层间歇性花屏VBLANK/HBLANK/Clock 裕量不足下一个话题预告ISP Pipeline——Sensor 的 RAW data 进了 SoC 之后到底经历了什么参考MIPI Alliance Specification for D-PHY v2.5MIPI Alliance Specification for CSI-2 v3.0各 SoC Vendor MIPI RX Programming Guide