工作需要设计HDMI1.4/2.0 IP,支持4K视频的需求。因此,近期对HDMI的相关SPEC进行了阅读,在这里进行总结,记录个人的知识成长的过程。

本文将从一下7个方面,讲述自己对HDMI 1.4b spec相关内容的理解。因为,工作需求是只需要支持4K视频的接受和传输,不涉及音频,所以略去了HDMI中Audio部分的内容。

1, Overview

2, Signaling and Encoding

3, Video

4, Control and Configuration

5, Compatibility with DVI

6, EDID and E-EDID

7. HDCP

1. Overview

图 1 HDMI Block Diagram

首先,是对HDMI的整体结构的一个介绍。

如图1所示是HDMI的Block Diagram, 主要分为5个部分。

第一个部分是视频/音频数据,控制信息,参考时钟信息的传输。从图1可以看到,根据数据流,Video[7:0],Audio[3:0],Control[1:0]进入HDMI Transmitter,经过DC平衡重编码后,Video, Audio, Control信息分时复用3对TMDS Channel0 - TMDS Channel2的差分信号对传输给外部,在图中是直接给了HDMI Receiver, 这里要注意的是进入HDMI Transmitter的Video,Audio,Control的数据位宽是固定的,即Video位宽为8,Audio位宽为4, Control位宽为2。这里的数据位宽要注意和系统中的像素个数数据位宽(每个时钟的像素数位宽),和单像素数据深度位宽(像素深度 - Color Depth)区分。就是不论像素数据位宽如何变,Video位宽时钟为8,后续会看到,会将不同的像素数据位宽以8 bit为单位进行分组打包传输。这个点很重要的原因是,因为本人也是第一次做HDMI设计,在做系统的带宽平衡分析时,产生了困惑。 TMDS Clock Channel是将HDMI Transmitter中的Pixel clock进行了差分后输出给HDMI Receiver作为参考时钟。这里的Pixel clock的时钟和TMDS Data channel0 - TMDS Data channel2的时钟频率值不同,如果是上下沿触发就是差了5倍,如果是单沿就是差了10倍。

第二个部分 Display Data Channel(DDC)。该总线类型本质是IIC总线,目的是在HPD信号线,显示有HDMI Transmitter连接了HDMI Receiver后,通知HDMI Transmitter去读取HDMI Receiver中的EDID(128Byte)或者E-EDID(256 Byte),里面含有HDMI Reciver所支持的显示的分辨率,厂商等信息,以便HDMI Transmitter能够发送HDMI Reciver支持的视频编码格式,以及显示分辨率等。当然,在设计测试过程中,发现市面上的HDMI Transmitter,例如视频盒子等,并不是都会支持DDC通道,或者某些生产的HDMI Transmitter在设置输出格式后,不会理会HDMI Receiver是否支持。

第三个部分 CEC:该通道是可以选择实现的提供高层次控制功能的。例如如果有一个显示屏和一个播放盒子,那么可能会下意识的认为需要两个遥控器来分别进行控制,但是因为有了CEC通道,便可只需要一个遥控器,就能实现两个设备的控制了。

第四个部分 HEAC:该通道从SPEC上的介绍来看,说的是,在连接的设备和音频之间提供以太网兼容的数据网络。因为,工作需求没有涉及,所以并没有细看,这里就没有详细讲解了。

第五个部分 HPD: 全称为Hot Plug detected,就是热插拔信号了。标识是否HDMI Transmitter和HDMI Receiver连接好了。

2, Signaling and Encoding

关于Signaling and Encoding部分,个人认为应该算是HDMI的最核心的部分了。我将从一下4个方面进行介绍。

2.1 Overview

2.2 Control Period

2.3 Video Data Period

2.4 Data Island Period -- Vendor-Specific Info, AVI Info

2.1 Overview

图 2 Signaling and Encoding Diagram

