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
水平时序结构图(一行周期) HSA 同步有效 HBP 后肩 HACT(有效像素数据) 分辨率宽度 HFP 前肩 下一行HSA H_Total(一行总像素数)

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
垂直时序结构图(一帧周期) VSA 同步有效行 VBP 后肩行 VACT(有效像素行) 分辨率高度 VFP 前肩行 下一帧VSA V_Total(一帧总行数)

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 + HFP
  • V_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)信号同步。
MIPI DSI 数据包与消隐区对应关系 HSS Null / 命令 有效像素数据包(Long Packet) EoT / BTA HSS HSA HBP HACT HFP

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 消隐;同步极性不能错,示波器测最安心。