RK3588多Camera驱动开发与ISP图像质量优化 - 第2节

2.1 MIPI CSI-2 协议概述

MIPI CSI-2(Camera Serial Interface 2)是移动设备与嵌入式系统中应用最广泛的摄像头串行接口标准。它定义了从图像传感器到应用处理器(AP)或 ISP 之间的数据与控制通道。CSI-2 协议栈分为三层:物理层(PHY)、协议层(Protocol Layer)和应用层(Application Layer)。

关键概念: CSI-2 采用差分串行传输,通过 D-PHY 或 C-PHY 物理层实现高速低功耗的数据传输。在 RK3588 平台上,默认使用 D-PHY 物理层,支持最高 4-lane 配置,单 lane 速率可达 2.5 Gbps。

2.1.1 协议栈分层结构

下表展示了 CSI-2 协议栈各层的功能与对应关系:

层级 功能描述 典型实现
应用层 像素数据格式定义、帧结构、元数据 RAW10/RAW12、YUV422、JPEG
协议层 数据包封装、ECC/CRC校验、虚拟通道 长包/短包、帧起始/结束码
物理层 电气特性、时钟与数据恢复、lane管理 D-PHY v1.2/v2.0、C-PHY v1.0

2.1.2 数据包格式

CSI-2 协议使用两种基本数据包:短包(Short Packet)和长包(Long Packet)。短包用于传输帧同步、行同步等控制信息;长包用于传输像素数据。

// 长包结构示例(RAW10 格式)
// 包起始码 (SoT) -> 数据标识符 (DI) -> 字计数 (WC) -> 有效数据 -> ECC -> CRC
// 包结束码 (EoT)
// 实际硬件自动处理,驱动只需配置格式与分辨率
struct mipi_csi2_long_packet {
    uint8_t  data_id;      // 虚拟通道(2bit) + 数据类型(6bit)
    uint16_t word_count;   // 有效数据字节数
    uint8_t  ecc;          // 纠错码
    uint8_t  *data;        // 像素数据
    uint16_t crc;          // 循环冗余校验
};
开发提示: 在 RK3588 驱动中,数据类型(如 RAW10 = 0x2B)通过 V4L2 的 mbus_code 映射,无需手动构造包结构。

2.2 D-PHY 物理层详解

D-PHY 是 MIPI 联盟定义的物理层标准,采用差分信号对(Data/Clock)进行传输。每个 lane 包含一对差分线(Dp/Dn),通过低压摆幅(约 200mV)实现高速传输。

2.2.1 D-PHY 工作模式

D-PHY 支持两种主要工作模式:

  • 高速模式(HS): 用于数据传输,差分摆幅 200mV,速率 80 Mbps ~ 2.5 Gbps。
  • 低功耗模式(LP): 用于控制信号,单端摆幅 1.2V,速率约 10 Mbps。

模式切换通过 LP 状态序列实现:

// LP-11 -> LP-01 -> LP-00 进入 HS 模式
// HS 传输结束后 -> LP-00 -> LP-11 回到 LP 模式
// 状态由 D-PHY 控制器自动管理,驱动只需配置时序参数

2.2.2 D-PHY 电气特性对比

参数 HS 模式 LP 模式
电压摆幅 200 mV(差分) 1.2 V(单端)
传输速率 80 Mbps ~ 2.5 Gbps ~10 Mbps
功耗 高(~3 mW/lane) 低(~0.3 mW/lane)
应用场景 像素数据传输 控制/同步信号

2.3 RK3588 MIPI D-PHY 硬件架构

RK3588 集成了 4 个 MIPI D-PHY 控制器,每个控制器支持 4 个数据 lane 和 1 个时钟 lane。硬件架构采用 DPHY + CSI Host 分离设计,DPHY 负责物理层信号处理,CSI Host 负责协议层解析。

RK3588 MIPI D-PHY 硬件架构 图像传感器 (IMX415/OV64A) MIPI D-PHY 4-lane + 1 clock CSI Host 协议层解析 ISP 图像处理 时钟 Lane (DDR) 架构说明: • RK3588 包含 4 个独立 D-PHY 控制器,每个支持 4-lane 输入 • D-PHY 完成串并转换与时钟恢复后,将并行数据送入 CSI Host • CSI Host 解析长包/短包,提取像素数据与帧同步信号 • 最终数据通过 AXI 总线送入 ISP 或 DDR 内存

2.4 RK3588 D-PHY 配置实战

