MIPI CSI-2 协议基础:从物理层到协议层
各位同学,今天我们来聊聊 MIPI CSI-2。说实话,这玩意儿是图像传感器接口的“通用语言”。我做过的几个摄像头项目,从手机到安防,几乎都在用这套协议。你搞懂了它,后面写 RTL 代码心里就有底了。
MIPI CSI-2 协议栈分三层:物理层、协议层、应用层。咱们这节课重点讲前两层——物理层和协议层。应用层嘛,后面章节会细说。
D-PHY 物理层:经典方案
D-PHY 是 MIPI 联盟最早推出的物理层标准。说白了,它就是用差分信号来传数据。我刚开始接触时,觉得差分对布线挺麻烦的,但后来发现它的抗干扰能力确实强。
D-PHY 的核心结构是这样的:
- 时钟通道(Clock Lane):差分对,提供同步时钟
- 数据通道(Data Lane):差分对,1~4 条,传数据用
- 工作模式:高速模式(HS)和低功耗模式(LP)
这里有个关键点——D-PHY 是 DDR(双倍数据率) 传输。什么意思?时钟的上升沿和下降沿都采样数据。举个例子,1GHz 的时钟,实际数据率就是 2Gbps。
| 参数 | D-PHY v1.2 | D-PHY v2.0 |
|---|---|---|
| 最大数据率/通道 | 2.5 Gbps | 4.5 Gbps |
| 通道数 | 1~4 | 1~4 |
| 工作电压 | 1.2V (HS) / 1.2V (LP) | 1.2V (HS) / 1.2V (LP) |
| 功耗 | 低 | 更低 |
C-PHY 物理层:更高带宽的选择
C-PHY 是后来推出的,主要为了解决带宽瓶颈。它不用差分对,而是用 三线(trio) 传输。你想想看,三根线能组合出 6 种状态,每个符号能传 2.28 比特信息。
我个人的习惯是:如果项目带宽需求超过 4Gbps,优先考虑 C-PHY。但代价是布线更复杂,协议也更绕。
D-PHY 和 C-PHY 的主要区别:
- 信号线:D-PHY 用差分对,C-PHY 用三线组
- 时钟:D-PHY 有独立时钟通道,C-PHY 时钟嵌入在数据中
- 数据率:同样线数下,C-PHY 带宽更高
- 功耗:C-PHY 略高,但单位比特功耗更低
CSI-2 协议层:数据怎么组织
物理层搞定信号传输,协议层负责数据组织。CSI-2 协议层定义了两种包格式:长包(Long Packet) 和 短包(Short Packet)。
说白了,长包传数据,短包传控制信息。这个设计很巧妙——控制信息开销小,数据信息效率高。
短包格式
短包只有 32 比特,结构如下:
| 数据标识符 (8-bit) | 虚拟通道 (2-bit) | 数据类型 (6-bit) | 错误校正码 (8-bit) | 结束码 (8-bit) |
短包用来传帧开始、帧结束、行开始、行结束这些控制信号。我刚开始做时,总觉得短包太短,不够用。后来发现,控制信息确实不需要太多比特。
长包格式
长包结构稍微复杂点:
| 包首 (32-bit) | 数据载荷 (可变长度) | 包尾 (16-bit) |
包首包含:
- 数据标识符(8-bit):虚拟通道 + 数据类型
- 字计数(16-bit):数据载荷的字节数
- 错误校正码(8-bit):ECC,保护包首
数据载荷就是实际的图像数据,比如 RAW10、RAW12、YUV 等格式。包尾是 16 位 CRC,校验数据完整性。
| 包类型 | 长度 | 用途 | 错误保护 |
|---|---|---|---|
| 短包 | 32 比特 | 帧/行控制 | ECC |
| 长包 | 可变 | 图像数据 | ECC + CRC |
协议层状态机
CSI-2 协议层的核心是一个状态机。我画个图,你一看就明白:
这个状态机其实不复杂。空闲状态等 SoT(传输开始),来了短包就收短包,来了长包包首就进长包接收。长包收完数据载荷,再做 CRC 校验,校验通过回到空闲。
数据类型与虚拟通道
CSI-2 的数据类型(Data Type, DT)决定了载荷的格式。常见的 DT 值:
| 数据类型 | DT 值 (Hex) | 说明 |
|---|---|---|
| RAW6 | 0x28 | 6 位原始数据 |
| RAW8 | 0x2A | 8 位原始数据 |
| RAW10 | 0x2B | 10 位原始数据 |
| RAW12 | 0x2C | 12 位原始数据 |
| YUV420 8-bit | 0x1E | YUV 格式 |
| 帧开始 (FS) | 0x00 | 短包 |
| 帧结束 (FE) | 0x01 | 短包 |
虚拟通道(Virtual Channel, VC)允许在同一个物理链路上传输多路数据流。比如,一个传感器可以同时输出 RAW 和 YUV 数据,通过不同的 VC 区分。
VC 只有 2 比特,最多 4 个通道。实际项目中,我见过最多用 2 个 VC——一个传图像数据,一个传元数据(比如曝光时间、增益值)。
小结
这一章我们讲了 MIPI CSI-2 的物理层和协议层基础。D-PHY 和 C-PHY 是两种物理层方案,各有优劣。协议层的长包和短包格式,是 RTL 设计的核心。
我个人觉得,理解这些基础概念比背 spec 更重要。你只要搞懂了“物理层怎么传比特”、“协议层怎么组包”,后面写代码就是水到渠成的事。