zoukankan      html  css  js  c++  java
  • ids & hdmi 原理

    http://www.taiwanwebinar.com/zh_TW/STATIC/SITE/dwc_hdmi_tx.pdf

    http://blog.csdn.net/g_salamander/article/details/21019845

    一、IDS 学习笔记
    1、Overlay Controller
    图像数据格式和4窗口融合由叠加控制器处理。叠加控制器可以根据窗口的中断 生成一个窗口时隙,用户可以根据时隙中断更新帧缓冲的数据,比如:播放视频的时候。通常,视频的解码速度为 30 fps,LCD 的刷新率为 60-70 Hz,叠加控制器采用两路 PWM 定时器中断来避免潜在的风险。同步的过程如下图所示:
            
    时隙中断同步于 PWM_INT2/3 和 VSYNC,在第一阶段:时隙中断产生后,下一帧的视频数据可以安全的解码并写入 buffer1,因为此时叠加控制器是从 buffer0 中读取视频数据到 LCD。同样的,在第二阶段 buffer0 的内容可以被更新。注:在使用窗口时隙中断时必须先设置好 PWM_INT2/3。

    窗口坐标和虚拟显示示意图如下:

           
    2、LCD Controller
    LCD 控制器用于发送视频数据到外部的 TFT LCD 并生成必要的控制信号,如: VSYNC、HSYNC、VCLK等。LCD 控制器通过 16 个 24-bit RGB FIFO 与叠加控制器交换数据。LCD 控制器可以通过寄存器设置 LCD 电源引脚的状态。
    3、TV Controller
    电视控制器将 RGB FIFO 中的 RGB 数据转换成 YCbCr 数据并发送到外部电视机的编码芯片,YCbCr 数据将被加入消隐区数据并打包,使之与 ITU-R BT 601/656 接口格式兼容。接口发送数据的频率依赖于图像的大小,接口信号由视频数据和必须的控制信号(VSYNC、HSYNC、HREF、FIELD等)组成。内部 的 RGB -> YCbCr 颜色空间转换矩阵系数可以由软件配置。当前支持两种接口时序:一、行从消隐区开始,二、行从 EAV(有效视频结束) 开始。第二种时序如下图所示(SAV-有效视频开始):
            
    TV 控制器支持 4 种类型的数据格式:ITU656 8-bit YCbCr422、ITU601 8-bit YCbCr422、ITU601 16-bit YCbCr422、ITU601 24-bit RGB888。当输出数据宽度为 8-bit 时,2 个时钟周期发送一个像素的数据。
    4、双屏显示
    当前支持4种工作模式:复制模式(本地显示为主,远程显示通过缩放获得)、高清模式(远程高清、本地为缩放所得)、扩展模式(将同一个 buffer 里面的内容分割显示)、独立模式(各自的不同内容)。

    二、HDMI 学习笔记
    HDMI - 高清晰度多媒体接口,接口使用 5V 电压驱动,采用了 Silicon Image 公司发明的TMDS(时 间最小化差分信号)传输技术,视频信号的 R、G、B、H、V 五种信号都用 TDMS 技术编码。每一个标准的 HDMI 连接,都包含了 3 路用于传输数据的 TMDS 传输通道,还有 1 路独立的 TMDS 时钟通道。在一个时钟周期内,每个 TMDS 通道都能传送 10bit 的数据流,这个数据流可以由若干种不同的编码格式构成。TMDS 对每个像素点种的 RGB 三原色分别按 8bit 编码,如下图所示:
            
    一般来说,HDMI 传输的编码格式中要包含视频数据(HDMI1.3版本前每个像素采用24bit)、控制数据数据岛(数据岛中包含音频数据和附加信息数据,如纠错码等)。TDMS 每个通道在传输时要包含一个 2bit 的控制数据、8bit 的视频数据或者 4bit 的数据包,在 HDMI 信息传输过程中,可以分为三个阶段:视频数据传输周期、控制数据传输周期和数据岛传输周期,如下图所示:
            
    下表展示在数据传输中每种操作模式的编码类型
            
    HDMI 1.0 的带宽为 4.96Gbps(25MHz - 165MHz),HDMI 1.3 为10.2Gbps(340M),计算公式如下:

    带宽 = 系统时钟频率 x 数据量 = 340MHz x 10bit = 3.4Gbit x 3 = 10.2Gbit

    * 典型的 720p@60Hz 时钟频率为 74.25MHz,1080p@60Hz 时钟频率为 148.5MHz

    Type A 型 HDMI 接口引脚定义如下图所示:
             
    在广播电视行业使用的 TV 格式中,支持标清格式的 480i、480p(含 16:9 格式)、576i、576p规格以及高清 HDTV 中的 720p、1080i、1080p 规格。在 HDMI 中还加入了版权保护机制 -HDCP(高带宽数字内容保护),是在使用数字格式进行传输信号的基础上,再加入一层版权认证保护技术。
    HDMI Source 和 Sink 的上电协商过程
    a、Source 设备上电后会检测 HPD 引脚是否被上拉到 2V 以上
    b、Source 设备通过 DDC(显示数据通道) 读取 EDID(增强扩展显示识别数据) 的信息以确定 Sink 能支持的分辨率
    c、Source 设备检测 TMDS 信号是否被上拉到 3.3V
    d、Source 设备输出目前设置的分辨率的信号到 Sink 端
    TMDS 技术差分信号上拉电压为 +3.3V(由 Sink 提供),差分信号的逻辑摆幅在 800-1200mV 之间,实际电压摆幅可以在 150-1200mV 之间变化。CEC 引脚为消费电子控制通道,用于控制视听设备工作。

    * synopsys - IP 核提供商,为大多数芯片公司节省了大量的时间和资源,其 IP 核包括:HDMI、DDR、MIPI、PCIe、SATA、USB、Ethernet 等,并提供了相应的验证软件包。平台 HDMI 接口就是采用的 synopsys 公司的 IP 核,编程指南 《DesignWare Cores HDMI Transmitter Controller Databook》 - DWC_hdmi_tx。软件流程主要为两个阶段:
    1、Initialization
    a、Wait for Hot Plug Detect(HPD)
    b、Configure VGA DVI Video Mode
    c、Read Sink's E-EDID
    2、Configuration
    d、Configure Video Mode
    e、Configure Audio Mode
    f、Configure Infoframes
    g、Configure HDCP
    在 a 阶段,通过向寄存器 PHY_CONF0.PDZ 写 1 让 HDMI TX PHY HPD Detector 上电,然后检测 HPD 状态位,当HPD = 1 时,即代表检测到了 Sink 设备,便可进入 b 阶段。
    在 b 阶段,需要先用 DVI 模式向接收器发送视频数据,因为读取 E-EDID 的操作需要视频数据来提供准确的时钟源,发送数据的分辨率为 VGA(640 x 480p),所有的发送器和接收器都必须支持这个分辨率,因为这个分辨率的数据率最低。HDMI TX PHY 有一个内部 PLL用于产生TMDS 信号的时钟
    在 c 阶段,发送器将会通过 E-DDC 通道从接收器读取 E-EDID 数据,这个数据包含了接收器支持的音频和视频功能,并保存在接收器的存储器中。E-DDC 通道基于 I2C 协议,所以发送器有一个 I2C 主控制器。E-DDC 扩展读操作流程如下:设置从设备 I2C 地址 -> 设置 I2C 段地址 -> 设置 I2C 段指针 -> 开启扩展读功能 -> 读取结果寄存器。
    在 d 阶段,将会匹配发送器和接收器都 支持的视频模式,然后首先关闭 HDMI TX PHY Detector 以免接收器产生异常行为,接着开始配置发送器的视频模式(选择视频输入映射模式 -> 设置视频信号时序 -> 选择 HDMI 或者 DVI 模式 -> 使能 PHY 内部 PLL -> 复位 PHY -> 通过读取 TX_PHY_LOCK 判断配置是否正确完成)
    在 e 阶段,将会为 HDMI 输出配置音频模式(DVI 模式没有音频输出),可选的模式有:I2S、S/PDIF、HBR、DMA、GPA 。

    在 f 阶段,将会为 HDMI 输出设置辅助信息,以告知接收器收到的视频和音频数据的格式等信息。


    * HDMI 如同 MIPI 接口,只是对 IDS 产生的视频数据以及音频数据进行格式转换后再通过 HDMI TX PHY 单元传输出去,即HDMI 只是一种传输方式

    HDMI 功能单元
    a、Video Input Interface - 视频输入接口,接收来自 IDS 的视频数据,其引脚如下图所示:
            
    其中 ivdata 为 48bits,其他都为 1bit,可以看到这是一个典型的视频信号接口。
    b、Audio Input Interface - 音频输入接口,接收来自处理器的音频数据
    c、System and Slave Register Interface - 系统和从设备寄存器接口,控制内部寄存器的读写
    d、E-DDC Interface - 扩展显示数据通道接口,该功能通过 I2C 协议实现,这个接口就是 I2C 时钟和数据读写引脚
    e、CEC Interface - 消费电子控制接口,使用 32.768 KHz 的时钟
    f、HDCP Encryption Engine - 高带宽数字内容保护加密引擎
    g、Scan Test Interface - 扫描测试接口
    h、HDMI TX PHY Interface - HDMI 发送器物理接口,大部分信号将会连接到外部引脚,示意图如下:
            
    其中 ihpd 连接到 HPD 引脚,otmdsdatap、otmdsdatan 连接到外部的 3 路数据传输引脚,otmdsclkp、otmdsclkn 连接到外部时钟引脚。
    i、HDMI 3D TX PHY Interface - HDMI 3D 发送器物理接口
    j、HDMI HEAC PHY Interface - HDMI 以太网和音频回传通道物理接口

    HDMI 函数解析
    * 初始化阶段
    hdmi_probe() - hdmi 探测函数,建立了内核线程 hdmi_wk 以及4个工作队列 hdmi_handler_wk(中断后续处理)、hpd_wk(热插拔检测)、edid_wk(E_EDID读取和解析)、check_wk(当前状态 检测),可以设置 items - P_HDMI_DIRECT 是否直接输出 hdmi 信号
    hdmi_initialize() - hdmi 内存、中断等资源管理
    api_Initialize() - 初始化 VGA 显示参数,以及 hdmi 模块内的寄存器、PHY 等
    * 连接检测阶段
    hdmi_handler() - 中断函数,当 HPD 引脚状态变化时启动,然后启动 hdmi_handler_wk()
    hdmi_handler_wk() - 处理 hpd_on、hpd_off、ddc_i2c 等事件,如果是 hpd_on,则开始读取 E-EDID
    api_EventHandler() - api 层事件处理器,根据 api_mCurrentState 即当前状态做出相应处理,当 E-EDID 读取完成后,启动 edid_EventHandler() 解析,其中重要的函数有 edid_ParseBlock()、dtd_Parse()、dtd_Fill(),解析完成后设置 api_mCurrentState = API_EDID_READ
    hdmi_update_strategy() - E-EDID 解析完成后根据 PHY 和 sink 支持的分辨率选取合适的输出格式
    hdmi_config() - 根据输出格式通过 hdmi_params_config() 配置视频、音频等参数,然后通过 api_Configure() 配置相关寄存器打开 hdmi 信号输出

  • 相关阅读:
    c++ STL中的vector与list为什么没有提供find操作?
    转发:CAOZ星球提问。 遇到很大瓶颈,想离职又不敢离职怎么办
    转发 :caoz:数据分析这点事
    那些绕不开的Linux
    记录 《 Bootstrap 基础教程》 学习笔记 第一天
    迈出你的第一步——天助自助者
    this指向问题
    小结
    前端小白的福利
    真实案例分享
  • 原文地址:https://www.cnblogs.com/jingzhishen/p/4362477.html
Copyright © 2011-2022 走看看