HDMI Transmitter在进行数据编码的结构如图2的左侧所示。Pixel component(B,G,R)对应就是Video[7:0]; HSYNC,VSYNC,CTL0,CTL1,CTL2,CTL3对应的就是Control[1:0], Auxiliary Data对应的就是Audio[3:0],但是该通道不仅传递Audio,还是传递和视频信息相关的其他数据包,Audio数据包只是其中一种,因此,在图1中的Audio[3:0],更准确的说是Auxiliary[3:0]。在这里可以看到,在传递Auxiliary Data数据包时,3个编码模块,一个模块用于编码Packet Header的传输,另外两个模块用于编码Packet Body的传输。后续会详细进行说明。

我们知道,HDMI TMDS Link只有3对TMDS数据差分对,因此Pixel Data, Auxiliary Data, Control Data,这三种数据的传输是采用了分时传输的模式。如图2所示中的时序图,是一个720x480的时序,浅灰色的是传输Control Data的阶段,称为Control Period,深蓝色的是传输Auxiliary Data的阶段,称为Data Island Period, 深灰色的是传输有效Pixel data的阶段,称为Data Period。因此,这里我们知道了HDMI传输一帧数据,由三个period组成,分为Control Period, Data Island Period, Data Period。这里从图中也可以看出,在两个非Control Period中一定有一个Control Period.

从图2的最右边的表格,我们可以看到,对于Video Data Period,传输的数据有两种,一种是Video Pixels,也就是实际像素数据,DC编码方式采用Video Data Coding,将 8bits 数据转换成10bits数据。另一种就是Guard Band,保护带数据,用于同步的,采用固定的10 bit patterm。对于Data Island Period,传输的数据有两种,一种是Packet Data(Auxiliary Data和HSYNC,VSYNC),这里的HSYNC,VSYNC其实就是Control Period中的HSYNC,VSYNC。采用TERC 4 Coding, 将4 bits数据转换成10bits数据传输,也是做一个DC平衡。另一种是Guard Band,同样是Fixed 10 bit patterm,和Video Data Period中的Guard值是不同的。Control Period传输的数据就是Control data(Preamble,HSYNC,VSYNC),Preamble就是前导码,用来表示该Control Period后跟着的是Video Data Period还是Data Island Period,也是一种同步码。

2.2 Control Period

图 3 Control Period Info

如图3所示,是Control Period关于Data Period Type的Preambles编码,各TMDS Channel对应的CTLx输入 以及Control Period Encoding值。{CTL0,CTL1,CTL2,CTL3} = 4'b1000时,Preambles为Video Data period的;{CTL0,CTL1,CTL2,CTL3}=4'b1010时,Preambles为Data Island Period的。这里有个注意点是Control Period会发送连续8个字符长的Preambles。

这里要注意的时,我们要知道,0-1或者1-0的转换次数被HDMI Receiver的decoder用来进行边界同步。在Video Data Period和Data Island Period中编码传输的数据的0-1或1-0的转换次数是小于等于5次的,而在Control Period中的转换次数则是大于等于7次的。依靠跳变次数,HDMI Receiver便能区分Control Period什么时候结束,后续的Video Data Period和Data Island Period什么时候开始。同时,之前我们说过了,在两个非Control Period中间,一定会有一个Control Period的规定,这个规定就要求了不会出现Video Data Period和Data Island Period连续出现的情况了。

2.3 Video Data Period

图4 Video Data Period Info

图4 显示的是Video Data Period的编码方式,解码方式以及在Video Data Period中的Leading Guard编码值。首线,当一个Control Period结束后,后续的如果是Video Data Period,那么HDMI Transmitter会先用如图4中的Video Leading Guard Band Encoding,传输2个字符长度的Leading Guard Band,然后再开始传输Pixel Data编码数据,DC编码使用如图4左侧的编码方式进行8bits 到10bits的DC平衡后,在TMDS上串行传输。图4右侧的解码方式则是与图4左侧的编码方式相对应即可。

2.4 Data Island Period

图5 Data Island Period Info

图5是Data Island Period中的,Leading and Trailing Guard Band的编码以及TERC4数据编码.

与Video Data Period不同的是,Data Island Period中,既有Leading Guard Band也有Trailing Guard Band,相同是,在发送Guard Band的时,都会发送连续2个字符长度。这里要注意的是,对于TMDS Channel0的Leading and Trailing Guard Band,是对0xC,0xD,0xE,0xF,进行如图5右侧所示的TERC4编码后的数据。

