4、MIPI CSI 时钟计算:像素时钟与 MIPI 数据速率关系、不同 RAW 格式下的 Lane 速率计算、瑞芯微 PLL 配置策略

MIPI CSI 接口的时钟计算是驱动调试中最核心的数学基础。像素时钟(PCLK)与 MIPI 数据速率(Data Rate per Lane)之间存在严格的线性关系,而 RAW 格式的位深(Bit Depth)直接决定了单像素所需传输的比特数。本章将详细推导这些公式,并给出瑞芯微平台下 PLL 配置的实战策略。

4.1 像素时钟与 MIPI 数据速率关系

MIPI CSI-2 的物理层采用差分信号传输,每个 Lane 在每个时钟周期内传输 2 比特(DDR 模式)。因此,总数据带宽 必须大于或等于 像素数据产生速率。基本公式如下:

核心公式:

Total_Data_Rate (bps) = Lane_Rate (bps) × Lane_Count
Pixel_Data_Rate (bps) = PCLK (Hz) × Bit_Depth (bits/pixel) × Pixel_Width × Pixel_Height × Frame_Rate

系统约束:Total_Data_Rate ≥ Pixel_Data_Rate,通常保留 10%~20% 的裕量。

实际工程中,我们更关心 单 Lane 数据速率 与 PCLK 的关系:

Lane_Rate (bps) = (PCLK × Bit_Depth) / (2 × Lane_Count)

其中除以 2 是因为 MIPI 的 DDR 特性(每个 Lane 每周期传 2 bit)。

参数 符号 单位 说明
像素时钟 PCLK Hz Sensor 输出一个像素的时钟频率
位深 Bit_Depth bits RAW8=8, RAW10=10, RAW12=12
Lane 数 Lane_Count — 通常为 1/2/4
Lane 速率 Lane_Rate bps 单 Lane 数据传输速率

调试提示: 在瑞芯微 TRM 中,MIPI DPHY 的 HS 时钟频率(clk_hs)等于 Lane_Rate 的一半。例如 Lane_Rate = 1.2 Gbps,则 clk_hs = 600 MHz。这是配置 CRU 时钟树时的关键输入。

像素时钟与 MIPI 数据速率关系图 Sensor 输出 PCLK × Bit_Depth MIPI CSI 接收 Lane_Rate × Lane_Count RK PLL 配置 clk_hs = Lane_Rate/2 约束:Total_Data_Rate ≥ Pixel_Data_Rate(建议保留 10%~20% 裕量)

4.2 不同 RAW 格式下的 Lane 速率计算

RAW 格式的位深直接影响单 Lane 数据速率。以 1920×1080@30fps、4-Lane 配置为例,计算不同 RAW 格式下的理论 Lane 速率:

PCLK = 1920 × 1080 × 30 = 62,208,000 Hz ≈ 62.2 MHz

RAW8:  Lane_Rate = (62.2e6 × 8) / (2 × 4) = 497.6 Mbps
RAW10: Lane_Rate = (62.2e6 × 10) / (2 × 4) = 622.0 Mbps
RAW12: Lane_Rate = (62.2e6 × 12) / (2 × 4) = 746.4 Mbps
RAW 格式 位深 (bits) PCLK (MHz) Lane 数 理论 Lane 速率 (Mbps) 推荐实际配置 (Mbps)
RAW8 8 62.2 4 497.6 500
RAW10 10 62.2 4 622.0 650
RAW12 12 62.2 4 746.4 800

工程注意: 实际 Lane 速率必须考虑 Blanking 开销(H-Blank 和 V-Blank)。Sensor 输出的 PCLK 通常包含 Blanking 周期,因此实际有效像素时钟低于理论值。建议使用 Sensor 的 有效数据率 而非简单帧率计算。

不同 RAW 格式 Lane 速率对比 RAW8 497.6 Mbps RAW10 622.0 Mbps RAW12 746.4 Mbps Lane 速率 (Mbps) 1920×1080@30fps, 4-Lane 配置下不同 RAW 格式的理论 Lane 速率

