1. MIPI 基础概念:CSI-2 协议、Lane、Data Type 与 Virtual Channel
我一直觉得,搞懂 MIPI 是调好摄像头的基础。很多新手一上来就照着数据手册焊板子、改驱动,结果图像出不来,满头问号。其实大部分问题都出在最基本的协议理解上。我们先把这个地基打牢。
1.1 CSI-2 协议栈长什么样?
CSI-2 协议分好几层,从底层物理信号到最上层的数据处理。我见过不少人只关心物理连接,忽略了协议层的配置,结果图像偏色、帧率异常。嗯,这里要注意,每一层都可能出问题。
- 物理层(PHY):决定了电压、时钟、差分走线规则。最常见的 D-PHY,用一对差分线传数据,另一对传时钟。
- 协议层(Protocol):定义了怎么把一帧图像拆成若干小包(packet),每个包的结构是什么。
- 应用层(Application):规定了图像数据的格式,比如 RAW10、YUV422、JPEG……
调试时,你可能先怀疑协议层的数据包不对,但最后发现是物理层的线接错了。有一次我调一块开发板,怎么都出不了图,折腾大半天,结果是差分线等长没做好,信号质量差到没朋友。
1.2 Lane:数据通道
Lane 是一条物理上的数据通道,由一对差分信号线组成。CSI-2 可以配置 1、2 或 4 条 Lane。你想想看,Lane 数量直接决定了带宽:4 Lane 就是 1 Lane 的四倍速度。
为什么 Lane 分配容易出错?
我见过最典型的问题:驱动里配置了 4 Lane,但硬件只连了 2 条;或者反过来,硬件焊了 4 条,驱动只开了 2 条。图像要么出不来,要么满屏花斑。
| Lane 数量 | 典型带宽(每 Lane 1 Gbps) | 适用场景 |
|---|---|---|
| 1 Lane | 1 Gbps | 低分辨率预览(VGA) |
| 2 Lane | 2 Gbps | 720p / 1080p @30fps |
| 4 Lane | 4 Gbps | 4K / 高帧率 |
1.3 Data Type:数据格式
Data Type(DT)告诉处理器:接下来收到的数据是什么格式。比如说,DT=0x2B 代表 RAW10,DT=0x1E 代表 YUV422 8-bit。处理器收到包之后,根据 DT 字段来解码。
有一次,我调试一个 200 万像素模组,输出的明明是 RAW10,我却在驱动里配成了 YUV422。结果图像颜色完全不对——偏紫偏绿,像坏了一样。后来我把 DT 改回 RAW10,图就正常了。说白了,DT 配错是最常见的低级错误。
1.4 Virtual Channel:虚拟通道
一个 CSI-2 接口可以接入多个摄像头。怎么区分它们的数据?就用 Virtual Channel(VC)。每个摄像头分配一个独立的 VC ID(0~3),发送数据包时带上这个 ID;处理器按 ID 把数据分到不同的接收通道。
简单说,VC 就像快递包裹上的地址标签。如果两个摄像头用了相同的 VC ID,处理器就分不清谁是谁,数据会混在一起。
| VC ID | 通常用途 |
|---|---|
| VC0 | 主摄像头 |
| VC1 | 副摄像头(如广角) |
| VC2 | 深度/ToF |
| VC3 | IR 或其他 |
1.5 一个典型的数据包结构
CSI-2 的数据包分短包(Short Packet)和长包(Long Packet)。短包传控制信息(比如帧开始/结束),长包传真正的图像数据。
// 长包结构(简化)
[Packet Header] -> [Data (像素)] -> [Packet Footer]
4 bytes 可变长度 2 bytes (CRC)
// 短包结构
[Packet Header] -> [Ecc + Data]
4 bytes
我记得第一次读 MIPI 协议规范时,觉得包结构复杂。后来用逻辑分析仪抓了一次实际波形,发现就是这简单的三部分。大部分故障排查,只需要关注 Packet Header 里的 DT 和 VC 字段是否正确。
小结
这一章讲了 MIPI CSI-2 最核心的几个概念。我个人习惯把这几个点记在手边:Lane 数量、Data Type、Virtual Channel ID。大部分无图像问题,追根溯源都能落到这三者中的某一个上。
下回你调摄像头没图像,别慌。先从硬件 Lane 数开始查,再看驱动里的 DT 和 VC 设置。大概率就是它们的问题。