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 时钟树时的关键输入。
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 的 有效数据率 而非简单帧率计算。
4.3 瑞芯微 PLL 配置策略
瑞芯微平台通过 CRU(Clock & Reset Unit)模块配置 MIPI DPHY 的 HS 时钟。PLL 配置的核心目标是:生成一个精确的 clk_hs,使其等于 Lane_Rate / 2。以下是标准配置流程:
- 确定目标 clk_hs: 根据 Sensor 规格书和分辨率计算 Lane_Rate,然后除以 2 得到 clk_hs。
- 选择 PLL 源: 通常使用 24 MHz 晶振作为参考时钟(xin24M)。
- 计算分频系数: 使用公式
clk_hs = (xin24M × FB_DIV) / (REF_DIV × POST_DIV)。 - 配置 CRU 寄存器: 设置 PLL 的 FB_DIV、REF_DIV、POST_DIV 以及 MIPI DPHY 的时钟门控。
- 验证输出: 通过示波器测量 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 以节省功耗。
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 速率。