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)。
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; // 循环冗余校验
};
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 负责协议层解析。
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 驱动的初始化遵循以下步骤:
- 解析设备树: 获取 lane 映射、时钟频率等参数。
- 时钟使能: 使能 D-PHY 参考时钟(通常为 24 MHz 晶振)。
- PLL 配置: 根据目标速率配置 D-PHY PLL,生成高速时钟。
- lane 校准: 执行 HS 模式下的 lane 对齐与校准。
- 启动传输: 使能 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;
}
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 个逻辑摄像头。
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 场景下的资源分配与时钟同步策略。