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 协议从物理连接到应用数据,共分为五个逻辑层。每一层向上层提供服务,并向下层屏蔽实现细节。

MIPI CSI-2 五层分层架构 MIPI CSI-2 协议分层架构 应用层 (Application Layer) 像素数据重组、图像格式处理 Pixel to Byte 层 像素打包/解包、格式转换、字节对齐 Low-Level Protocol 层 数据包封装、ECC/CRC校验、虚拟通道 Lane Management 层 数据分发、Lane 合并/拆分、SoT/EoT PHY 层 (D-PHY / C-PHY) 串行/解串、电气特性、时钟恢复 数据流方向:摄像头 Sensor → PHY → Lane Mgmt → LLP → Pixel to Byte → 应用层
层次 主要职责 驱动关注点
应用层 像素数据重组、图像格式处理 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 值决定了图像格式、位深和打包方式。

CSI-2 数据类型分类 CSI-2 数据类型 (Data Type) 分类 0x00 - 0x07: 同步与帧控制 (FS, FE, LS, LE) 0x08 - 0x17: 通用图像数据 (RAW6/7/8/10/12/14, RGB, YUV) 0x18 - 0x1F: 用户定义数据 / JPEG / 其他压缩格式 0x20 - 0x3F: 嵌入式数据 (元数据、传感器配置、调试信息) RK3588 驱动中,DT 值决定 V4L2 像素格式映射,如 DT=0x2B 对应 V4L2_PIX_FMT_SBGGR10
关键 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 校验。

CSI-2 数据包结构 CSI-2 数据包结构:短包 vs 长包 短包 (Short Packet): Data ID 16-bit 数据 ECC → 共 32 bits (4 bytes) 长包 (Long Packet): Data ID Word Count ECC Payload (可变长度) CRC Data ID = VC (2 bits) + DT (6 bits) Word Count = Payload 字节数 (16-bit, 最大 65535) ECC = 6 位校验码,可纠正 1 bit 错误,检测 2 bit 错误

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 传输的完整数据流过程:

  1. 帧开始: Sensor 发送短包 (DT=0x00, VC=0),所有 Lane 广播 SoT 序列。
  2. 行传输: 每行 1920 像素 × 10 bit = 19200 bit = 2400 字节。Lane Management 将 2400 字节循环分配到 4 个 Lane,每 Lane 600 字节。
  3. 字节打包: Pixel to Byte 层将 10-bit RAW 数据打包为 5 字节/4 像素的格式 (每 4 个 10-bit 像素占用 5 字节)。
  4. PHY 传输: 每个 Lane 以 1.5 Gbps 速率串行发送 8B/10B 编码后的数据。
  5. 帧结束: 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 模式
            };
        };
    };
};

2.8 本章小结