图6 Data Island Period Structure

图6所示是,Data Island Period中,Auxiliary Data是怎么组成一个Packet的,一个Packet分成了4 Bytes 的Header和32 Bytes的Body。如图6左侧所示,我们知道3个channel0-2,输入的Auxiliary Data位宽都为4。对于Channel0,其最低两位是HSYNC,VSYNC,第三位用于独立传输packet header数据,就是32 bits(4 Bytes),第四位则没有任何作用,对于Channel1和Channel2,则是按如图所示的方式进行交替组合,形成4个block,组成32 Bytes 的Packet Body,每个block都有一个Byte的parity bits,因此Packet Body的有效数据为28个Bytes。对于Packet Header,其格式如图6右上角所示,一个Byte表示Type,两个Byte为Paket-specific data,和Type相关。对于Packet Body,其格式与Packet Header中的Type相关。在设计过中,我在图中标记出的General Control, Vendor-Specific InfoFrame, AVI InfoFrame,我认为是很关键的,General Control主要和3D 视频格式相关,里面会传递3D Structure相关的信息,而Vendor-Specific InfoFrame和AVI InfoFrame则有着更丰富的附加视频格式信息,后面会进行详细介绍。

图7 TMDS Periods and Encoding

图7所示为TMDS channels传输各Periods的时序图,该图以Control Period -> Data Island Period -> Control Period -> Video Data Period顺序传输。从图可以看到,首先,传递Control Period结束时,会连续传输8个字符长的Preamble,指明后续的Period为Data Island Period;然后,在Data Island Period传输实际有效数据是,会先传输连续2个字符长的Leading Guard Band,接着传输32个字符长的Packet,这里要注意一个Packet大小统一为32字符长,在一个Data Island Period可以传输多个Packet,但是是有上限的。上限的大小我忘了,具体值,可以参考HDMI 1.4b SPEC。紧接着,在Data Island Period结束时,将连续传输2个字符长的Trailing Guard Band用于同步。之后,Control Period开始,在该Control Period结束时,将连续传输8个字符长的Preamble,表示后续Period是Video Data Period,在Video Data Period开始时,将连续传输2个字符长的Leading Guard Band,然后传输Active Video Pixels。

4, Control and Configuration

关于HDMI 的Control and Configuration,主要是关于在Control Period中发送的各种类型的Packet。具体的可以参考HDMI 1.4b SPEC。

5, Compatibility with DVI

我们知道HDMI是DVI的发展,因此,HDMI是需要兼容DVI 1.0的。因此,对于涉及的HDMI Transmitter和HDMI Receiver有着对DVI 1.0的要求。

5.1  Requirements

对于HDMI Transmiter(1)Video pixel要用RGB编码 (2)在Video Data Period中没有Video Guard Bands的传输 (3) 不传输Data Islands。

对于HDMI Receiver (1) 只使用RGB编码模式进行解码 (2) 在Video Data Period中没有Video Guard Bands的传输 (3) 没有Data Islands传输。

因为对DVI的兼容,因此,HDMI设备在启动时,首先会以兼容DVI的视频格式进行传输,在读取EDID/E-EDID后,传输满足HDMI传输格式的视频格式。再一次注意,市面上不是所有的HDMI Transmitter都会读取EDID/E-EDID,发送符合HDMI Receiver的视频格式。这是一个小坑。对于EDID/E-EDID,HDCP的介绍将分成另外的独立篇章来介绍。

