第4章 视频时序基础:行同步、场同步、消隐区、有效像素区
做显示接口这些年,被问得最多的一个问题就是:“为什么我配置好了分辨率刷新率,屏幕就是花屏?”
我刚开始做eDP调试时也栽过跟头——明明像素时钟算对了,图像却像拉窗帘一样斜着抖。后来才发现,是行同步和场同步的时序位置搞反了。说白了,视频显示就像排兵布阵,每一行、每一场都有严格的“出发时间”和“休息区间”。
今天咱们就把这四个核心概念掰开揉碎:行同步、场同步、消隐区、有效像素区。你理解透了,再看spec里的参数表,就跟看菜单一样简单。
4.1 为什么需要视频时序?
想象一下老式CRT显示器,电子枪从左到右逐行扫描,扫完一行再换行,扫完一帧再换场。现代数字显示虽然不走电子枪了,但传递数据的节奏依然沿用这个“扫描”模型。
每一帧图像不是一股脑儿塞给屏幕的,而是按行打包,行与行之间要留出空隙让屏幕准备下一行。同样,帧与帧之间也要留出空隙。这些空隙就是消隐区。同步信号(HSYNC/VSYNC)告诉屏幕“我要开始新一行/新一帧了”。
核心记忆:有效像素区里放真正的画面数据,消隐区里放同步信号和辅助数据(比如音频、加密信息)。没有消隐区,像素流就会错位。
4.2 行同步与水平消隐
先看一行。图1里我最爱画的就是这个:
每一行从行同步脉冲(HSYNC)开始,然后是一小段“后沿”(Back Porch),接着是有效像素区(H Active),最后是“前沿”(Front Porch)。前沿和后沿加上同步脉冲,统称为水平消隐区。
- HSYNC(行同步脉冲):拉低(或拉高)几个像素时钟,告诉屏幕“新一行来了”。
- 后沿(H Back Porch):同步脉冲结束后,留一点时间让像素时钟稳定。
- 有效像素区(H Active):真正传输这一行的像素数据。
- 前沿(H Front Porch):有效像素结束后到下一个HSYNC之前,留出的空闲时间。
记不记得我在项目中调试过一个720p的屏?量出来的HSYNC总比spec短了2个像素时钟。结果就是最右边有两列像素总显示上一行的内容。嗯,这就是前沿留太窄导致的。
| 参数 | 典型值(像素时钟) | 说明 |
|---|---|---|
| H Active | 1920 | 一行有效像素数 |
| H Front Porch | 88 | 前沿 |
| H Sync Width | 44 | 同步脉冲宽度 |
| H Back Porch | 148 | 后沿 |
| H Total | 2200 | H Active + H Front Porch + H Sync + H Back Porch |
4.3 场同步与垂直消隐
行看完了,再说场(帧)。垂直方向的时序和水平很类似,只是单位从“像素时钟”变成了“行数”。
- VSYNC(场同步脉冲):几行宽的低电平(或高电平)信号,表示新一帧开始。
- 垂直后沿(V Back Porch):VSYNC结束后的空闲行数。
- 有效行区(V Active):真正显示图像的行数。
- 垂直前沿(V Front Porch):有效行结束后的空闲行数。
我曾经被一个1080p@60Hz的时序坑过——垂直前沿设成了0行。结果帧同步偶尔会丢一行,画面底部闪白线。你看,时序这东西就是差一个像素都不行。
4.4 有效像素区与消隐区的关系
有效像素区和消隐区合起来就是一行(或一帧)的总长度。这个总长度直接决定了像素时钟频率。
公式大家都知道:
Pixel_Clock = H_Total × V_Total × Refresh_Rate
但真正调试时,我发现很多人搞混“有效”和“总”的概念。比如你设分辨率1920×1080,但H_Total如果不包括消隐区,算出来的时钟就偏小,导致实际带宽不够。eDP的链路速率就是按这个Pixel_Clock来选的,算错了整条链路都会崩。
4.5 实践中的时序参数
做eDP产品时,你拿到手的往往是显示屏的datasheet,里面会给出H_Total、V_Total等具体数字。你需要将这些值填入Sink控制的寄存器里,或者反过来在Source端配置。
我习惯先画一张时序图,把HSYNC、VSYNC、消隐区都标清楚。下面这个流程图就是帮新手建立整体概念的:
上图里,我特意把水平一行的内部结构抽出来放在中间。画这种图有个好处——你拿示波器抓HSYNC和Data时,能立刻对应上HBP、有效像素、HFP的位置,不会慌。
最后,我想说,视频时序不是死背参数表。你动手调一次,花屏一次,再拿着示波器找原因,忘都忘不了。
行同步和场同步就像一把尺,消隐区就是刻度之间的空白。没有空白你量不准,没有同步你找不到起点。
掌握好这些,再往下看eDP的符号映射和链路训练,你会发现底层逻辑都是相通的。