4.3 瑞芯微 PLL 配置策略

瑞芯微平台通过 CRU(Clock & Reset Unit)模块配置 MIPI DPHY 的 HS 时钟。PLL 配置的核心目标是:生成一个精确的 clk_hs,使其等于 Lane_Rate / 2。以下是标准配置流程:

  1. 确定目标 clk_hs: 根据 Sensor 规格书和分辨率计算 Lane_Rate,然后除以 2 得到 clk_hs。
  2. 选择 PLL 源: 通常使用 24 MHz 晶振作为参考时钟(xin24M)。
  3. 计算分频系数: 使用公式 clk_hs = (xin24M × FB_DIV) / (REF_DIV × POST_DIV)。
  4. 配置 CRU 寄存器: 设置 PLL 的 FB_DIV、REF_DIV、POST_DIV 以及 MIPI DPHY 的时钟门控。
  5. 验证输出: 通过示波器测量 DPHY 时钟 Lane 的 HS 时钟频率,确保误差在 ±1% 以内。

瑞芯微 PLL 配置示例(RK3588):

/* 目标:clk_hs = 300 MHz (对应 Lane_Rate = 600 Mbps) */
/* 源时钟:xin24M = 24 MHz */

/* 计算分频系数 */
REF_DIV = 1;   /* 参考分频 */
FB_DIV  = 75;  /* 反馈分频:24 MHz × 75 = 1800 MHz (VCO) */
POST_DIV = 6;  /* 后分频:1800 MHz / 6 = 300 MHz */

/* 寄存器配置 (伪代码) */
CRU_PLL_CON(0) = (REF_DIV << 0) | (FB_DIV << 8);
CRU_PLL_CON(1) = (POST_DIV << 0);
CRU_PLL_CON(3) |= PLL_LOCK_BIT;  /* 等待 PLL 锁定 */

/* 配置 MIPI DPHY 时钟门控 */
CRU_CLKGATE_CON(10) |= (1 << 4);  /* 使能 MIPI_CSI clk_hs */
PLL 参数 取值范围 说明
REF_DIV 1~63 参考时钟分频,通常设为 1
FB_DIV 16~3200 反馈分频,决定 VCO 频率
POST_DIV 1~15 后分频,将 VCO 降至目标频率
VCO 频率 800 MHz ~ 3.2 GHz PLL 内部振荡器范围

调试策略: 当 Lane_Rate 较高(>1.5 Gbps)时,优先使用较小的 POST_DIV 和较大的 FB_DIV,以降低 PLL 相位噪声。对于低速场景(<500 Mbps),可适当增大 POST_DIV 以节省功耗。

瑞芯微 PLL 配置流程 xin24M (24 MHz) REF_DIV 分频 PFD + CP VCO (800M~3.2G) POST_DIV 分频 clk_hs 输出 FB_DIV 反馈 clk_hs = (xin24M × FB_DIV) / (REF_DIV × POST_DIV),需确保 VCO 在 800 MHz ~ 3.2 GHz 范围内

4.4 常见问题与调试要点

  • 时钟抖动过大: 检查 PLL 的 VCO 频率是否在推荐范围内,避免使用极端的 FB_DIV 值。
  • Lane 速率不匹配: 确认 Sensor 的 Lane_Rate 与 DPHY 的 clk_hs 配置一致,误差应小于 ±1%。
  • Blanking 未考虑: 使用 media-ctl 或 v4l2-ctl 读取 Sensor 的实际 PCLK,而非理论值。
  • 多 Sensor 同步: 确保所有 Sensor 的 PLL 使用同一参考时钟源,避免频率偏差。

驱动调试红线: 在瑞芯微平台上,MIPI DPHY 的 clk_hs 频率不能超过 1.5 GHz(对应 Lane_Rate 3.0 Gbps)。超过此限制会导致 DPHY 失锁或数据错误。对于高分辨率高帧率场景,优先增加 Lane 数而非提高单 Lane 速率。