-
1 红色视频信号 (Red, 75 ohm, 0.7 V p-p)2 绿色视频信号 (Green, 75 ohm, 0.7 V p-p)3 蓝色视频信号 (Blue, 75 ohm, 0.7 V p-p)4 显示器标识信号#2 (Monitor ID Bit 2)5 地线 (Gnd)
根据上面的定义,可以看出VGA其实就是将我们平常的3基色数据放到了三根模拟信号线中传输。但是我以前错误地认为水平和垂直同步信号是必须的,但是在这次硬件设计的时候发现,一个TI的公板上的VGA只有3基色信号和地,并且在软件调试的时候可以正常的让液晶显示器显示高清画面,所以上网搜索了一下,才发现了VGA的多种同步方式。
VGA接口根据同步信号的不同可分为:
- 3线同步(绿同步)
- 4线同步(3基色信号+复合同步信号)
- 5线同步(3基色信号+场行同步信号)
首先我先找到了网上较为详细的一篇英文资料:VGA Signal information,大家可以先看看。其中讲述了绿同步的原理:其实就是在绿色模拟信号中复合了场行同步信号,下面我用真实的示波器输出解释3线同步(绿同步)信号的波形。
实验视频源:开发板输出的1080P-60帧/秒 VGA信号(绿同步),硬件上仅用杜邦线连接三基色信号和地到VGA接口:
为了方便观测,开发板输出彩条信号:
首先我们从总体的波形上观察:
从上面的线号波形上看,绿色信号和其他两个信号比不太一样,似乎上面罩这一层“雾”一样的。其实这层“雾”就是叠加在上面的场行同步信号。
从一场的信号中,我们可以和显示器上的颜色对应上(这也是我为什么用简单彩条信号的原因,有利于分析):
大家都知道,视频数据的场、行同步信号都是场、行的消隐期发生变化的,所以我们要研究场行同步信号就必须研究消隐期的波形。
下面先看行消隐波形:
- (场信号周期/行周期)-场消隐期的行数
- =(16.7mS/14.8uS)-45=1083
- (其中包含了测量误差,主要来源于场周期的测量)
- 4 显示器标识信号#2 (Monitor ID Bit 2)
- 11 显示器标识信号#0 (Monitor ID Bit 0) 可能作为彩色与黑白的标志(color=GND,Mono=NC)
- 12 显示器标识信号#1/SDA (Monitor ID Bit 1 or SDA)
- 15 显示器标识信号#3/SCL (Monitor ID Bit 3 or SCL)
- root@evm:~# i2cdetect 3
- WARNING! This program can confuse your I2C bus, cause data loss and worse!
- I will probe file /dev/i2c-3.
- I will probe address range 0x03-0x77.
- Continue? [Y/n]
- 0 1 2 3 4 5 6 7 8 9 a b c d e f
- 00: -- -- -- -- -- -- -- -- -- -- -- -- --
- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- 30: -- -- -- -- -- -- -- 37 -- -- -- -- -- -- -- --
- 40: -- -- -- -- -- -- -- -- -- 49 -- -- -- -- -- --
- 50: 50 51 52 53 54 55 56 57 -- 59 -- -- -- -- -- --
- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- 70: -- -- -- -- -- -- -- --
- root@evm:~# i2cdump 3 0x37
- No size specified (using byte-data access)
- WARNING! This program can confuse your I2C bus, cause data loss and worse!
- I will probe file /dev/i2c-3, address 0x37, mode byte
- Continue? [Y/n]
- 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
- 00: f4 33 1d bf 7f 31 27 1b 20 01 ff be fc f0 96 51 ?3???1'? ?.????Q
- 10: 10 dc bf 07 e4 ac 29 d1 5e 54 bb 24 b9 7e 8f de ??????)?^T?$?~??
- 20: 8b 8e 7b 5e 15 8e 1d 15 ac 91 bf 1f 95 d6 c3 61 ??{^???????????a
- 30: 26 31 d0 ed af 2f 66 5e fd ff 3d ef c9 fd 73 2e &1???/f^?.=???s.
- 40: b6 65 e9 37 8f cd 45 ef 97 4d 6c 73 3e db 3f 57 ?e?7??E??Mls>??W
- 50: f7 ad e1 74 5f 18 95 1f 77 d5 9d b9 35 b7 97 44 ???t_???w???5??D
- 60: ac d5 d2 75 4c bd 96 1a 65 b9 57 f7 6a 6a 6a 6a ???uL???e?W?jjjj
- 70: 6a 6a 6a 6a 6a 6a 6a 6a 6a 6a 79 79 79 79 79 79 jjjjjjjjjjyyyyyy
- 80: 79 79 81 81 81 81 82 83 84 85 7e 7f 80 72 74 75 yy????????~??rtu
- 90: 76 77 78 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 vwx\]^_`abcdefgh
- a0: 69 3d 90 91 93 95 96 97 98 99 9a 9b 9c 9d 9e 9f i=??????????????
- b0: a0 a1 60 62 63 64 65 66 67 68 3d d1 5e 54 bb 24 ??`bcdefgh=?^T?$
- c0: 7e de 8b 8e 7b 5e 15 8e 1d 15 ac 87 91 bb bf 1f ~???{^??????????
- d0: d6 c3 3d 61 26 31 d0 ed af 2f 5e fd ff 3d ef c9 ??=a&1???/^?.=??
- e0: fd fe 73 2e b6 65 e9 37 bd cd ef 97 b5 bf 6c 73 ??s.?e?7??????ls
- f0: 3e 67 db 3f 57 f7 ad e1 74 18 1f 77 d5 2c 9d 1f >g??W???t??w?,??
- root@evm:~# i2cdump 3 0x49
- No size specified (using byte-data access)
- WARNING! This program can confuse your I2C bus, cause data loss and worse!
- I will probe file /dev/i2c-3, address 0x49, mode byte
- Continue? [Y/n]
- 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
- 00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- 10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- 20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- 30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- 40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- 50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- 70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
- root@evm:~# i2cdump 3 0x50
- No size specified (using byte-data access)
- WARNING! This program can confuse your I2C bus, cause data loss and worse!
- I will probe file /dev/i2c-3, address 0x50, mode byte
- Continue? [Y/n]
- 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
- 00: 00 ff ff ff ff ff ff 00 1e 6d 41 44 f1 da 05 00 ........?mAD???.
- 10: 02 11 01 03 6a 22 1b 78 ea 2e e5 a4 57 4a 9c 25 ????j"?x?.??WJ?%
- 20: 11 50 54 a5 6b 80 31 4f 45 4f 61 4f 81 80 01 01 ?PT?k?1OEOaO????
- 30: 01 01 01 01 01 01 30 2a 00 98 51 00 2a 40 30 70 ??????0*.?Q.*@0p
- 40: 13 00 52 0e 11 00 00 1e 00 00 00 fd 00 38 4b 1e ?.R??..?...?.8K?
- 50: 53 0e 00 0a 20 20 20 20 20 20 00 00 00 fc 00 4c S?.? ...?.L
- 60: 31 37 31 39 53 0a 20 20 20 20 20 20 00 00 00 fc 1719S? ...?
- 70: 00 20 0a 20 20 20 20 20 20 20 20 20 20 20 00 66 . ? i2c i2c-3: sendbytes: NAK bailout.
- .f
- 80: XX i2c i2c-3: sendbytes: NAK bailout.
- XX i2c i2c-3: sendbytes: NAK bailout.
- ......
- 以下是24LC41A的芯片手册信息:
-
- B0, B1, and B2 are zeros for DDC Monitor Port.
- B0、B1和B2对于DDC监视器端都是0.
- B1 and B2 are don’t care bits for the Microcontroller Access Port,
- B1和B2对于微处理器访问端(也就是我们通过I2C接口访问的端口)是忽略的。(也就是他们0或1都是一样的)
- and B0 is used to select which of the two 256 word blocks of memory are to be accessed.
- B0使用于选择访问两个256字块中的一个。
-
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 00 ff ff ff ff ff ff 00 1e 6d 41 44 f1 da 05 00 ........?mAD???.
10: 02 11 01 03 6a 22 1b 78 ea 2e e5 a4 57 4a 9c 25 ????j"?x?.??WJ?%
20: 11 50 54 a5 6b 80 31 4f 45 4f 61 4f 81 80 01 01 ?PT?k?1OEOaO????
30: 01 01 01 01 01 01 30 2a 00 98 51 00 2a 40 30 70 ??????0*.?Q.*@0p
40: 13 00 52 0e 11 00 00 1e 00 00 00 fd 00 38 4b 1e ?.R??..?...?.8K?
50: 53 0e 00 0a 20 20 20 20 20 20 00 00 00 fc 00 4c S?.? ...?.L
60: 31 37 31 39 53 0a 20 20 20 20 20 20 00 00 00 fc 1719S? ...?
70: 00 20 0a 20 20 20 20 20 20 20 20 20 20 20 00 66 . ?位元组序列
00-19: 标头资讯
00–07: 标头资讯"00h FFh FFh FFh FFh FFh FFh 00h"
08–09: 制造商ID。这个识别码是经由微软来分配。
"00001=A”; “00010=B”; ... “11010=Z”。第7位元(位址08h) 是0, 第一个字元(字母)是位于位元6 → 2 (位址08h), 第二个字元(字母)是位于位元1和0 (位址08h)和位元7 → 5(位址09h),第三个字元(字母)是位于位元4 → 0 (位址09h)。1e 6d ---- 0001 1110 0110 1101 GSM
10–11: 生产ID码(储存方式是LSB开始)。由制造商分配。41 44
12–15: 32位元序号。非必需格式。通常储存由LSB 优先。为了去维持和之前需求的相容性,假如一个ASCII序号在详细时脉部分被提供,这个栏位应该设定至少一个位元组不是零。f1 da 05 00
16: 制造周。这个由制造商改变。法一是去计算一月的1-7 当做第一周,一月8-15 当做第二周并且以此类推。一些计算是以星期几(星期日-星期六)为基础。有效范围是1-54。02
17: 制造年份。加上1990才是确实的年份。11---2001
18: EDID 版本号码。"01h"
19: EDID 修订版号码。"03h" 01 03
20-24: 基本显示参数 6a 22 1b 78 ea
20: 影像输入定义
位元7: 0=类比, 1=数位
假如位元7 是数位:位元0: 1=相容DFP 1.x
假如位元7 是类比:位元6-5: 影像等级
00=0.7, 0.3,01=0.714, 0.286, 10=1, 0.4 11=0.7, 0bit 4: 白黑设定
bit 3: 分离同步
bit 2: 合成同步
bit 1: 绿色同步
bit 0: 锯齿垂直同步6a------01101010 类比 影像等级:0.7, 0 彩色 支持分离同步 不支持合成同步 支持绿同步 不支持锯齿垂直同步
21: 最大水平图形尺寸(单位为公分)。22
22: 最大垂直图形尺寸(单位为公分)。1b
23: 显示伽玛。除以100再加1才是真正的值。0x78 / 100 = 1.2 --> 2.2
24: 电源管理和支援的特征:
bit 7: 待命
bit 6: 暂停
bit 5: 活跃关闭/低电源
bit 4-3: 显示型态
00=黑白, 01=RGB 色彩, 10=非RGB 多色彩, 11=未定义
bit 2: 标准色彩空间
bit 1: 偏好时脉模式
bit 0: 预设GTF 支援ea------11101010 支持待命、暂停、活跃关闭/低电源,RGB 色彩 支持偏好时脉模式
25-34: 色度调节 2e e5 a4 57 4a 9c 25 11 50 54
25: 低有效位关于红色X1X0 (位元7-6), 红色Y1Y0 (位元5-4), 绿色X1X0 (位元3-2),绿色Y1Y0 (位元1-0)。
26: 低有效位关于蓝色X1X0 (位元7-6), 蓝色Y1Y0 (位元5-4), 白色X1X0 (位元3-2),白色Y1Y0 (位元1-0)。
27–34: 高有效位关于红色X9-2, 红色Y9-2, 绿色X9-2, 绿色Y9-2, 蓝色X9-2, 蓝色Y9-2, 白色X9-2, 白色Y9-2。
正确值是介于0.000和0.999,但编码值是介于000h和3FFh。
35: 建立时脉 I a5
位元7-0: 720×400@70 Hz, 720×400@88 Hz, 640×480@60 Hz, 640×480@67 Hz,640×480@72 Hz, 640×480@75 Hz, 800×600@56 Hz, 800×600@60 Hz
36: 建立时脉II 6b
位元7-0: 800×600@72 Hz, 800×600@75 Hz, 832×624@75 Hz, 1024×768@87 Hz (交错的),1024×768@60 Hz, 1024×768@70 Hz, 1024×768@75 Hz, 1280×1024@75 Hz
37: 制造商保留的时脉 80
00h 是无
位元7: 1152x870 @ 75 Hz (麦金塔II, 苹果)
38–53: 标准时脉识别。
第一个位元组
水平结果。加上31,再乘上8, 得到正确值。第二个位元组
位元7-6: 外观比例。正确的垂直结果依赖水平结果。
00=16:10, 01=4:3, 10=5:4, 11=16:9 (00=1:1 在v1.3之前)
位元5-0: 垂直频率。加上60 去得到正确的值。实例:31 4f ---(0x31+31)*8 = 640 4:3 75Hz
54–71: 详细时脉描述 1
54–55: 像素时脉(单位为10 kHz) 或0 (55 MSB 54 LSB) 30实例:2a -----> 0x2a30 = 10800*10KHz=108MHz
假如像素时脉并非无效:
56: 水平活跃(单位为像素)
57: 水平空白(单位为像素)
58: 水平活跃高(4 高位元)
水平空白高(4 低位元)
59: 垂直活跃(单位为线)
60: 垂直空白(单位为线)
61: 垂直活跃在高有效位(4 高位元)
垂直空白在高有效位(4 低位元)
62: 水平同步偏移量(单位为像素)
63: 水平同步脉冲宽度(单位为像素)
64: 垂直同步偏移量(单位为线) (4 高位元)
垂直同步脉冲宽度(单位为线) (4 低位元)
65: 高有效位关于水平同步偏移量(位元7-6)
高有效位关于水平同步脉冲宽度(位元5-4)
高有效位关于垂直同步偏移量(位元3-2)
高有效位关于垂直同步脉冲宽度(位元1-0)
66: 水平图像尺寸(单位为公厘)
67: 垂直图像尺寸(单位为公厘)
68: 高有效位关于水平图像尺寸(4 高位元)
高有效位关于垂直图像尺寸(4 低位元)
69: 水平边界线(单位为像素且只表示一边)
70: 垂直边界线(单位为线且只表示一边)
71: 交错与否(位元7)
立体与否(位元6-5) ("00" 表示否)
分离同步与否(位元4-3)
垂直同步正与否(位元2)
水平同步正与否(位元1)
立体模式(位元0) (若是6-5 是00 则没使用)
假如像素时脉是无效:
56: 0
57: 区块型态
FFh=监视器序号, FEh=ASCII 字串, FDh=监视器变动限制, FCh=监视器名称,
FBh=色彩点资料, FAh, 标准时脉资料, F9h=现在未定义, 0Fh=由制造商定义
58: 0
59–71: 区块内容描述符。
假如区块型态是FFh, FEh, 或FCh, 整个区域是字串。
假如区块型态是FDh:
59–63:
最小垂直频率, 最大垂直频率,
最小水平频率(单位为kHz), 最大水平频率(单位为kHz), 像素时脉 (单位为MHz (正确值需乘上10))
64–65: 第二GTF 触发器
假如编码值是000A, 位元组59-63 是使用。假如编码值是0200,位元组67–71 是使用。
66: 开始水平频率(单位为kHz)。乘上2得到实际值。
67: C。除以2 得到实际值。
68-69: M (以LSB优先储存)。
70: K
71: J。除以2 得到实际值。
假如区块型态是FBh:
59: W 索引0。假如设定成0, 位元组60-63 是没使用。假如设定成1, 61–63 是分配到白点索引#1
64: W 索引1。假如设定成0, 位元组65-68 是没使用。假如设定成2, 65–68 是分配到白点索引#2
白点索引结构:
第一个位元
位元3-2: 低有效位关于白X (位元3-2), 白Y (位元1-0)
第二到第三位元组: 高有效位关于白X, 白Y。
第四位元组: 伽玛。除以100, 再加上1得到实际值。
解码白X 和白Y, 看位元组25-34。
假如区块型态是FAh:
59–70: 标准时脉识别。2 位元组对于每一个纪录。
关于结构细节, 看位元组38-53。
72–89: 详细时脉描述2 或监视器描述符
90–107: 详细时脉描述3 或监视器描述符
108–125: 详细时脉描述4 或监视器描述符
126: 额外的旗标。额外的数值采用这个区块。在EDID 1.3之前, 这是被忽略的, 并且应该被设成0。 0x00
127: 校验和- 这个位元组应该被程式化使得所有128 位元组的加总等于00h. 0x66