部分资料来源:https://www.cnblogs.com/spartan/archive/2011/08/16/2140546.html
最近要用ZYNQ开发版的HDMI做一些计算机视觉算法的显示功能,看着硬件管脚和例程只能发呆,于是决心去弄清楚HDMI的工作原理,查找了很多资料,都是碎片化的,不易懂。于是我加以整理,再以初学者(没有接触过任何视频传输接口)的角度在这篇博客里阐述。
说起HDMI,就要先说起VGA了。为什么要先说VGA,因为VGA的原理容易理解。在理解VGA后,HDMI理解起来就也变得容易多了。HDMI原理会在我的下一篇博客详细介绍。VGA就是如今很多显示器上连接主机的信号传输接口。有三排15个引脚。如下图所示
标号 | 名称 | 描述 | 标号 | 名称 | 描述 |
1 | RED | 视频红色 分量 | 9 | KEY | 保留 |
2 | GREEN | 视频绿色 分量 | 10 | SGND | 同步信号地 |
3 | BLUE | 视频蓝色 分量 | 11 | ID0 | 显示器ID 第0位 |
4 | ID2 | 显示器ID 第2位 | 12 | ID1 | 显示器ID 第1位 |
5 | GND | 地 | 13 | HSYNC | 行同步信号 |
6 | RGND | 红色地 | 14 | VSYNC | 场同步信号 |
7 | GGND | 绿色地 | 15 | ID3 | 显示器ID 第3位 |
8 | BGND | 蓝色地 |
|
|
|
VGA的显示效果取决于RGB三个分量的位数,最高24位(即RGB各8位),16位,12位也都存在。
那么我们传输显示数据是不是把每个像素点对应的三通道的数值传输到显示屏就行了?这是当然。那么对于分辨率800X600@60Hz,我们的传输的时钟频率是不是800*600*60=28.8MHz?答案是:否。为什么呢?我们先了解一下显示的原理。
显示器的扫描方式:逐行扫描是扫描从屏幕左上角一点开始,从左像右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行同步;当扫描完所有的行,形成一帧,用场同步信号进行场同步,并使扫描回到屏幕左上方,同时进行场消隐,开始下一帧。
从扫描方式中我们知道,行同步,场同步以及消隐区的概念。回到时钟上来。以行扫描为例子,在一行中由于需要行消隐,所以要求一定的时钟周期用于行消隐,当然也有行同步信号。那他们的时序是怎样的?
上图中,要注意一点,就是a同步脉冲,b显示后沿,c显示时序段,d显示后沿。这四段组成了一个完整的时序。图中最后的同步脉冲a是下一个时序的。所以我们的消隐间隔就是上一个时序的显示前沿+本时序的同步脉冲+本时序的显示后沿。同步脉冲是包含在消音间隔中的。而显示时序段,就是我们上面提到的,用来传输像素点的时钟周期。
HSYNC: 行同步信号 VSYNC: 场同步信号
Hor Sync: 行同步脉冲 Vcr Sync: 场同步脉冲
H Back Proch: 行显示后沿 V Back Proch: 场显示后沿
H Front Proch: 行显示前沿 V Front Proch: 场显示前沿
Hor“Active”Video:行视频段 Ver“Active”Video:场视频段
上面参数与之前的行时序和场时序图中的a同步脉冲,b显示后沿,c显示时序段,d显示后沿,相对应。那么图中的三个矩形是什么呢?
最大的矩形就是显示区加上消隐区(由每个行消隐段和每个场消隐段组成)。消隐段的组成在上面已经讲过。第二个矩形其实就是显示区。那么第3 个矩形中有4 个参数H Left Border、H Right Border、V Top Border 和V Bottom Border,在不同分辨率中这4 个参数不同,在800x600 及其以上的分辨率中这4 个参数为0。(第三个矩形的参数,老实说我在实际中,还没有遇到过,不知道具体作用)。
VGA 的行时序是以像素为单位的,场时序是以行为单位的。VGA时序对同步时间、显示后沿时间、视频有效时间和显示前沿时间有特定要求,常用VGA 分辨率时序参数如下表所示。(a行同步脉冲,b行显示后沿,c行显示时序段,d行显示后沿,e行总时序,场时序类同)
其中800x600以上分辨率的时钟频率 = 行总时序X场总时序X刷新频率,800x600和640X480按照以上计算有偏差(可能这个偏差就是之前提到的第二个矩形的Border参数)。