長年使っていたフルHDディスプレイが突然フルHDではなく1024x768や800x600の解像度しか受け付けなくなってしまいました
デバイスマネージャーを見てみると「汎用非PnPモニター」と表示されていてディスプレイをちゃんと認識していないことがわかりました
症状
メーカーはAOCで2011年に購入し、接続はHDMIで行っています
起動時にディスプレイを接続しておけば最低限「汎用非PnPモニター」として認識されるのですが、起動後に接続した場合は認識されずに何も出力されません
逆に考えるとなりふりかまわず出力してくれるソース機器であれば表示してくれます
例えばNintendo SwitchはSwitch側で設定した出力でずっと出力します
なので接続すると何事もなかったかのように映像が表示されます
このことからディスプレイの表示機能自体に問題はなくディスプレイの認識周辺の機能に問題があることがわかります
おそらくホットプラグ検出あたりが死んだのかEDIDがうまく読み込めていないのかということで当たりをつけました
故障原因
買ってから10年近く立っていたので基板自他に損傷があったら諦めようかと思いとりあえず分解してみました
特に変なところはなかったのでとりあえず問題なさそうです
ホットプラグ検出についてですが特に検証方法が思いつかなかったのでパス
最後にEDIDについてです
ロジアナで読みだしたところ先頭から8バイトはヘッダーで1バイト目と8バイト目が0x00、残りは0xFFになるはずなのですが2バイト目が0xA1と書き換わってしまっています
ヘッダーが狂ってしまっていたのでディスプレイとして認識してくれなかったのでしょう
それ以外はおそらく問題ない値のような気がします
ということでEDIDが保存されているEEPROMを書き換える必要がでてきました
修理
EEPROMのインターフェイスはI2Cで、ディスプレイ接続時にソース(送信)とシンク(受信)でやりとりをして情報を得る構造です
I2Cで動作していることは知っていましたが、単純なEEPROMの書き換えで変更できるのかは自信がなかったのですが先駆者がいたようなのでありがたく使用させてもらいました
EDID_Writer
相当古い形式のArduinoだったのでライブラリのメソッド名が変わっていたのですが適当に書き換えつつ0xA1を0xFFに書き換えるように変更しました
変更箇所
1 | edidarray[1] = 0xff |
あとは実際に実行して書き換えるだけです!
シリアルターミナルを開いてr(読み込み)->c(変更)->d(確認)->w(書き込み)->r(再確認)
これだけで実際に書き換えることができました
ライトプロテクトなどがあるのかなと思っていたのですが何もなくこんな簡単に書き換えられるのは問題だと思うのですがね…
まだまだ現役で活躍してくれそうです