记录下我用各种显卡HDMI输出遇到的坑
NVDIA显卡
1.EDID读取问题
问题描述
有些型号的N卡在接收端hpd动作之后,会读几次edid,有的间隔更是只有丧心病狂的几微秒,如果接收端edid是512的话,读完一次会产生segment,来不及清的话,第二次edid读取就会出错
解决方案
最好有硬件功能,检测到写offset 0的时候自动清除segment
硬件没做且无中断的话,只能用高精度定时器去polling edid读取位置,副作用极大
2.EDID内容问题
问题描述
有些N卡升级驱动之后,读到edid name为某些厂商的时候,开始各种奇怪的行为,如下
1.不送信号
2.送信号但是丢失部分高刷分辨率
3.选择的分辨率和实际发送的分辨率不对应
4.FRL模式下写0xffff降速功能不生效,降完又给升回去
5.不响应edid内容改变,哪怕接收端声明支持能力变化,也按照最高的发
解决方案
1.重装驱动
2.接收端修改name
3.显卡行为
FRL 始终按照edid声明的MAX FRL RATE来发送
TX输出的clk应该有限制,DSC模式哪怕是高刷,也会压缩的特别厉害
FRL training代码应该是个死循环,有概率失败就无信号,只能重启电脑
MAC M系列显卡
1.EDID切换DSC和非DSC模式,切到DSC的时候,M显卡会乱送信号问题
问题描述
EDID切换DSC和非DSC模式,切到DSC的时候,M显卡会乱送信号,明明是非压缩的码流,却连着CVTEM包一起发,且无hsync,导致接收端无法解码,问题必现
解决方案
检测到码流和包不对应,拉一次hpd恢复
AMD显卡
1.DSC模式下,信号切换,重新training,发送的dsc码流不遵守协议
问题描述
DSC模式下切换,发送的码流概率会把GB放到video后面,部分接收端无法解码
解决方案
hdcp下没有解决方案,只能接收端芯片支持处理这种非标准场景
2.有segment的时候,training概率失败
问题描述
512 edid FRL模式,segment未清除,重新training会卡死
解决方案
接收端检测到源端读完edid后,清除segment