1. MIPI CSI-2 概述:从摄像头接口到行业标准

CSI-2 的全称是 Camera Serial Interface,说白了就是摄像头和处理器之间传图像数据的协议。我最早接触它是在调手机摄像头模组的时候,那时候分不清物理层和协议层,结果 debug 了一周才发现是 D-PHY 的 LP 模式没配对。嗯,踩过的坑多了,也就慢慢摸透了。

1.1 什么是 MIPI CSI-2?

它定义了一套分层架构,把原始图像数据从 sensor 一路送到 ISP 或应用处理器。你想想看,摄像头每秒钟要传几千万甚至上亿个像素,如果不用高速串行接口,靠并行的 DVP 迟早会被板上的噪声干趴下。CSI-2 最大的贡献就是:

  • 串行化传输:减少引脚数,从几十根降到四五根差分对
  • 分层解耦:物理层升级不影响上层软件
  • 灵活性:支持多通道、多虚拟通道、不同像素格式

我记得有一次客户要求把 2-lane 改成 4-lane,原本以为要改驱动,结果发现只需改 dts 里的 lane 数,硬件管脚没动,这就是分层的好处。

核心特征:CSI-2 是 MIPI 联盟制定的摄像头串行接口标准,目前最常用的是 v1.3 和 v2.0,底层可搭配 D-PHY 或 C-PHY。

1.2 协议的分层结构

分层是 CSI-2 的灵魂。它像洋葱一样,每层只关心自己该做的事。我从下往上讲:

  1. 物理层(D-PHY / C-PHY):负责电信号收发、时钟恢复、高速与低功耗模式切换。
  2. 通道管理层(Lane Management):处理多通道的拆分与合并,还有 CRC 校验。
  3. 低级协议层(LLP):定义数据包格式、包头、包尾、ECC 校验。
  4. 像素/字节打包层(Pixel/Byte Packing):把 raw 数据按格式打包成字节流,比如 RAW10、YUV422。
  5. 应用层:最上层,直接对 sensor 或 ISP 暴露接口,处理帧同步、曝光、增益等控制命令。
常见误区:很多工程师以为 CSI-2 只有 D-PHY 这一层。我曾经在排查图像花屏时,一直怀疑 PHY 的时序,最后发现其实是 LLP 层的包头 ECC 没通过,导致整帧被丢弃。所以调试时要分层定位。
CSI-2 协议分层架构 应用层 (Application Layer) 像素/字节打包层 (Pixel/Byte Packing) 低级协议层 (LLP) 通道管理层 (Lane Management) 物理层 (D-PHY / C-PHY) 提示:每层只依赖下层接口,更换物理层(如从 D-PHY 换 C-PHY)无需修改上层。
个人习惯:在看 datasheet 时,我会先确认 sensor 输出的数据格式(比如 RAW10),然后反推打包方式,再参考 PHY 配置的速率和 lane 数——从顶向下思考不容易漏。

1.3 典型应用场景

CSI-2 已经不只在手机里了。我去年参与过一个车载环视项目,四路 200 万像素摄像头通过长距离 FPC 连接,要求每路 4-lane D-PHY 跑 1.5Gbps。下面这张表列出了常见场景的带宽需求:

应用场景 分辨率/帧率 数据格式 典型带宽 推荐通道
智能手机主摄 48M / 30fps RAW10 约 1.6 Gbps 4-lane D-PHY
车载环视 1080P / 60fps YUV422 8bit 约 1.5 Gbps 4-lane D-PHY
安防监控 4K / 30fps H.264 (编码) 约 800 Mbps 2-lane D-PHY
工业视觉 5M / 120fps RAW12 约 3.6 Gbps 4-lane C-PHY

带宽计算有个粗糙公式:帧率 × 分辨率 × 像素深度 × 通道数/通道速率。但实际还得算上打包开销、消隐区、CRC 等,我曾经在这里算漏了,导致选型时低估了带宽。

1.4 发展历程

CSI 标准其实从 2005 年左右就开始了。简单梳理一下:

  • CSI-1 (2005):初代,只支持 D-PHY,像素格式少,现在已经很少见了。
  • CSI-2 v1.0 (2008):引入分层结构,支持虚拟通道,成为主流。
  • CSI-2 v1.3 (2014):加入了 RAW 系列格式、统一串行链路(SSL),我开始用它做项目时就是这个版本。
  • CSI-2 v2.0 (2017):支持更高速率的 C-PHY 1.2,以及智能感测、嵌入式数据等特性。
  • CSI-2 v3.0 (2021):增加了延时控制、多帧同步等,面向自动驾驶和 AR/VR。

我个人建议新项目直接选 v1.3 或 v2.0,因为 v1.0 的某些 PHY 配置在高速模式下容易出时序问题——嗯,我之前吃过这个亏。

避坑指南:我曾经设计了一款产品,用了 v1.0 的 sensor,结果发现无法支持 RAW10 压缩。后来被迫加上外部 FPGA 做格式转换,成本一下升了 30%。所以选版本时一定要先确认目标格式是否被协议版本完整支持。