HDMI协议介绍

news2024/11/16 15:36:58

HDMI全称(High Definition Multimedia Interface)高清多媒体接口,支持在单线缆上传输全数字高清视频和多声道音频。

HDMI基于TMDS协议传输,主要用于DVD, 机顶盒等音视频source到TV,显示器等sink设备的传输。HDMI向下兼容 DVI,但是 DVI(数字视频接口)只能用来传输视频,而不能同时传输音频,这是两者最主要的差别。

术语

HDMI:High Definition Multimedia Interface高清多媒体接口,传输音视频。

HDCP:High-bandwidth Digital Content Protection 版权保护相关的,通过IIC获取。

EDID:Extended Display Identification Data 扩展显示标识数据,包含有关显示器及其性能的参数,包括供应商信息、最大图像大小、颜色设置、厂商预设置、频率范围的限制以及显示器名和序列号的字符串等。

DDC:Display Data Channel 显示数据通道,其实就是IIC通道,用来获取EDID、HDCP密钥等内容。

HDP:Hot Plug Detect热插拔检测。

CEC:Consumer Electronics Control 用户电气控制,CEC可以控制从设备的一些状态,即遥控器功能。

TMDS:Transition Minimized Differential Signaling最小化传输差分信号,一种差分传输技术

HEAC:HDMI Ethernet and Audio Return Channel 以太网和音频返回,HEAC需要额外的phy才能支持。

Source:A device with an HDMI output

Sink:A device with an HDMI input

CTS:Compliance Test Specification

物理结构

HDMI有A、B、C、D、E五种引脚类型,目前常用的是Type A:

 1-9是TMDS data传输用到的引脚,共有三组;

10-12是TMDS clock传输用到的引脚,共有一组,TMDS clock就是pixel clock;

13是CEC引脚,一种消费电子兼容的传输协议;

14是保留引脚;

15,16是DDC的引脚,DDC是基于I2C协议传输,故引脚为SCL和SDA;

17是接地;

18是+5V power;

19是HPD引脚,用于热插拔检测

HDMI框图

HDMI 系统架构由Source端和Sink端组成:Source是指发送HDMI信号的一侧,Sink是指接收HDMI信号的一侧。

 HDMI信号四路差分信号组成,包括三路TMDS Data信号和一路TMDS Clock信号。TMDS信号不仅仅用于传输video信号,还传输audio和辅助信息。

HDMI 提供一个 DDC 通道用于在source端和sink端交换状态。

HDP用于热插拔检测,CEC是用户电气控制,一般用作遥控,HEAC以太网和音频返回。CEC和HEAC是HDMI可选协议。

HDMI传输

TMDS信号

TMDS 传输系统分为两个部分:发送端和接收端。TMDS 链路包括 3 个传输数据的通道和1个传输时钟信号的通道。

发送端对这些数据进行编码和并/串转换,再将数据分别分配到独立的传输通道发送出去。

接收端接收来自发送端的串行信号,对其进行解码和串/并转换,然后发送到显示器的控制端。

TMDS不仅仅是对video进行编码,还包括audio和控制信号:

  • 对于video周期采用的是video data encoding,将8bits数据转换成10bits数据
  • 对于control周期采用的是CTL encoding,将2bits数据转换成10bits数据
  • 对于DataIsland周期采用的是TERC4 encoding,将4bits数据转换成10bits数据

 

 

HDMI连接架构

HDMI传输由三组TMDS通道和一组TMDS clock通道组成,TMDS clock的运行频率是video信号的pixel频率,在每个TMDS 时钟通道周期,每个TMDS data通道都发送10bit数据。

channel0传输B数据和HSync、VSync
channel1传输G数据和CTL0、CTL1
channel2传输R数据和CTL2、CTL3

 

HDMI传输模式

HDMI的TMDS数据传输可以分为三个传输周期:

Control Period控制周期:主要用于控制接下来传输的是data island还是video data

Data Island Period数据岛周期:各种类型的包信息,包括音频数据包、辅助数据包、图像信息包等

