HDMI-FMC子卡的使用(基于VC707)(上)
模块介绍
这块子卡提供了一个HDMI输出接口和两个HDMI输入接口,通过FMC接口与母版连接。
HDMI输出:使用Sil9136-3芯片,支持最高4Kx2K@30Hz
HDMI输入:使用ADV7619芯片,支持最高4Kx2K@30Hz
原本想用zedboard上的FMC跟这块子板连接,但是由于这个模块使用的FMC接口是HPC(high pin connector),不能使用,因此最终使用了VC707.
配置
两个芯片都是通过IIC接口进行配置
初步阅读文档,发现两个芯片的功能强大,这里不再做详细介绍,只是大概了解模块的组成和使用思路即可。
接下来是如何配置和使用的问题,这个模块的配套资源里面有基于Quartus的几个demo,因此试试看能不能移植到vc707上。
DEMO的硬件配置
QSYS 例化代码
TR5_QSYS u0 (
.clk_50 (OSC_50_B8D), // clk_50_clk_in.clk
.reset_n (reset_n), // clk_50_clk_in_reset.reset_n
// HDMI TX
.hdmi_tx_fmc_i2c_scl_external_connection_export (SII9136_CSCL_FMC), // hdmi_tx_fmc_i2c_scl_external_connection.export
.hdmi_tx_fmc_i2c_sda_external_connection_export (SII9136_CSDA_FMC), // hdmi_tx_fmc_i2c_sda_external_connection.export
.sii9136_int_external_connection_export (SII9136_INT), // sii9136_int_external_connection.export
.sii9136_rst_n_external_connection_export (SII9136_RST_n), // sii9136_rst_n_external_connection.export
// HDMI RX
.i2c_scl_external_connection_export (ADV7619_CSCL_FMC), // i2c_scl_external_connection.export
.i2c_sda_external_connection_export (ADV7619_CSDA_FMC), // i2c_sda_external_connection.export
.sii9679_rst_external_connection_export (), // sii9679_rst_external_connection.export
.adv7619_rst_external_connection_export (ADV7619_RESET_n), // adv7619_rst_external_connection.export
// RX EDID
.rx0_edid_i2c_scl_external_connection_export (RX0_DDC_SCL), // rx0_edid_i2c_scl_external_connection.export
.rx0_edid_i2c_sda_external_connection_export (RX0_DDC_SDA), // rx0_edid_i2c_sda_external_connection.export
.rx1_edid_i2c_scl_external_connection_export (RX1_DDC_SCL), // rx1_edid_i2c_scl_external_connection.export
.rx1_edid_i2c_sda_external_connection_export (RX1_DDC_SDA), // rx1_edid_i2c_sda_external_connection.export
.adv7619_int_external_connection_export (ADV7619_INT) // adv7619_int_external_connection.export
);
这个就是qsys的IP,总体功能比较简单,就是实现对HDMI-FMC模块的初始化,内部的实现方式是使用一个NIOS软核+若干个PIO,图片比较大就不贴上来了。
DEMO的软件配置
打开eclipse,看到工程结构如下,功能包括了:使用PIO控制语句实现基本的I2C时序逻辑、单字节的I2C读写功能、多字节的I2C读写功能、HDMIrx和tx芯片的初始化等
总体来说,程序的流程如下:
- 初始化Rx模块的EDID:包括验证EDID、写EDID等功能
- TX模块的初始化:包括TX模块复位、TX模块ID验证、TX模块初始化
- RX模块的初始化:包括RX模块复位、RX模块ID获取、RX模块初始化、中断设置
- 主循环:监测RX模块两个端口的连接情况(读寄存器),同一时刻只有一个端口有效,可通过修改寄存器控制需要选择的端口
VC707移植
未完待续