IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> HDMI设计4--HDMI 1.4/2.0 Receiver Subsystem IP -> 正文阅读

[网络协议]HDMI设计4--HDMI 1.4/2.0 Receiver Subsystem IP

Reference:https://china.xilinx.com/content/dam/xilinx/support/documentation/ip_documentation/v_hdmi_rx_ss/v3_2/pg236-v-hdmi-rx-ss.pdf

?对于HDMI 1.4/2.0 Receiver Subsystem IP在不细究具体实现的情况,可以简单的把其当成就是HDMI 1.4/2.0 Transmitter Subsystem IP的各种信号方向由输入变成输出,由输出变成输入。HDMI 1.4/2.0 Receiver Subsystem IP支持的功能和不支持的功能和HDMI 1.4/2.0 Transmitter Subsystem IP相同。因为是接受端,HDMI1.4/2.0 Receiver Subsystem IP可以支持整型或者非整型帧率的视频。因此,HDMI1.4/2.0 Receiver Subsystem IP的细节可以直接参考HDMI 1.4/2.0 Transmitter Subsystem IP。

1. HDMI RX Subsystem Flow

与HDMI TX Subsystem相似的,HDMI RX Subsystem通常也会响应两种事件,一种是来自Source device的5V HDMI Cable Detect(我的理解,实质就是HPD,但是Flow来看,Cable Detect有自己独立的中断回调处理,用来使能PHY中RX的IO Buffer),另一种是来自Source device的HDMI Video Stream发生了变化。

图 1?

?HDMI 1.4/2.0 RX Subsystem的软件flow如图1所示,细节图请参考pg236-v-hdmi-rx-ss.pdf

2.?HDMI 1.4/2.0 RX Subsystem

和HDMI 1.4/2.0 TX Subsystem类似的,当硬件系统中集成了Subsystem IP后,需要在软件中对其进行配置。在软件中引入HDMI 1.4/2.0 RX Subsystem的方式流程如下。

(1)?包含xv_hdmirxss.h头文件

(2)?定义rx subsystem对象: XV_HdmiRxSs HdmiRxSs

(3)?定义配置rx subsystem的配置数据结构体指针: XV_HdmiRxSs_Config?*XV_HdmiRxSs_ConfigPtr

(4)?给HDMI 1.4/2.0 RX Subsystem设置256 bytes的E-EDID数据

void XV_HdmiRxSs_SetEdidParam(XV_HdmiRxSs *InstancePtr,u8 *EdidDataPtr,u16 Length);

(5)?初始化HDMI 1.4/2.0 RX Subsystem

XV_HdmiRxSs_Config* XV_HdmiRxSs_LookupConfig(u32 DeviceId);
int XV_HdmiRxSs_CfgInitialize(XV_HdmiRxSs *InstancePtr,XV_HdmiRxSs_Config *CfgPtr,u32 EffectiveAddr);

(6)?连接中断控制器,使能中断

int XIntc_Connect(XIntc *InstancePtr,u8 Id, XInterruptHandler Handler,void *CallBackRef);
void XIntc_Enable(XIntc *InstancePtr,u8 Id);

这里要注意的是,EDID/E-EDID是以8 bit的一维数组定义在软件程序中,EDID/E-EDID在HDMI 1.4/2.0 RX Subsystem初始化的时候,由驱动直接将其加载到Subsystem中。

3. Video PHY Controller

在软件中集成Video PHY Controller的操作流程与HDMI 1.4/2.0 TX Subsystem相同。

(1)?包含xvphy.h的头文件

(2)?定义Video PHY Controller的对象: XVphy Vphy

(3)?定义Video PHY Controller对应配置数据结构的指针:XVphy_Config *XVphyCfgPtr

(4)?软件初始化Video PHY Controller

XVphy_Config *XVphy_LookupConfig(u16 DeviceId);
u32 XVphy_HdmiInitialize(XVphy *IntancePtr,u8 QuadId,XVphy_Config *CfgPtr,u32 SystemFrequency);

这里注意,建议在HDMI 1.4/2.0 RX Subsystem初始化完后再对Video PHY controller进行初始化。

4.?HDMI 1.4/2.0 RX Subsystem Interrupts

关于HDMI 1.4/2.0 RX Subsystem的中断类型如下所示.

(1)?HPD - 热插拔,每次当HDMI线缆的插拔时产生该中断

a. Rising edge -- HDMI线缆连接上

b. Falling edge -- HDMI线缆未连接上

(2)?Link Ready -- 和HDMI TX相似,在HDMI RX sub-core中的一个寄存器有1 bit(link status bit)用来记录link_clk的状态。当link_clk稳定时,该位被置为1;当link_clk不稳定时,该位被清为0。当这个link status bit发生变化时将会产生Link Ready中断。

