2. MIPI CSI-2 协议基础:分层结构与数据流
MIPI CSI-2(Camera Serial Interface 2)是移动与嵌入式领域最广泛使用的摄像头串行接口标准。RK3588 的 MIPI CSI 主机控制器完全遵循该协议。理解 CSI-2 的分层架构是驱动开发和硬件调试的前提。
学习提示: CSI-2 协议采用分层设计,每一层解决特定问题。驱动开发中,我们通常关注 Low-Level Protocol 层和 Pixel to Byte 层,而 PHY 层配置则由硬件验证工程师重点把关。
2.1 CSI-2 五层分层架构
CSI-2 协议从物理连接到应用数据,共分为五个逻辑层。每一层向上层提供服务,并向下层屏蔽实现细节。
| 层次 | 主要职责 | 驱动关注点 |
|---|---|---|
| 应用层 | 像素数据重组、图像格式处理 | V4L2 框架、像素格式配置 |
| Pixel to Byte | 像素打包/解包、格式转换、字节对齐 | DT (Data Type) 解析、格式映射 |
| Low-Level Protocol | 数据包封装、ECC/CRC 校验、虚拟通道 | VC 配置、错误检测、包头解析 |
| Lane Management | 数据分发、Lane 合并/拆分、SoT/EoT | Lane 数配置、时序同步 |
| PHY 层 | 串行/解串、电气特性、时钟恢复 | D-PHY 参数、HS/LP 模式切换 |
2.2 数据类型 (Data Type, DT)
CSI-2 使用 6 位 Data Type 字段标识数据包的内容格式。Pixel to Byte 层根据 DT 决定如何解析负载数据。DT 值决定了图像格式、位深和打包方式。
关键 DT 值速查表(RK3588 常用):
- 0x00 — Frame Start (FS)
- 0x01 — Frame End (FE)
- 0x2B — RAW10 (Bayer 10-bit)
- 0x2C — RAW12 (Bayer 12-bit)
- 0x1E — JPEG 压缩数据
- 0x12 — YUV422 8-bit
2.3 虚拟通道 (Virtual Channel, VC)
虚拟通道允许在同一个 MIPI 物理链路上传输最多 4 路独立的摄像头数据流。VC 值嵌入在数据包头中,由 Low-Level Protocol 层解析。
| VC 值 | 用途 | 典型场景 |
|---|---|---|
| VC0 | 主图像数据流 | 主摄像头 RAW/YUV 数据 |
| VC1 | 副图像或深度数据 | 双摄副摄像头、ToF 传感器 |
| VC2 | 嵌入式元数据 | 传感器增益、曝光时间、温度 |
| VC3 | 调试或保留 | 测试图案、厂商自定义数据 |
驱动开发注意: RK3588 CSI 主机控制器支持 4 路虚拟通道。在设备树中,每个 VC 对应一个独立的 V4L2 subdev 节点。如果传感器输出多路 VC,必须确保每个 VC 的 DT 和格式配置正确,否则会导致数据解析错位。
2.4 数据包结构:长包与短包
CSI-2 协议定义两种数据包:短包用于帧同步和控制,长包用于传输图像数据。Low-Level Protocol 层负责包头的 ECC 校验和包尾的 CRC 校验。
2.5 Lane Management 与数据分发
Lane Management 层负责将 Low-Level Protocol 层输出的字节流分发到多个数据 Lane 上。RK3588 支持 1/2/4 Lane 配置,Lane 数越多,单帧传输时间越短。
Lane 分发规则:
- 数据以 字节 为单位循环分配到各 Lane。
- 4-Lane 模式下:Lane0 接收 Byte0, Byte4, Byte8...;Lane1 接收 Byte1, Byte5, Byte9...;以此类推。
- 每个 Lane 独立进行 8B/10B 编码(D-PHY)或 16B/7B 编码(C-PHY)。
- SoT (Start of Transmission) 和 EoT (End of Transmission) 序列由 Lane Management 层插入。
2.6 PHY 层:D-PHY 与 C-PHY
RK3588 主要使用 D-PHY v1.2,支持最高 2.5 Gbps/Lane 的数据速率。PHY 层处理电气信号、时钟恢复和 HS/LP 模式切换。
| 参数 | D-PHY v1.2 | C-PHY v1.0 |
|---|---|---|
| 信号线 | 1 对差分时钟 + 1 对差分数据/Lane | 3 线 (Triplet) / Lane,无专用时钟 |
| 每 Lane 速率 | 最高 2.5 Gbps | 最高 5.7 Gbps (等效) |
| 编码方式 | 8B/10B | 16B/7B (三进制) |
| RK3588 支持 | 是 (主要使用) | 否 (仅 D-PHY) |
| HS 模式电压 | 200 mV 差分摆幅 | 300 mV 三线差分 |
硬件验证提示: 使用示波器测量 D-PHY HS 模式时,应观察差分信号摆幅是否在 140-270 mV 范围内,共模电压是否稳定在 200 mV 左右。LP 模式信号摆幅为 1.2V,用于控制模式切换。
2.7 完整数据流示例:RAW10 4-Lane 传输
以下示例展示一个 1920x1080 RAW10 图像通过 4-Lane D-PHY 传输的完整数据流过程:
- 帧开始: Sensor 发送短包 (DT=0x00, VC=0),所有 Lane 广播 SoT 序列。
- 行传输: 每行 1920 像素 × 10 bit = 19200 bit = 2400 字节。Lane Management 将 2400 字节循环分配到 4 个 Lane,每 Lane 600 字节。
- 字节打包: Pixel to Byte 层将 10-bit RAW 数据打包为 5 字节/4 像素的格式 (每 4 个 10-bit 像素占用 5 字节)。
- PHY 传输: 每个 Lane 以 1.5 Gbps 速率串行发送 8B/10B 编码后的数据。
- 帧结束: Sensor 发送短包 (DT=0x01, VC=0),所有 Lane 广播 EoT 序列。
常见问题: 如果 Lane 数配置错误(例如 Sensor 输出 4-Lane 但驱动配置为 2-Lane),会导致数据错位,图像出现条纹或撕裂。务必在设备树中正确配置
data-lanes 属性。
// RK3588 设备树 MIPI CSI 节点 Lane 配置示例
&csi2_dphy0 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
mipi_in_ucam0: endpoint {
remote-endpoint = <&ucam0_out>;
data-lanes = <1 2 3 4>; // 4-Lane 模式
};
};
};
};