Video Data Period视频数据周期:视频像素数据,HDMI可以传输RGB和YUV两种格式的像素数据

 

 

1、左边是Control period:传输有Hsync、Vsync与Preamble。占用1、2两个通道共4bit输入;channel 0传输HSYNC, VSYNC, channel1[1:0]和channel2[1:0] 传输Preamble,用来判断接下来输入的是Video Data还是Data Island。

2、中间是Data Island period:传输有Hsync、Vsync,以及两个Packet Header与Packet,占用三通道共12bit输入,Channel0[3:2]用于传输Data Island Header(包头),Channel1[3:0]与Channel2[3:0]用于传输Data Island Content(包内数据)

3、右边是Video Data period :视频信号经过编码生成三路TMDS数据通道,共24位视频流数据,输入到HDMI Tx中。24位像素的视频信号通过TMDS通道传输,将每通道8位信号转换为10位,在每个10位像素周期传送一个最小化的信号序列,视频信号将被调制为TMDS信号传送出去。

Control Period(preamble)

在数据岛或者视频数据传输周期之前,每一个TMDS通道包含2bit的控制数据,一共6位控制数据。

TMDS ChannelD0D1
0HSYNCVSYNC
1CTL0CTL1
2CTL2CTL3

每个TMDS通道使用了D1:D0共2bit,采用2bit到10bit的编码方式。在每个控制周期的最后阶段,CTL0、CTL1、CTL2、CTL3组成的文件头说明下一个周期是视频数据还是数据岛。

CTL0CTL1CTL2CTL3数据周期类型
1000video data
1010data island

Video Data Period

视频数据周期用来传输视频线的像素,每个视频数据周期以报文头为前导,在报文头之后,视频数据周期以两个字符开始,做为视频前导保护边界对于数据周期,没有末尾保护边界。

Data Island Period

数据岛用来携带音频辅助数据的报文。辅助数据包括Info frame和其他用于音视频信息描述的数据。

每个数据岛以2个字符长度的前导保护边界开始,并以2个字符宽度的末尾保护边界结束。

TMDS ChannelBitN传输内容
Channel0Bit0HSync
Bit1VSync
Bit2packet header
Channel1Bit3:0packet
Channel2Bit3:0packet

数据岛包的结构

包括一个报文头报文体(包含 4个子包)和相关的差错纠正位

每个子包含有56bit的数据和8bit的ECC校验位组成。子包 0 加上它的奇偶校验位构成 BCH 块 0,这个块映射到通道 1 和通道 2 的bit0。

同样地,BCH 块 1(子包 1 加上它的奇偶校验位)映射到通道 1 和通道 2 的bit1上。

对于包头即BCH block4映射到通道0的bit2,包括3个byte共24bit,以及8bit ECC。

 

报文头

报文头包含 24 个数据位,附加 8 位 BCH(32,24) ECC 校验,其中24bit的数据分为8bit的报文类型和16bit的报文。

报文类型表格如下:

空包

source端可以在任何时候使用空包。空包的字节是未定义的,其包内都是 0 值。HDMI sink端应该忽略空包的包头 HB1 和 HB2,以及空包体中的全部字节。

Audio 时钟重生成包ACR

包头中只有包类型,没有报文数据,Sink设备应该忽略HB1和HB2。

包体中包含N和CTS(cycle time stamp),在生成音频时钟的时候会用到这两个值。

 audio采样包

音频采样包携带 LPCM 和 IEC61937 压缩音频格式的数据。音频包包括 1 到 4 个音频采样。这些音频采样可能是不同的音频,也可能是同一音频的不同部分(比如 6 声道的 2 个声道数据)。

 

帧信息

CEA-861D 定义的所有的信息帧都可以在 HDMI 的信息帧中传输。

通用控制包

 包头只有包的类型,没有报文数据,Sink端应该忽略HB1、HB2。

包体中包括AVMUTE、CD、PP等信息。

 

AVMUTE 被用以source端减少TMDS时钟变化或者中断带来的负面影响,比如pop音和噪音。

CD(color depth)用于指示色深:

如果sink端不支持Deep Color模式,CD域应该都设置为零。

video

像素编码

HDMI1.4 支持三种pixel encoding:RGB4:4:4, YCbCr4:4:4, YCbCr4:2:2

HDMI2.0补充支持了YCbCr4:2:0

视频格式

HDMI1.4支持CEA-861-D,HDMI2.0支持到CEA-861-F

color depth

color depth支持像素24bit、30bit、36bit、48bit,其中24bit是必须支持的。

大于24bit的属于“Deep Color”,如果sink设备支持Deep color,36bit是必须要支持的;如果sink不支持deep color,source设备不应该发送deep color mode。

video控制信号

在Video Data周期HDMI不发送HSync和VSync信号,Data Island周期Channel0会发送编码后的HSync和VSync,Control阶段的Channel0也会发送HSync和VSync。

Pixel-repetition

原始像素速率低于25HMz时需要使用pixel repetition才能通过TMDS链路传输。通过字段PR0~PR3:Pixel Repetition Factor指示像素重复的使用。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/354917.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot学习笔记:SpringBoot集成JPA-01

文章目录概述JPA的优点在Springboot中集成步骤1.新建springboot项目步骤2.引入相关jar包,pom.xml文件如下:步骤3. 配置文件application.properties设置步骤4. 定义表的ORM对象类步骤5. 实现数据库操作接口(Dao)步骤6. 实现Controller测试概述 JPA是一种规范&#x…

PHP学习笔记(一谦四益)

前言 上一篇文章 PHP学习笔记(观隅反三)分享了数组的知识,这篇文章接着分享和数组相关的算法。 算法效率 算法效率分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称…

SpringSecurity认证

文章目录登陆校验流程依赖yaml实现建表、工具类、实体类加密器、AuthenticationManager登录逻辑登录过滤器、配置过滤器登出登陆校验流程 认证 登录: ​ ①自定义登录接口 ​ 调用ProviderManager的方法进行认证 如果认证通过生成token,根据userId把用…

