3、MIPI CSI-2协议详解:D-PHY物理层、CSI-2协议层、Lane配置与数据包格式
各位同学,今天我们来啃一块硬骨头——MIPI CSI-2协议。说实话,我刚接触MIPI的时候也被那一堆分层结构搞得头晕。但做采集系统绕不开它,你想想看,现在手机、车载摄像头、工业相机,哪个不用MIPI?
我个人习惯把MIPI协议拆成三块来理解:物理层怎么传比特、协议层怎么组数据包、Lane怎么配置带宽。咱们一个一个来。
3.1 D-PHY物理层:信号怎么跑起来的
D-PHY是MIPI联盟定义的物理层标准。说白了,它就是负责把0和1通过差分线传出去。我当年第一次调MIPI接口时,示波器一挂上去全是噪声,后来才发现是差分对没等长——血的教训。
3.1.1 差分信号与电平
D-PHY使用一对差分线(Dp/Dn)传输数据。电压摆幅只有200mV左右,比LVDS还低。这样做的好处是功耗低、辐射小。
| 参数 | 典型值 | 说明 |
|---|---|---|
| 差分电压 | 200mV | Dp - Dn 的差值 |
| 共模电压 | 200mV | 相对GND的直流偏置 |
| 传输速率 | 80Mbps ~ 4.5Gbps | 取决于Lane数 |
3.1.2 工作模式:HS与LP
D-PHY有两种工作模式:高速模式(HS)和低功耗模式(LP)。
- HS模式: 差分信号传输,速率高,功耗大。用于传输图像数据。
- LP模式: 单端信号传输,速率低(10Mbps),功耗极低。用于控制指令。
为什么会设计两种模式?你想想看,摄像头不传数据时,如果还跑在HS模式,电池很快就没了。LP模式就是用来省电的。
3.1.3 时钟通道与数据通道
D-PHY的物理连接包含一个时钟通道(Clock Lane)和若干数据通道(Data Lane)。时钟通道提供DDR时钟,数据通道在时钟的上升沿和下降沿各采一次数据。
关键点: 时钟通道是独立的,不参与数据传输。它只负责提供同步时钟。数据通道的数量可以是1、2、3或4条。
3.2 CSI-2协议层:数据怎么组织的
物理层把比特流传过去了,但接收端怎么知道这些比特代表什么?这就是协议层干的事。CSI-2协议层定义了数据包的格式。
3.2.1 数据包结构
每个数据包由三部分组成:
- 包首(PH): 包含数据类型(Data Type)和虚拟通道ID(Virtual Channel)。
- 包数据(Payload): 实际图像数据或控制信息。
- 包尾(PF): 16位CRC校验码。
嗯,这里要注意:包首和包尾是固定长度的,包数据长度可变。我刚开始写解析逻辑时,忘了处理可变长度,结果图像一直花屏。
3.2.2 数据类型(Data Type)
数据类型告诉接收端这个包装的是什么内容。常见的类型有:
| DT值 | 含义 | 说明 |
|---|---|---|
| 0x2A | RAW8 | 8位原始Bayer数据 |
| 0x2B | RAW10 | 10位原始Bayer数据 |
| 0x1E | YUV420 8bit | YUV格式 |
| 0x37 | Embedded Data | 嵌入式元数据(如曝光时间) |
3.2.3 虚拟通道(Virtual Channel)
虚拟通道允许在同一个物理链路上传输多个摄像头的数据。每个数据包携带一个2位的VC ID,最多支持4个虚拟通道。
我在项目中遇到过这样一个场景:一个FPGA同时接了两个摄像头,一个拍彩色,一个拍红外。用VC0和VC1区分,省了一组MIPI接口。
3.3 Lane配置:带宽怎么算
Lane配置说白了就是决定用几条数据通道来传数据。这直接影响你能达到的最高帧率。
3.3.1 带宽计算公式
总带宽 = Lane数 × 每Lane速率 × 2(DDR)
举个例子:4Lane模式,每Lane速率1Gbps,总带宽就是8Gbps。但实际有效带宽要扣除协议开销(约10%)。
经验公式: 有效带宽 ≈ 总带宽 × 0.9。如果你要传1080p@60fps的RAW10数据,需要约1.5Gbps带宽。用2Lane@1Gbps就够了,但我会留30%余量。
3.3.2 Lane数选择策略
- 1Lane: 适合低分辨率(VGA以下)或低帧率场景。
- 2Lane: 最常用,1080p@30fps没问题。
- 4Lane: 4K@60fps或高帧率场景。
你想想看,如果PCB空间紧张,用2Lane跑高分辨率,就得提高每Lane速率。但速率高了信号质量会下降。这是个权衡。
3.4 数据包格式详解:从比特到帧
最后我们看看一个完整的帧是怎么组织的。CSI-2的帧结构分为帧起始(FS)、行数据、帧结束(FE)。
3.4.1 帧结构
帧起始包(FS) → 行1数据包 → 行2数据包 → ... → 行N数据包 → 帧结束包(FE)
每个行数据包内部又分为:
包首(4字节) → 像素数据(可变长度) → 包尾(2字节CRC)
3.4.2 包首详解
包首的4个字节含义如下:
| 字节 | 位域 | 含义 |
|---|---|---|
| Byte 0 | [7:6] VC, [5:0] DT | 虚拟通道 + 数据类型 |
| Byte 1 | [7:0] WC_L | 包数据长度低8位 |
| Byte 2 | [7:0] WC_H | 包数据长度高8位 |
| Byte 3 | [7:0] ECC | 纠错码 |
3.5 知识体系总览
下面这张图把本章的核心逻辑串起来了。从物理层的差分信号,到协议层的数据包,再到Lane配置,最后组成完整的帧结构。
这张图从上到下展示了MIPI CSI-2的三层结构。物理层负责信号传输,协议层负责数据组织,Lane配置决定带宽。三者缺一不可。
好了,这一章的内容就到这里。MIPI协议虽然复杂,但拆开来看,每一层都有清晰的职责。下一章我们会讲如何在FPGA里实现MIPI接收端,到时候这些协议细节都会用上。