a.?Rising edge -- Link clock变为稳定

b.Falling edge -- Link clock变为不稳定

(3)?Video Ready -- 该类型中断在HDMI RX sub-core检测到接受到的视频数据流(分辨率,帧率)发生变化时产生。

a.?Rising edge -- 数据流变得稳定(StreamUp)

b.Falling edge -- 数据流变得不稳定(StreamDown)

(4)?HDMI Receiver Auxiliary Infoframe Interrupt --当Auxiliary Infoframe被接受到时,产生该中断

(5)?HDMI Receiver Audio Infoframe Interrupt -- 当Audio Infoframe被接受到时,产生该中断

(6)?HDCP 1.4 Interrupt (需使能HDCP 1.4)

(7)?HDCP 1.4 Timer Interrupt(需使能HDCP 1.4)

图 2?

5.?HDMI 1.4/2.0 RX Subsystem Callback Functions

与HDMI 1.4/2.0 TX Subsystem相似,需要为HDMI 1.4/2.0 RX Subsystem设置各种对应的中断的中断处理回调函数,调用下面的API函数。

int XV_HdmiRxSs_SetCallback(XV_HdmiRxSs *InstancePtr,u32 HandlerType,void *CallbackFuncPtr,void *CallbackRef);

在xv_hdmirxss.h中定义好的能使用的中断句柄(handlers)如下:XV_HDMIRXSS_HANDLER_CONNECT, XV_HDMIRXSS_HANDLER_AUX, XV_HDMIRXSS_AUD, XV_HDMIRXSS_HANDLER_STREAM_UP, XV_HDMIRXSS_HANDLER_STREAM_DOWN, XV_HDMIRXSS_STREAM_INIT

(1)?XV_HDMIRXSS_HANDLER_CONNECT

每当HDMI RX检测到HPD信号时,会产生该中断。

a.?当HDMI cable连接上时,使能Video PHY Controller中差分输入时钟buffer;没有连接时,无效Video PHY Controller中差分输入时钟Buffer.

void XVphy_IBufDsEnable(XVphy *InstancePtr,u8 QuadId,XVphy_DirectionType Dir,u8 Enable);

b. 当HDMI cable没有连接上时,清除Video PHY RX TMDS Clock ratio.

Vphy.HdmiRxTmdsClockRatio = 0; 

(2)?XV_HDMIRXSS_HANDLER_AUX

每当HDMI RX接受到Auxiliary InfoFrame时,该中断产生,回调函数可以使用该InfoFrame的数据对应用程序进行操作更新。

(3)?XV_HDMIRXSS_HANDLER_AUD

每当有效的音频数据流被检测到或者有效的音频通道发生变化时,该中断产生。

(4)?XV_HDMIRXSS_HANDLER_STREAM_UP

当HDMI视频流被锁定时,该中断产生。

(5)?XV_HDMIRXSS_HANDLER_STREAM_DOWN

当HDMI视频流由锁定变成没有被锁定时,该中断产生。这里注意,如果HDMI 1.4/2.0 RX Subsystem在确定的时间延迟中,video stream remains?unlocked,则应用程序可以将系统设置进入待机模式,同时启动一个定时器来唤醒。

(6)?XV_HDMIRXSS_HANDLER_STREAM_INIT

每当Video PHY Controller给HDMI 1.4/2.0 RX Subsystem的时钟稳定,且HDMI 1.4/2.0 RX Subsystem开始锁定数据流时,该中断产生。

a.?检测HDMI cable是否连接(1 - Connected; 0 - Disconnected)

XV_HdmiRxSs *HdmiRxSsPtr = (XV_HdmiRxSs *)CallbackRef;
HdmiRxSsPtr->IsStreamConnected

b. 从HDMI RX中获得视频流信息

XVidC_VideoStream *XV_HdmiRxSs_GetVideoStream(XV_HdmiRxSs *InstancePtr);

c.?基于HDMI RX收到的视频流信息,计算HDMI MMCM的参数

u32 XVphy_HdmiCfgCalcMmcmParam(XVphy *InstancePtr,u8 QuadId,XVphy_ChannelId ChId,XVphy_DirectionType Dir,XVidC_PixelsPerClock Ppc,XVidC_ColorDepth Bpc);

d.?使能Video PHY Controller中的MMCM

void XVphy_MmcmStart(XVphy *InstancePtr,u8 QuadId,XVphy_DirectionType Dir);

这里要注意,QuadId并没有使用需要设置为0.