国密SM2算法(JS加密,C#、Java解密)

常见的渗透测试会将网站登录时密码使用明文传输视为风险。推荐使用国密算法或者RSA算法对密码进行加密传输。 RSA加密(JS加密,C#、Java解密)请参考《RSA对称加密(JS加密,C#、Java解密)》​​​​​​ 本文…

数据的进制转换以及算术逻辑运算

1.数据的进制转化 进制的表示:二进制、十六进制,二进制符号位0b,一般表示为0b0011,十六进制符号位0x或H,可以表示为0x18F或18FR进制整数转十进制:位权展开法,用R进制数的每一位乘以R的n次方&am…

C++——二叉树排序树

文章目录1 二叉搜索树概念2 二叉搜索树操作与模拟实现2.1 二叉搜索树的查找非递归版本递归版本2.2 二叉搜索树的插入非递归版本递归版本2.3 二叉搜索树的删除非递归版本递归版本3 二叉搜索树的应用(K模型、KV模型)4 二叉搜索树的性能分析1 二叉搜索树概念…

Go语言设计与实现 -- 反射

Go的反射有哪些应用? IDE中代码的自动补全对象序列化fmt函数的相关实现ORM框架 什么情况下需要使用反射? 不能明确函数调用哪个接口,需要根据传入的参数在运行时决定。不能明确传入函数的参数类型,需要在运行时处理任意对象。 …

1.TCP、UDP区别、TCP/IP七层、四层模型、应用层协议(计网)

文章目录1.OSI 七层模型是什么?每一层的作用是什么?2.TCP/IP 四层模型是什么?每一层的作用是什么?应用层(Application layer)传输层(Transport layer)网络层(Network lay…

百度工程师带你探秘C++内存管理

一、概述 ptmalloc是开源GNU C Library(glibc)默认的内存管理器,当前大部分Linux服务端程序使用的是ptmalloc提供的malloc/free系列函数,而它在性能上远差于Meta的jemalloc和Google的tcmalloc。服务端程序调用ptmalloc提供的malloc/free函数申请和释放内…

Datawhale组队学习:大数据 D2——分布式文件系统(HDFS)

妙趣横生大数据 Day2三、Hadoop 分布式文件系统(HDFS)1. 分布式文件系统2. HDFS 简介3. HDFS 体系结构4. HDFS存储原理数据冗余存储数据存储策略数据错误与恢复5. HDFS数据读写过程读写过程HDFS故障类型和其检测方法HDFS编程实验1. 本地和集群文件间操作2. 基本文件操作3. Hado…

Java基本语法【未完待续】

目录 一、注释方式 1、单行注释 // 2、多行注释 /*...*/ 3、文档注释 /**....*/ 二、标识符和关键字 三、数据类型 拓展及面试题讲解 1、整数拓展 进制 二进制0b 八进制0 十六进制0x 2、字符拓展 编码Unicode表 2字节 0~65536 3、字符串拓展 4、布尔值拓展 四、类型…

CleanMyMac X软件下载及详细功能介绍

mac平台的知名系统清理应用CleanMyMac在经历了一段时间的测试后,全新设计的X正式上线。与CleanMyMac3相比,新版本的UI设计焕然一新,采用了完全不同的风格。使用Windows电脑时,很多人会下载各类优化软件,而在Mac平台中&…

jsp高校教职工管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 高校教职工管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助mvc模式 serlvetdaobean方式开发,系统具有完整的源代码和数据库,系统主要采用B/S模式 开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#…

tomcat安装和配置

目录 1.下载tomcat 2.解压tomcat压缩包 3.配置端口号 4.启动 命令行窗口日志乱码的解决 5.验证 tomcat 如果已经安装配置过jdk,则向下执行,若无,请先安装jdk。 1.下载tomcat 路径: Apache Tomcat - Apache Tomcat 9 Sof…

Windows 系统从零配置 Python 环境,安装CUDA、CUDNN、PyTorch 详细教程

文章目录1 配置 python 环境1.1 安装 Anaconda1.2 检查环境安装成功1.3 创建虚拟环境1.4 进入/退出 刚刚创建的环境1.5 其它操作1.5.1 查看电脑上所有已创建的环境1.5.2 删除已创建的环境2 安装 CUDA 和 CUDNN2.1 查看自己电脑支持的 CUDA 版本2.2 安装 CUDA2.3 安装 CUDNN2.4 …

LabVIEW中CPU和内存使用情况在NI分布式系统管理器中不可见

LabVIEW中CPU和内存使用情况在NI分布式系统管理器中不可见想使用NI分布式系统管理器监测网络连接实时控制器的CPU和内存使用情况。从左侧窗口的树中选择了感兴趣的实时目标,然后通过选择视图自动视图来确保启用自动查看。希望看到CPU/内存选项卡,但它有显…

算法导论【在线算法】—The Ski-Rental Problem、The Lost Cow Problem、The Secretary Problem

算法导论【在线算法】The Ski-Rental Problem问题描述在线算法证明The Lost Cow Problem问题描述在线算法类似问题—寻宝藏The Secretary Problem问题描述在线算法The Best Possible kThe Ski-Rental Problem 问题描述 假设你正在上滑雪课。每节课结束后,你决定&a…

【Element】el-table 表格

目录 ElementUI 表格分页(每页20条) 表格分页(全部数据) 表格排序(全部数据) 表格排序(默认) 两个el-table冲突 加载数据前显示“ 暂无数据 ” 表格项为路由 表头样式 树形…

Homebrew 安装遇到的问题

Homebrew 安装遇到的问题 例如:第一章 Python 机器学习入门之pandas的使用 文章目录Homebrew 安装遇到的问题前言一、安装二、遇到的问题1.提示 zsh: command not found: brew三、解决问题前言 使用 Homebrew 能够 安装 Apple(或您的 Linux 系统&#…

React 合成事件理解

1 事件三个阶段 捕获、目标、处理 (具体百度,后面有空补全)2import React from "react";class Test extends React.Component {parentRef;childRef;constructor(props) {super(props);this.parentRef React.createRef();this.chil…