我在源模式下使用TMDS181。 HDMI源在FPGA中实施,TMDS181位于FPGA的收发器输出和HDMI连接器之间。
在所有HDMI 1.4 分辨率中,都没有问题。 一切正常。 HDMI接收器可以正确接收来自HDMI源的视频。 工作正常,包括4K30分辨率。 但是,在HDMI 2.0 模式下,它不起作用。 HDMI接收器无法接收信号。
经过进一步调查,我发现在HDMI 2.0 模式下,TMDS181似乎将TMDS时钟频率除以4。 例如,HDMI信号源配置为发送4K60信号。 在这种情况下,正确的TMDS时钟频率是148.5 MHz,是4K60信号597 MHz像素速率的四分之一。 使用示波器,我可以解决TMDS181的IN_CLK引脚问题,并看到FPGA确实将148.5 MHz的TMDS时钟输出到TMDS181。 然后,如果探测TMDS181的OUT _CLK引脚,我会看到37.125 MHz的时钟频率,它恰好是TMDS181输入时钟频率的四分之一。
当然,我很清楚HDMI 2.0 中的TMDS_Clk_Ratio机制。 事实上,是的,FPGA中的HDMI源正在通过DDC通道在正确的SCDC寄存器中设置HDMI接收器的TMDS_Clk_Ratio位。 我知道,当在HDMI 2.0 模式下设置此位时,TMDS181会侦听TMDS_Clk_Ratio序列并更改TMDS中的某些内容。 而且,我强烈怀疑当TMDS_Clk_ratio位被设置时,无论TMDS181发生什么变化,都会打乱TMD181的TMDS时钟输出。
这项索赔的一些进一步证据。 我进入了HDMI源软件驱动程序并注释了导致DDC控制器通过SCDC设置TMDS_Clk_Ratio位的单行代码。 否则,HDMI源将认为它正在HDMI 2.0 模式下运行。 软件不会检查HDMI接收器是否确实设置了TMDS_Clk_Ratio位。 因此,HDMI源正在发送4K60图像。 但是,TMD181未看到TMDS_Clk_ratio位设置,因此它认为链路正在HDMI 1.4 模式下运行。 我探测到TMDS时钟输入到TMDS181,它以148.5 MHz正确运行。 而且,在TMDS181的OUT _CLK引脚上,参见148.5 MHz。 因此,只要TMDS181没有看到源设置的TMDS_Clk_Ratio位,它就会直接通过148.5 MHz TMDS时钟,没有问题。 但是,只要我取消了允许DDC控制器设置接收器TMDS_Clk_Ratio位的代码行的注释,TMDS181的CLK_OUT就会下降到37.125 MHz。 我已经尝试过几次了,它是完全一致的。
那么,问题是,为什么TMDS181在看到TMDS_Clk_ratio位设置时,将通过它的TMDS时钟除以4?