chinaaetwoaini

转 AC701板子的ADV7511的HDMI输出测试

0
阅读(3985)

第一次拿到开发板,看了板子上有HDMI输出,所以第一个想办法点亮HDMI的输出数据。

参考网上的《VESA Monitor Timing Standard》,该实例中是参考1024*768@60Hz,时钟为65MHz的时序标准设计。

SAA7121-220426.jpg

SAA7121-220501.jpg

       对于该时序表,输出一个基本VESA时序是使用两个行计数和列计数器,根据计数器的位置来输出对应VSYNC,HSYNC,DE信号。在HDMI必须有该三种信号才有图像显示。

SAA7121-220806.jpg

SAA7121-220814.jpg


SAA7121-220831.jpg

有人问什么时候选择VSYNC正向,什么时候选择HSYNC反向。其实你写任何分辨率时序的时候,都可以正向,就是跟DE有效的时候,HSYNC和VSYNC也是高电平。所以不用担心输出。只是HDMI输入的时候,得去检测DE有效的状态,VSYNC和HSYNC是否同相位。

     写完该程序以后,然后在调用XILINX的iP核心,设置锁相环时钟。注意一个问题。那就是AC701是差分系统时钟输入。所以必须使用IBUFGS去明示该时钟引脚是差分时钟。导入XDC约束引脚问题。生成bit文件。

IBUFGDS CLK_U(

 .I(clk_p),

          .IB(clk_n),

           .O(clk)

);

    通过上述的IBUFGDS来把差分时钟变成单时钟,然后转换后的时钟利用PLL锁相环配置成输出65M。记住输入时钟是200MHz。

    出人意料的事情,AC701板子并没有显示HDMI数据。我原本认为差分时钟是否没约束好,导致没有时钟,实际用DEBUG工具发现时钟是有的。

    百度之后才发现ADV7511这个芯片必须配置才能运行工作。

    看AC701的原理图发现I2C总线是通过I2C切换器PCA79548A这个芯片切换I2C。注意官方的资料I2C地址是错误的,我调试到两眼发晕才发现地址是E8。而且告诉你们一个技巧,因为没有设备寄存器的。所以为了兼容后面ADC7511程序,可以写两次数据,都是会返回ACK信号。也就是寄存器是FF,数据也是FF。这样不需要大的改动。

    xilinx的很多板子都是PCA7954x这种恶心的芯片来做i2c 切换器,所以每次都要设定PCA7954这类芯片的数据。还有记住一点记住每次设定PCA7954芯片都是要进行复位,复位时间必须满足500ns,恢复I2C的功能也得100ns。

    通过I2C总线切换器打开所有的数据通道后,就可以跟ADV7511芯片进行通信。ADV7511的I2C设置地址为0x72。

    打开https://ez.analog.com/docs/DOC-1740, 这个网站是ADV7511所有的资料。在官方的datasheet根本没讲述太多寄存器的设置问题。

    在《ADV7511_Programming_Guide.pdf》这个pdf文件中,我们需要去了解ADV7511的基本设置要求。

SAA7121-223448.jpg

SAA7121-223455.jpg

      在set up the video input mode 黑体字上面的寄存器,我们是不需要关注的。关注是输入的输入模式。

SAA7121-224042.jpg

     根据AC701的原理图,ADV7511的总线输入D0-D3,D12-D15,D24-D27是没有输入,也就是RGB4:4:4,每位数据是8位的模式。直接设置0x15 [3:0]) to 0x0数据,0x16的【3:2】数据对其模式也不需要设置了。把0X16的[5:4]设置11,为8位数据,其他的位数的值都是默认的。0x17【1】是指图像的长和宽的比率,可以设置为0或者1,在实际的液晶屏幕也不会根据该数据变化,而是根据液晶自己的设置,自动拉伸满屏模式。0x18【7】是开启色彩范围拉伸的方式,我们做的设计是RGB直接映射成RGB,所以直接禁用就可以。0X18[6:5]这个时候也无效使用了。在0XAF【1】是设定HDMI或者DVI模式,HDMI比DVI最直接的一点是HDMI可以发送数字音频数据和加密数据内容。这次我们是不需要,直接设置成DVI模式,值就是0。对于0XAF[7],设定为0,关闭HDMI加密功能。

   由于GC CD ,深度色彩加密数据我们不适用的,所以关闭掉GC选项。0xAF【7】设置为0,关闭GC CD的数据。当然这个时候也不需要对0x4c的寄存器设定了。

    其他的声音数据,因为设置为DVI输出方式,所以不用关心设定。

    写完这些寄存器以后,图像可以显示出来的。


    对于代码,这类简单的玩意,就不用我给了吧。如果有偿方式,我估计愿意哈哈。下一篇怎么读写DDR3。请各位期待。