问题
之前购置的HDMI的EDID欺骗器,其读取的EDID信息与真实的显示器EDID差别较大,希望调整成真实的显示器的EDID,应该如何操作?
探索
EDID欺骗原理
首先要知道EDID欺骗器的原理。经过搜索,得到了这个文档一种强制hdmi接口输出视频信号的装置和方法。其内容描述了如何欺骗HDMI输出设备,其核心是把HPD拉高,并使用了24C02的EEPROM来响应HDMI输出设备的DDC查询。因此,我手头的HDMI欺骗器应该也是类似的构造。
EDID欺骗方案确认
将欺骗器使用手锯切开,拿掉金属外壳,使用细一字螺丝刀小心的把内部填充的软塑胶撕开并移除,留下内部的电路板。其外观如下
经过测量,5脚的SOT23封装的芯片,标注着P02A 7KP32
,分别连接到了HDMI的SCL,SDA,HPD,5V,GND。基本可以确认这就是一颗24C02。其引脚布局如下
经过与查询到24C02芯片的Datasheet中的封装进行对比,可以确认就是24C02芯片
I2C烧录线设计
烧录方案打算使用CH341A烧录器的I2C模式进行烧录。
欺骗器中的24C02的WP引脚,使用1k电阻上拉至5V,因此平时工作时是写保护状态。如果想写入,则必须将其下拉到GND。因此,烧录时需要将HPD与GND连接到一起。其他引脚均依次连接即可。
由于这里希望制作一个通用的烧录器,不想把所有都HDMI EDID欺骗器都拆开进行烧录,因此需要将HDMI接口处的引脚引出,连接到烧录器上。由于购置的HDMI转接板还有好几天才能到,因此打算用家里现成的工具进行制作。找了一圈,家里有HDMI母对母的转接头,还有质量较差的设备自带的短HDMI线,因此打算使用一条剪断的HDMI线,配合面包板和杜邦排针做一个接头。剪开后剥出线芯,通过母对母转接头插上EDID欺骗器,使用万用表二极管档位测量线芯和24C02的芯片引脚的对应关系如下
1 2 3 4 5 6 |
SCL 紫 GND 包芯透明 SDA 蓝 WP 包芯红 VCC 白 |
因此焊接方案如下
- HDMI Pin19(HPD)与Pin17(GND)包芯透明线焊接到 I2C的GND
- HDMI Pin15(DDC SCL)紫色线焊接到I2C的SCL
- HDMI Pin16(DDC SDA)蓝色线焊接到I2C的SDA
- HDMI Pin18(+5V)白色线焊接到I2C的VCC
焊接效果如下
如果不想焊接,可以去某宝上购买HDMI母转2.54mm排针的转接器,使用杜邦线连接到面包板上,再连接到烧录座上。
连接烧录器
参照24C02的TTSOP的封装引脚定义连接烧录线与CH341上的转接板
烧录线连接烧录器和待烧录的EDID欺骗器效果如下
准备烧录软件
我使用macOS进行烧录操作。经过搜索,网上已经有了CH341烧录I2C的工具ch341eepromtool。下载后进行编译安装,得到了一个命令行工具 ch341eeprom
。
这个工具可以读取和写入和验证I2C的eeprom
1 2 3 4 5 6 7 |
## 读取 sudo ch341eeprom -s 24c02 -r MiTV-edid.bin ## 写入 sudo ch341eeprom -s 24c02 -w Y25F-edid.bin ## 验证 sudo ch341eeprom -s 24c02 -V Y25F-edid.bin |
实操
获得目标EDID
接下来要获取用于写入的EDID信息。经过搜索,根据macOS 下读取并解析 EDID文章的说明,克隆并编译了 edid-decode
。然后移除EDID欺骗器,使用 ioreg
读取EDID信息
1 2 3 |
$ ioreg -lw0 | grep IODisplayEDID | | | | "IODisplayEDID" = <00ffffffffffff0030ae502401010101181c010380361f782ab6e0a35650a0270e5054bfef0095008180b300317c4568457c6168617c023a801871382d40582c4500202f2100001e000000fd001e901ea024000a202020202020000000ff005534413833353239000a202020000000fc00593235660a202020202020202001ee020341f14c901f0514041303120211014c230907078301000067030c001300383c67d85dc401788000681a000001011e9200e305e301e30f0100e60607016050001b82808870382d4018203500202f2100001e866f80a07038404030203500202f2100001efe5b80a07038354030203600202f2100001a0000000000000000d3> |
将尖括号里的内容单独保存到文本文件,命名为 edid.log
然后使用 edid-decode
将其转换为二进制文件
1 2 |
$ edid-decode -o raw edid.log Y25F-edid.bin |
至此待写入的EDID信息准备完毕
写入目标EDID
1 2 3 4 5 |
## 写入 sudo ch341eeprom -s 24c02 -w Y25F-edid.bin ## 验证 sudo ch341eeprom -s 24c02 -V Y25F-edid.bin |
写入过程正常结束无报错,断开CH341的电源并拔出EDID欺骗器。
效果
插上更新EDID信息的欺骗器,在系统设置里查看显示器名称,发现已经与裸显示器一样了!
问题解决~