HDMI设计1--HDMI 1.4b SPEC的阅读个人总结相关推荐

  1. HDMI设计3--HDMI 1.4/2.0 Transmitter Subsystem IP

    Reference: https://china.xilinx.com/content/dam/xilinx/support/documentation/ip_documentation/v_hdmi ...

  2. HDMI设计2----EDID and E-EDID

    1,EDID是什么?有什么用? 图1 应用场景 如图1所示的应用场景,PC将视频信号发送 到我们的设备上,经过一系列的传输和切换,设备将视频信号发送到显示器或者投影机上,也就是说,我们的设备位于PC和 ...

  3. AG7110/AG7111与AG7210方案设计选型方法|AG7110与AG7210设计要求和设计方法|HDMI视频切换器方法全解

    AG7111-MAL芯片是数字视频接口(DVI)或高清多媒体接口(HDMI)或DisplayPort双模开关,最多可将3个DisplayPort或DVI或HDMI端口切换到单个显示接收器设备.每个通道 ...

  4. HDMI切换器HDMI 延长放大器AG7111|AG7210|A7120|AG7220|AG7231

    HDMI Switch /KVM controller/cable ReDriver HDMI切换器 HDMI KVM控制器 HDMI 线缆延长放大器方案全解 AG7111|AG7210|AG7120 ...

  5. 关于TC358749XBG支持HDMI转MIPI,HDMI转MIPI CSI,HDMI in,HDMI RX相关问题

    你们好,目前对你们设计的产品是不是为没有HDMI IN或HDMI RX(或HDMI 转mipi csi)功能发愁其实不用怕,东芝TC358749XBG或TC358743XBG可以帮你们完成该功能.  ...

  6. Linux驱动学习--HDMI开发(二)HDMI驱动源码分析(RK平台)

    目录 一.引言 二.驱动框架 ------> dts节点 ------> HDMI DDC 驱动 ------> HDMI HDCP驱动 ------> HDMI CEC驱动 ...

  7. 光纤HDMI线比HDMI高清线好,你知道好在哪里吗?

    我们看到很多高清线的内芯材质经常是铜线,很少有用光纤做为线芯的.HDMI铜芯线采用铜,都会出现一个问题,长距离传输时达到10米以上,就会出现一定的损耗.当你需要较长距离的信号传输时,你就能体会到光纤作 ...

  8. android HDMI (一):HDMI基础篇

    关键词:android 4.0 HDMI 平台信息: 内核:linux3.0 系统:android4.0.3 平台:S5PV310(samsung exynos 4210) 作者:xubin34171 ...

  9. HDMI中继器,HDMI延长器支持更远音视频信号的传输

    朗强HDMI中继器(HDMI RP repeater)是最简单的网络互连设备,主要完成物理层的功能,负责在两个节点的物理层上按位传递信息,完成信号的复制.调整和放大功能,以此来HDMI延长器网络的长度 ...

最新文章

  1. 南大计算机考研录取,南京大学拟录取名单公示,初试最高446分,推免占比竟高达75%...
  2. ArcEngine中实现对符号的预览图输出
  3. 时时获得高德地图坐标 http://lbs.amap.com/console/show/picker
  4. 补码,反码,原码的范围总结
  5. 浅析toString与valueOf
  6. bmob php修改数据,使用Bmob SDK实时数据功能的一次经历
  7. DLL导出类避免地狱问题的完美解决方案
  8. 用C/C++实现SMC动态代码加密技术 .
  9. AD7124读写驱动
  10. 安装卸载Windows服务方法(2种方法)
  11. 冰点还原精灵手工强制删除方法
  12. 如何使用visio画出思维导图
  13. STM32 Bootloader开发记录 3 固件签名校验
  14. js 流文件下载zip压缩包
  15. 【无标题】AtCoder Beginner Contest 2248 Puzzle on Graph
  16. 【子桓说】苏明哲该如何摆脱面子对人生的消极影响?
  17. Java练习题 类 编写一个程序,使用复数类Complex验证两个复数 1+2i 和3+4i 相加产生一个新的复数 4+6i 。
  18. Callable 接口实现java 的多线程
  19. 矛与盾的较量(2)——CRC原理篇
  20. 不健康的细节-洗衣粉

热门文章

  1. JAVA 协程Quasar初探
  2. 美国ZIPnbsp;Codenbsp;一览表
  3. 解决CSDN markdown编辑器插入图片去除水印
  4. line-height详解
  5. 计算机的基础配置,教你认知电脑基本配置
  6. 建立oracle数据库链接,Oracle数据库创建数据库连接(DBLink)详细讲解
  7. spss数据处理--数据检查
  8. 迷宫生成与路径规划算法-Python3.8-附Github代码
  9. 企业微信社群该如何引流
  10. 推荐系统(十一) 2021-2022年工业界推荐算法实践经验汇总