在 RK3588 的 Linux 内核驱动中,D-PHY 配置主要通过设备树(Device Tree)完成。关键配置项包括:lane 映射、速率、时序参数等。

2.4.1 设备树配置示例

// rk3588-camera.dtsi - MIPI D-PHY 节点配置
&csi2_dphy0 {
    status = "okay";
    ports {
        #address-cells = <1>;
        #size-cells = <0>;

        port@0 {
            reg = <0>;
            #address-cells = <1>;
            #size-cells = <0>;

            mipi_in_ucam0: endpoint@0 {
                reg = <0>;
                remote-endpoint = <&imx415_out0>;
                data-lanes = <1 2 3 4>;  // 4-lane 配置
                clock-lanes = <0>;        // 时钟 lane 索引
                link-frequencies = /bits/ 64 <800000000>; // 800 MHz DDR
            };
        };
    };
};

2.4.2 关键配置参数说明

参数 说明 典型值
data-lanes 数据 lane 的物理映射顺序 <1 2 3 4> 或 <1 2>
clock-lanes 时钟 lane 索引(通常为 0) <0>
link-frequencies D-PHY 链路时钟频率(Hz) 800000000 (800 MHz)
max-lane-frequency 单 lane 最大传输速率 2500000000 (2.5 Gbps)

2.4.3 驱动初始化流程

RK3588 D-PHY 驱动的初始化遵循以下步骤:

  1. 解析设备树: 获取 lane 映射、时钟频率等参数。
  2. 时钟使能: 使能 D-PHY 参考时钟(通常为 24 MHz 晶振)。
  3. PLL 配置: 根据目标速率配置 D-PHY PLL,生成高速时钟。
  4. lane 校准: 执行 HS 模式下的 lane 对齐与校准。
  5. 启动传输: 使能 CSI Host 接收,等待传感器数据。
// 驱动核心代码片段 (drivers/phy/rockchip/phy-rockchip-mipi-rk3588.c)
static int rk3588_mipi_dphy_power_on(struct phy *phy)
{
    struct rk3588_mipi_dphy *dphy = phy_get_drvdata(phy);

    // 1. 使能时钟
    clk_prepare_enable(dphy->ref_clk);

    // 2. 配置 PLL 分频
    regmap_write(dphy->regmap, GRF_DPHY_CTRL, 
                 dphy->lane_rate / 2);  // DDR 模式

    // 3. 启动 lane 校准
    regmap_update_bits(dphy->regmap, GRF_DPHY_STATUS,
                       DPHY_LANE_READY, 0);

    // 4. 等待校准完成
    readl_poll_timeout(dphy->regmap + GRF_DPHY_STATUS,
                       val, val & DPHY_LANE_READY, 100, 1000000);

    return 0;
}
常见问题: 如果 D-PHY 链路不稳定,首先检查 link-frequencies 是否与传感器输出匹配。RK3588 的 D-PHY 在 800 MHz 以上时,需要确保 PCB 走线长度匹配(误差 < 5mm),否则会导致 lane 间 skew 超标。

2.5 多 Camera 场景下的 D-PHY 配置

RK3588 支持同时接入多路 Camera,每个 D-PHY 控制器独立工作。多 Camera 配置时需注意以下要点:

  • 资源分配: 4 个 D-PHY 控制器可分别连接不同传感器,共享 CSI Host 与 ISP 带宽。
  • 时钟同步: 多路 Camera 可使用独立时钟或共享时钟,需在设备树中指定 clock-master。
  • 虚拟通道: 单个 D-PHY 可通过虚拟通道(VC)支持最多 4 个逻辑摄像头。
多 Camera D-PHY 配置拓扑 Camera 0 IMX415 Camera 1 OV64A Camera 2 GC2053 DPHY0 4-lane DPHY1 4-lane DPHY2 2-lane CSI Host 协议解析 ISP 图像处理

2.6 本章小结

本章深入讲解了 MIPI CSI-2 协议栈、D-PHY 物理层工作原理以及 RK3588 平台上的 D-PHY 配置方法。核心要点包括:

  • CSI-2 协议的分层结构:应用层、协议层、物理层各司其职。
  • D-PHY 的 HS/LP 双模式工作方式,以及模式切换序列。
  • RK3588 的 D-PHY 硬件架构:4 个独立控制器,每个支持 4-lane。
  • 设备树配置中 data-lanes、link-frequencies 等关键参数。
  • 多 Camera 场景下的资源分配与时钟同步策略。