4、DSI时序参数详解:HBP、HFP、HSA、HSE、VBP、VFP、VSA、VSE、像素时钟、刷新率计算
MIPI DSI 显示时序参数是驱动配置中最关键、最容易出错的部分。时序参数定义了主机(Host)向显示面板发送图像数据时,每一行和每一帧的空闲周期、同步信号位置以及有效数据的窗口。错误的时序配置会导致图像偏移、撕裂、闪烁甚至黑屏。
核心原则: 所有时序参数的单位均为 像素时钟周期(pixel clock cycles) 或 行周期(line times)。理解像素时钟与刷新率的关系是正确计算所有参数的基础。
4.1 水平时序(Horizontal Timing)
水平时序定义了一行(Line)内从同步信号开始到下一行同步信号开始之间的完整周期。每一行由以下几个部分组成:
- HSA (Horizontal Sync Active):行同步信号有效宽度(低电平有效)。
- HSE (Horizontal Sync End):行同步信号结束位置(通常与 HBP 边界对齐,部分协议中用于定义同步脉冲后肩)。
- HBP (Horizontal Back Porch):行同步结束到有效数据开始之间的消隐区。
- HACT (Horizontal Active):一行中有效的像素数据宽度(即分辨率宽度)。
- HFP (Horizontal Front Porch):有效数据结束到下一行同步信号开始之间的消隐区。
关键公式: 一行总像素数
H_total = HSA + HBP + HACT + HFP
4.2 垂直时序(Vertical Timing)
垂直时序定义了一帧(Frame)内从垂直同步信号开始到下一帧垂直同步信号开始之间的完整周期。每一帧由以下几个部分组成:
- VSA (Vertical Sync Active):帧同步信号有效宽度(通常以行数计量)。
- VSE (Vertical Sync End):帧同步信号结束位置。
- VBP (Vertical Back Porch):帧同步结束到有效数据开始之间的消隐行数。
- VACT (Vertical Active):一帧中有效的像素行数(即分辨率高度)。
- VFP (Vertical Front Porch):有效数据结束到下一帧同步信号开始之间的消隐行数。
关键公式: 一帧总行数
V_total = VSA + VBP + VACT + VFP
4.3 像素时钟与刷新率计算
像素时钟(Pixel Clock,简称 PCLK)是驱动显示接口的最基本时钟频率。它决定了每秒从主机传输到面板的像素数量。刷新率(Refresh Rate)是屏幕每秒更新画面的次数。
核心公式:
PCLK (Hz) = H_total × V_total × 刷新率 (Hz)刷新率 (Hz) = PCLK (Hz) / (H_total × V_total)
其中:
H_total = HSA + HBP + HACT + HFPV_total = VSA + VBP + VACT + VFP
4.3.1 计算示例
以瑞芯微 RK3568 平台驱动一款 1080p(1920x1080)60Hz 的 MIPI 屏为例:
| 参数 | 典型值 | 说明 |
|---|---|---|
| HACT | 1920 | 水平有效像素 |
| HFP | 88 | 水平前肩 |
| HBP | 148 | 水平后肩 |
| HSA | 44 | 水平同步宽度 |
| H_total | 2200 | 1920 + 88 + 148 + 44 |
| VACT | 1080 | 垂直有效行数 |
| VFP | 4 | 垂直前肩 |
| VBP | 36 | 垂直后肩 |
| VSA | 5 | 垂直同步宽度 |
| V_total | 1125 | 1080 + 4 + 36 + 5 |
计算所需像素时钟:
PCLK = H_total × V_total × 刷新率
= 2200 × 1125 × 60
= 148,500,000 Hz
= 148.5 MHz
常见错误: 初学者容易将 HACT 和 VACT 直接代入公式,忽略消隐区(HFP、HBP、VFP、VBP、HSA、VSA)。这会导致计算出的 PCLK 偏低,实际驱动时因带宽不足出现花屏或无法点亮。
4.4 时序参数在瑞芯微平台中的配置
在瑞芯微 Linux 内核的 DTS(Device Tree Source)中,时序参数通常在 display-timings 节点下配置。以下是一个典型的配置片段:
display-timings {
native-mode = <&timing0>;
timing0: timing0 {
clock-frequency = <148500000>; /* 像素时钟 148.5 MHz */
hactive = <1920>;
vactive = <1080>;
hfront-porch = <88>;
hback-porch = <148>;
hsync-len = <44>;
vfront-porch = <4>;
vback-porch = <36>;
vsync-len = <5>;
hsync-active = <0>; /* 0: 低电平有效 */
vsync-active = <0>; /* 0: 低电平有效 */
de-active = <0>; /* 数据使能极性 */
pixelclk-active = <0>; /* 像素时钟极性 */
};
};
4.5 时序参数调试要点
| 现象 | 可能原因 | 调试方向 |
|---|---|---|
| 图像整体左移或右移 | HBP 或 HFP 值不匹配面板规格 | 调整 HBP 和 HFP,保持 H_total 不变 |
| 图像整体上移或下移 | VBP 或 VFP 值不匹配面板规格 | 调整 VBP 和 VFP,保持 V_total 不变 |
| 图像闪烁或撕裂 | 像素时钟频率不准确或消隐区过小 | 用示波器测量 PCLK,检查 H_total/V_total 计算 |
| 黑屏但背光亮 | HSA/VSA 宽度错误或极性反 | 核对面板 datasheet 的同步信号极性要求 |
| 刷新率不达标 | PCLK 偏低或 V_total 过大 | 优化消隐区参数,或提高 PCLK 频率 |
调试建议: 在瑞芯微平台上,可以通过
/sys/kernel/debug/dri/0/state 查看当前显示的时序参数。使用 cat /sys/kernel/debug/clk/clk_summary | grep dclk 查看像素时钟的实际频率。务必使用示波器或逻辑分析仪测量 MIPI DSI 的时钟通道和数据通道,验证时序是否与配置一致。
4.6 时序参数与 MIPI DSI 数据包的关系
MIPI DSI 协议在消隐区(HFP、HBP、VFP、VBP)传输特定的数据包,用于同步、BTA(Bus Turnaround)或 EoT(End of Transmission)等控制。理解这一点有助于调试高级显示问题:
- HSA 期间: 发送垂直同步包(VSS)或水平同步包(HSS)。
- HBP 期间: 通常发送空包(Null Packet)或保留,部分面板要求在此发送特定命令。
- HFP 期间: 可用于发送 EoT 包或 BTA 请求。
- VBP/VFP 期间: 可发送多行消隐数据,用于命令传输或 TE(Tearing Effect)信号同步。
4.7 总结:时序参数速查表
| 参数 | 全称 | 单位 | 典型范围 | 调试优先级 |
|---|---|---|---|---|
| HSA | Horizontal Sync Active | 像素时钟周期 | 4 ~ 128 | 高 |
| HBP | Horizontal Back Porch | 像素时钟周期 | 20 ~ 256 | 高 |
| HFP | Horizontal Front Porch | 像素时钟周期 | 20 ~ 256 | 高 |
| VSA | Vertical Sync Active | 行数 | 1 ~ 16 | 中 |
| VBP | Vertical Back Porch | 行数 | 4 ~ 64 | 中 |
| VFP | Vertical Front Porch | 行数 | 1 ~ 32 | 中 |
| PCLK | Pixel Clock | Hz | 25M ~ 200M | 最高 |
| 刷新率 | Refresh Rate | Hz | 30 ~ 120 | 验证指标 |
调试口诀: 先算 PCLK,再调 H/V 消隐;同步极性不能错,示波器测最安心。