3. 时序参数详解(下):VFP、VBP、Vsync 的定义与作用
在垂直方向(帧)的时序中,Vsync(垂直同步信号)、VFP(垂直前肩)和VBP(垂直后肩)共同决定了每一帧图像从结束到下一帧开始之间的“消隐”行为。这三个参数直接影响面板的刷新同步、数据锁存时机以及帧率稳定性。
3.1 垂直同步信号(Vsync)
Vsync 是一个脉冲信号,用于标识一帧画面的开始。在 Vsync 有效期间(通常为低电平有效),LCD 驱动 IC 会复位行指针并准备接收下一帧的像素数据。
- 作用:帧同步触发,确保每帧数据从第 0 行开始。
- 单位:行数(H)或像素时钟周期数。
- 典型值:1 ~ 10 行(取决于 Panel 规格书)。
- 常见问题:Vsync 脉宽过短可能导致帧同步不稳定,出现画面抖动或撕裂。
调试提示:使用示波器测量 Vsync 引脚时,应确认其有效电平极性(上升沿触发还是低电平有效)。多数 RGB 接口 Panel 使用低电平有效 Vsync。
3.2 垂直前肩(VFP)
VFP 是指在一帧的最后一个有效行数据发送完成后,到下一个 Vsync 脉冲开始之间的行数。这段时间用于等待扫描电子束(CRT 遗留概念)或 LCD 驱动 IC 完成内部行缓存刷新。
- 作用:提供帧结束后的消隐缓冲,防止上一帧数据干扰下一帧。
- 单位:行数(H)。
- 典型值:2 ~ 10 行。
- 常见问题:VFP 设置过小可能导致帧尾像素被截断或出现残影。
3.3 垂直后肩(VBP)
VBP 是指 Vsync 脉冲结束后,到第一行有效像素数据开始输出之间的行数。这段时间用于驱动 IC 内部行地址复位、PLL 锁定或电荷泵稳定。
- 作用:提供帧起始前的稳定时间,确保第一行数据正确锁存。
- 单位:行数(H)。
- 典型值:2 ~ 20 行。
- 常见问题:VBP 不足会导致屏幕顶部出现水平条纹或花屏。
3.4 垂直时序参数对比表
| 参数 | 全称 | 位置 | 主要作用 | 典型范围(行) |
|---|---|---|---|---|
| Vsync | 垂直同步信号 | 帧起始脉冲 | 帧同步触发,复位行指针 | 1 ~ 10 |
| VBP | 垂直后肩 | Vsync 之后,有效数据之前 | 稳定驱动 IC,准备第一行数据 | 2 ~ 20 |
| VFP | 垂直前肩 | 有效数据之后,下一个 Vsync 之前 | 帧结束消隐,防止数据干扰 | 2 ~ 10 |
3.5 垂直时序结构图
下图展示了一帧画面中 Vsync、VBP、有效数据行、VFP 的完整时序关系:
3.6 垂直时序计算公式
一帧的总行数(Frame Total Lines)决定了实际的帧刷新率:
FrameTotalLines = Vsync + VBP + YRES + VFP
实际帧率 = PixelClock / (HTotal × FrameTotalLines)
其中:
YRES = 面板垂直分辨率(如 1080)
HTotal = 水平总像素(Hsync + HBP + XRES + HFP)
案例: 假设 PixelClock = 148.5 MHz,HTotal = 2200,FrameTotalLines = 1125(Vsync=3, VBP=20, YRES=1080, VFP=22),则实际帧率 = 148.5e6 / (2200 × 1125) ≈ 60.0 Hz。
3.7 常见配置错误与排查
- VFP 过小:屏幕底部出现残影或滚动条纹,因为上一帧数据未完全清除。
- VBP 过小:屏幕顶部出现水平噪点或花屏,驱动 IC 未完成初始化。
- Vsync 脉宽不足:帧同步丢失,画面随机撕裂或黑屏闪烁。
- 三者之和过大:帧率降低,可能导致显示卡顿或带宽浪费。
重要提醒:不同 Panel 厂商对 Vsync、VBP、VFP 的命名和极性定义可能不同。务必以 Panel 数据手册(Datasheet)中的时序图为最终依据,不要直接套用其他型号的配置。
3.8 垂直时序参数配置流程
- 从 Panel 数据手册中获取 Vsync、VBP、VFP 的最小值、典型值和最大值。
- 根据目标帧率(如 60 Hz)和 PixelClock 计算 FrameTotalLines 是否在允许范围内。
- 优先使用典型值(Typical)进行初始化,避免使用极限值。
- 在驱动代码中配置对应的寄存器(如 VSYNC_WIDTH、VBP_CNT、VFP_CNT)。
- 上电后通过示波器测量 Vsync 引脚波形,验证帧周期是否符合预期。
- 观察屏幕显示是否完整、无抖动、无条纹,必要时微调 VBP 或 VFP。
3.9 垂直时序参数配置示例(RGB 接口)
/* 以 1920x1080@60Hz 为例 */
#define VBP 20 /* 垂直后肩:20 行 */
#define VFP 22 /* 垂直前肩:22 行 */
#define VSW 3 /* Vsync 脉宽:3 行 */
#define YRES 1080 /* 垂直分辨率 */
/* 帧总行数 */
#define FRAME_TOTAL_LINES (VSW + VBP + YRES + VFP) /* = 1125 */
/* 写入 LCD 控制器寄存器 */
LCD_REG[VSYNC_WIDTH] = VSW - 1; /* 硬件通常从 0 计数 */
LCD_REG[VBP_CNT] = VBP - 1;
LCD_REG[VFP_CNT] = VFP - 1;
调试技巧:如果屏幕顶部出现异常,优先增加 VBP;如果屏幕底部出现异常,优先增加 VFP。每次调整以 1~2 行为步进,避免大幅改动导致帧率偏移。