XVphy_MmcmStart(&Vphy,0,XVPHY_DIR_RX);

(7)?XV_HDMIRXSS_HANDLER_HDCP_AUTHENTICATE

当HDMI RX Subsystem使能了HDCP 1.4或者HDCP 2.3后,在HDCP通过了认证后产生。

6.?Video PHY Controller Interrupt Handlers for HDMI 1.4/2.0 RX Subsystem

-> XVPHY_HDMI_HANDLER_RXINT

->?XVPHY_HDMI_HANDLER_RXREADY

使用如下API进行挂起(hooked up)中断

void XVphy_SetHdmiCallback(XVphy *InstancePtr,XVphy_HdmiHandlerType HandlerType,void *CallbackFunc,void *CallbackRef);

(1)?XVPHY_HDMI_HANDLER_RXINIT

每当Video Controller检测到HDMI RX的参考时钟发生变化时产生。

a.?为HDMI 1.4/2.0 RX Subsystem初始化一个参考时钟变化处理.

void XV_HdmiRxSs_RefClockChangeInit(XV_HdmiRxSs *InstancePtr);

b.?将HDMI RX Subsystem获得的参考TMDS clock设置给Video PHY Controller

VphyPtr->HdmiRxTmdsClockRatio = HdmiRxSs.TMDSClockRatio;

(2)?VPHY_HDMI_HANDLER_RXREADY

每次Video PHY Controller对于RX的reset完成时,该中断产生。

a.?检查Video PHY Controller中PLL的类型

XVphy_PllType XVphy_GetPllType(XVphy *InstancePtr,u8 QuadId,XVphy_DirectionType Dir,XVphy_ChannelId ChId);

b. 根据获得的PLL类型来设置HDMI 1.4/2.0 RX Subsystem的视频流信息。

XV_HdmiRxSs_SetStream(XV_HdmiRxSs *InstancePtr,u32 Clock, u32 LineRate)

这里的Clock和LineRate的值都来自于Video PHY Controller.

7.?Example Use Cases

(1)?Cable Plug in

当HDMI线缆连接时,HPD中断产生。调用的中断回调函数的中断类型为XV_HDMIRXSS_HANDLER_CONNECT

(2)?Cable Plug out

用HDMI TX不同,HDMI RX收到Cable Plug out中断源时,首先调用的中断回调函数的中断类型是XV_HDMIRXSS_HANDLER_STREAM_DOW,此时是处理RX Stream Down中断;接着调用XV_HDMIRXSS_HANDLER_CONNECT中断回调函数处理HPD中断。

(3)?Received Video Stream

a.?Video PHY Controller的HDMI RX Init中断被接受到 -- XVPHY_HDMI_HANDLER_RXINIT

b.?Video PHY Controller的HDMI RX Ready中断被接受到 -- XVPHY_HDMI_HANDLER_RXREADY

c.?RX Audio中断被接受到 -- XV_HDMIRXSS_HANDLER_AUD

d.?RX Stream Initialization中断被接受到 -- XV_HDMIRXSS_HANDLER_HDCP_AUTHENTICATE

e.?当视频流数据被锁定住后,RX Stream up中断被接受到 --?XV_HDMIRXSS_HANDLER_STREAM_UP

此时,就可以从HDMI RX Subsystem获得视频流信息了。

XVidC_VidoStream *XV_HdmiRxSs_GetVideoStream(XV_HdmiRxSs *InstancePtr);

(4)?Video Stream Change

a.?RX Stream Down中断被接受到 -- XV_HDMIRXSS_HANDLER_STREAM_DOWN

b.?Video PHY Controller的HDMI RX Init中断被接受到 -- XVPHY_HDMI_HANDLER_RXINIT

c.?Video PHY Controller的HDMI RX Ready中断被接受到 -- XVPHY_HDMI_HANDLER_RXREADY

d.?RX Audio中断被接受到 -- XV_HDMIRXSS_HANDLER_AUD

e.?RX Stream Initialization中断被接受到 -- XV_HDMIRXSS_HANDLER_STREAM_INIT

f.?当视频流数据被锁定住后,RX Stream up中断被接受到 --?XV_HDMIRXSS_HANDLER_STREAM_UP

此时,就可以从HDMI RX Subsystem获得视频流信息了。

XVidC_VideoStream *XV_HdmiRxSs_GetVideoStream(XV_HdmiRxSs *InstancePtr);

(5)?Receive Infoframe

HDMI RX接受到了Auxiliary InfoFrame时产生中断 -- XV_HDMIRXSS_HANDLER_AUX

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:59:55  更:2022-02-28 16:00:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 13:28:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码