关于主机和显示器的EDID、HPD流程

问题遇到的现象和发生背景

做了一个可以让两台主机在两个屏幕之间切换的单片机,接口是HDMI2.0版本的接口,但是在进行切换时发现其中一台主机的一个端口会识别到两个相同的EDID,且EDID分配的程序已经确定没有问题,出现问题的现象是我在HPD拉低的时间内主机就会主动的读取EDID,且在读完EDID的前几个字节主机就会回复一个NACK,不过出问题的端口是我用一个Type-C转HDMI的转接头来连接主机

以下是DDC和HPD的代码
```c
 HRx_Set(0x26, 0x80, 0x00);//以下为寄存器操作
 HRx_Set(0xC5, 0x03, 0x02);//打开DDC通道,使能EDID
 u8Reg = HRx_R(0xC5);
 HRx_Set(0xC5, 0x10, 0x10);        // Reg_SoftEDIDRst=1  重置EDID
 DelayXms(10);
 HRx_W(0xC5, u8Reg);         // Reg_SoftEDIDRst=0 关闭重置
 HRx_HpdSet(u8RxPort, HPD_L2H);//HPD拉低再拉高,拉低时间为500ms




###### 运行结果及报错内容 
HPD正常拉低,由于两个显示器支持的最高分辨率相同所以画面输出正常
###### 我的解答思路和尝试过的方法 
之前的程序是在拉低的时候将DDC通道打开并重置Rx端口EDID,然后再将HPD拉高让主机读取,当时就出现了HPD拉低时去读EDID,所以导致了一个端口没有更新EDID而用的上一次的EDID,另一个端口则可以正常更新,后面修改为HPD操作之前就将DDC打开且不关闭,仍没有得到解决,有没有可能是转接头的问题?除了转接头应该还有什么其他的情况会导致这个问题?
望各界大佬帮帮我这个才入行4个月的小菜鸟,感谢感谢

正常情况下是,当source端发现hpd拉高时,会去读取sink端的EDID。你这个拉低的时候还会读EDID,看来是非标设计。
既然你代码上能够控制EDID的使能,为什么不在拉低hpd的时候也关掉EDID的使能呢

目前尝试过的方法有以下:
1.在HPD拉低之前将EDID使能,
2.在HPD拉低之前关闭EDID使能,拉高之后打开
3.确认了视频芯片获取的Tx端EDID没有错误,且分配给各个Rx端的EDID没有问题
4.防止是在source获取EDID之前视频芯片没有将EDID准备好,于是在拉低之前增加10ms延时再使能EDID
5.防止是HDCP对DDC通道发生强占,去除HDCP部分,但仍然回复一个NACK
以上方法均不能解决问题