时序基础理论:像素时钟、同步信号与消隐区间

做显示驱动,说白了就是跟时间打交道。你想想看,屏幕上几百万个像素点,每个点什么时候亮、亮什么颜色,都得精确到纳秒级。这一章我们就把最核心的几个时序概念掰开揉碎了讲清楚。

像素时钟(PCLK)—— 显示时序的节拍器

像素时钟,英文叫 Pixel Clock,简称 PCLK。它是整个显示时序系统的心脏。每来一个 PCLK 周期,驱动芯片就要往屏幕上送一个像素点的数据。

那 PCLK 的频率怎么算?公式其实很简单:

PCLK = (H_total) × (V_total) × 帧率

这里的 H_total 和 V_total,不是屏幕的分辨率,而是包含消隐区间的完整行和完整帧。我刚开始做设计时犯过一个低级错误——直接用分辨率算 PCLK,结果画面一直闪。后来才意识到,消隐区间的时间也得算进去。

举个例子: 1080p 分辨率(1920×1080),刷新率 60Hz,典型时序参数:

  • H_total = 2200(1920 有效 + 280 行消隐)
  • V_total = 1125(1080 有效 + 45 场消隐)
  • PCLK = 2200 × 1125 × 60 ≈ 148.5 MHz

嗯,这里要注意:PCLK 不是你想设多少就设多少。它受限于三个因素:

  • 屏幕分辨率——像素越多,PCLK 越高
  • 刷新率——帧率越高,PCLK 越高
  • 消隐区间大小——这个很多人会忽略

我个人习惯在设计初期先按 VESA 标准查表,拿到 H_total 和 V_total 再算 PCLK。这样不容易漏掉消隐区间。

行同步(Hsync)与场同步(Vsync)—— 画面的坐标系统

行同步和场同步,是显示驱动里最基础的两个控制信号。它们的作用,我打个比方你就明白了:

  • Hsync(行同步)——告诉屏幕「新的一行开始了」
  • Vsync(场同步)——告诉屏幕「新的一帧开始了」

每个同步信号都有四个关键参数,我习惯用一张表来记:

参数 含义 典型值(1080p@60Hz)
Sync Width 同步脉冲宽度(多少个 PCLK) H: 44, V: 5
Back Porch 同步脉冲结束到有效数据开始 H: 148, V: 36
Active 有效数据区间 H: 1920, V: 1080
Front Porch 有效数据结束到下一个同步脉冲 H: 88, V: 4

我曾经在一个项目中,把 Back Porch 和 Front Porch 搞反了。结果画面整体偏移了十几个像素,查了两天才找到原因。从那以后,我每次写时序参数都会画个时序图对照着看。

Blanking 区间详解—— 被忽略的「空档期」

Blanking 区间,中文叫消隐区间。很多人觉得它只是「空档期」,没什么用。其实不然。

消隐区间分为两部分:

  • 行消隐(H-Blanking)—— 每行有效像素结束到下一行开始之间的时间
  • 场消隐(V-Blanking)—— 每帧有效行结束到下一帧开始之间的时间

为什么需要消隐区间?三个原因:

  1. CRT 时代的遗留——电子枪需要时间回扫
  2. 数据传输缓冲——给 FIFO 留出读写切换的时间
  3. 控制信号插入——很多协议在消隐区传辅助数据

避坑指南: 我曾经在一个高刷项目中,为了压 PCLK 频率,把消隐区间压缩得很小。结果画面出现撕裂,因为 FIFO 来不及刷新。后来我留了至少 10% 的消隐余量,问题就解决了。

帧率与刷新率的关系—— 一字之差,天壤之别

这两个概念经常被混用,但它们的含义完全不同:

概念 定义 单位
帧率(Frame Rate) 显示源每秒送出的完整图像帧数 fps
刷新率(Refresh Rate) 显示器每秒刷新画面的次数 Hz

在理想情况下,帧率等于刷新率。但实际项目中,两者可能不匹配。比如:

  • 视频源是 24fps 的电影,显示器是 60Hz 刷新
  • 游戏帧率波动,显示器刷新率固定

不匹配会怎样?画面撕裂、卡顿、抖动。这就是为什么现在有 VRR(可变刷新率)技术——让显示器跟着帧率走。

重要提醒: 在设计驱动芯片时,PCLK 的计算必须基于刷新率,而不是帧率。因为显示器硬件是按刷新率工作的。帧率不匹配的问题,交给上层协议去处理。

本章知识体系

下面这张图把本章的核心概念串起来了,你可以对照着复习:

显示时序核心知识体系 显示时序 像素时钟 PCLK 同步信号 消隐区间 Blanking H_total × V_total × 刷新率 Hsync Vsync H-Blanking V-Blanking 核心公式 PCLK = H_total × V_total × 刷新率 H_total = H_Active + H_Blanking

这张图把本章的三个核心概念——PCLK、同步信号、消隐区间——以及它们之间的关系都画出来了。你写代码或者调时序的时候,可以拿这张图当参考。

小结

这一章我们讲了三个核心概念:

  • 像素时钟—— 显示时序的节拍器,计算时别忘了消隐区间
  • 行同步与场同步—— 画面的坐标系统,四个参数一个都不能错
  • 消隐区间—— 不是空档期,是留给缓冲和控制的宝贵时间
  • 帧率与刷新率—— 概念不同,设计时以刷新率为准