螢幕 EDID 損毀與修復

某天手賤想說更新一下 USB-C 多功能擴充座的 HDMI 韌體部分,更新沒失敗也沒成功,但骨董螢幕 Asus VK266H 在電腦重開機後,Windows 卻偵測不到了。經過多方測試後,直覺是螢幕的 EDID 因韌體更新造成損毀,也是第一次遇到這情形。以目前省時省錢的修復條件下,手邊最適合做這工作的就是 Raspberry Pi 3+ 了,就試著來弄看看。

電腦讀寫 HDMI EDID 主要靠 I2C Bus 來處理,Raspberry Pi 預設並沒有開啟 I2C Bus,第一次需要手動設定啟動。首先,在 /boot/config.txt 增加下面設定:(ref: ddcutil)

dtparam=i2c2_iknowwhatimdoing

接著執行下面命令,

sudo raspi-config

選擇 Interfacing Options,接著選擇 I2C ,進入後選擇啟動,接著將機器重新啟動。重開機完成後,需要的 I2C Bus 介面裝置就會啟動,可以使用下面命令查詢,看看是否有列出 i2c-2 這個裝置,Raspberry Pi 是透過這個裝置介面跟 HDMI 螢幕溝通的。(ref: Does the Raspberry Pi 3 B+ support I2C?)

ls /dev/i2c*

硬體設定完成後,就可以來安裝需要的軟體。用來讀寫螢幕 HDMI EDID 資料的工具很多,這裡,我們用 edid-rw 這個工具來操作。以下先安裝需要的相關軟體, 接著將 edid-tw 工具程式下載回來:

sudo apt-get install python-smbus edid-decode

git clone https://github.com/bulletmark/edid-rw
cd edid-rw

確定接上螢幕之後,執行下面命令,就會列出該螢幕 EDID 相關資料。請注意 edid-rw 命令參數設定為 2 ,就是指定為 i2c-2 。下圖執行結果是 SHARP 電視取得的資料。

sudo ./edid-rw 2 | edid-decode

edid_1.jpg

下圖是 Asus VK266H 損毀的 EDID 資料,已經全部被清空了。

註解 2019-03-18 093452.jpg

對於一個 EDID 損毀的螢幕,需要找回原本正確的 EDID 資料來寫回螢幕。我們可以從這個網頁 EDID Repository 找回原本的 EDID 資料。

edid_2.jpg

edid_3.jpg從網頁搜尋找到螢幕相對應的 EDID 資料檔案並下載後,取用檔案內最前面 EDID (hex) 那段資料,利用 Hex 編輯軟體 (如:HxD),將其中的 ASCII 顯示的 Hex 資料轉成二進位檔案。

edid_4.jpg

我們可以利用下面程式來解譯這個二進位檔,測試驗證檔案內容正確與否。

edid-decode SOME_EDID_BIN_FILE.bin

如果產生的資料沒問題,就可以用下面命令將這個二進位資料寫回螢幕的 EDID 區域中。

sudo ./edid-rw -w 2 < SOME_EDID_BIN_FILE.bin

如果一切順利,重新將螢幕接上電腦後,一切就恢復正常。

可惜的是,事與願違,HDMI 畫面回來了,但是 HDMI Audio 沒有回來,稍微再看了一下,網站提供的應是 DVI EDID 資料,缺少了 HDMI Audio 部分,有空再研究囉。🙄🙄🙄🙄🙄🙄

 

新增 (2020/4/21): 

最近無聊上網查了一下,EDID Repository 居然多了這台螢幕包含 HDMI Audio 的 EDID Extension Block 資料,還一次多三筆都有 Extension Block,不知道是後來新增的還是當初眼盲沒注意到 😅😅😅。隨選一筆下載製作新的 EDID 二進位檔案,然後上傳到螢幕後,螢幕 HDMI 的聲音就回來了。Finally ………

 

單純紀錄,主要留存自己的記憶,加減參考用囉。

 

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s