L'esistenza della memoria EDID è sconosciuta ai più. E' una EEPROM che si trova nel monitor e contiene i dati necessari alla corretta impostazione dello stesso. In pratica serve per determinare la corretta risoluzione e gli altri parametri di funzionamento. Con google si trovano un po' di informazioni. Quello che meglio si adatta in caso di problemi l'ho trovato alla pagina sites.google.com/site/chrisbecke/home/edid-reprograming; qualcosa anche su en.wikipedia.org/wiki/Display_Data_Channel
Il problema sorge nel momento in cui questa memoria contiene informazioni errate: il monitor, pur perfettamente funzionante, non viene riconosciuto neppure dal BIOS e quindi appare rigorosamente spento, senza mostrare neppure il logo della scheda madre.
Personalmente ho avuto due volte questa "brutta" esperienza con il mio portatile. Semplicemente il display rimaneva completamente nero; al contrario, il monitor esterno era perfettamente funzionante.
Premessa: quello che scrivo è testato solo sul mio portatile (e non ho intenzione di fare esperimenti con altri PC, per ovvie ragioni). Il rischio di far danni permanenti lo potrei definire "moderato" se vengono fatte solo letture della memoria, "alto" se provo a scrivere. Quindi chi vuole fare esperimenti è avvisato!
Il sistema che uso è Debian testing AMD64. La scheda grafica è una VGA ATI HD3400 con driver free. Occorre però sottolineare che il problema è indipendente dal sistema operativo usato e dalla scheda video: in teoria spostare il monitor su un altro PC avrebbe confermato il mancato funzionamento (operazione non verificata visto che si tratta del monitor di un portatile...)
Se l'LCD funziona normalmente, l'uso del comando seguente, come root, permette di leggere il contenuto della memoria EDID:
root@vv-studio15:/home/vv# get-edid | parse-edid
Va usato prima di avere problemi. Il primo comando legge la EEPROM dell'LCD (128 byte); è l'ideale per creare un file da conservare a futura memoria.
root@vv-studio15:/home/vv# get-edid > myedid.bin
Il comando parse-edid "decodifica" il file binario appena generato, altrimenti decisamente criptico. Nel mio caso ottengo (in estratto) cose del tipo:
| parse-edid: EDID checksum passed.
| Mode "1440x900" # vfreq 60.002Hz, hfreq 54.721kHz
| DotClock 108.020000
| HTimings 1440 1504 1536 1974
| VTimings 900 903 906 912
| Flags "-HSync" "+VSync"
| EndMode
Quest'ultimo blocco richiama le "Modeline" che un tempo si mettevano a mano nella configurazione di X (e che comunque ora si può leggere nel log di Xorg). Ovviamente i numeri cambiano a seconda del monitor, il mio è un pannello LCD AUO:7743 1440x900.
Se il BIOS non vede l'LCD (come mi è successo) il comando sopra descritto non funziona. Gli strumenti diagnostici del produttore, ovviamente usati col monitor esterno, semplicemente mostrano un laconico:
Unable to access EDID EEPROM (error code 2000-0321)
A questo punto occorre leggere direttamente dal bus i2C, secondo i seguenti passi:
Il mio portatile ha sei bus i2c, penso una coppia (!?) per ciascun monitor potenziale (VGA, HDMI, LDVS).
La ricerca ha successo se si trova una tabella con un 50, come quella che segue, in estratto:
|40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Il risultato è una tabella in cui i primi 8 byte devono essere quelli mostrati qui sotto:
|00: 00 ff ff ff ff ff ff 00 06 af 77 43 00 00 00 00
Se così non è, la memoria EDID contiene informazioni errate. Nel mio caso la lettura dava, come secondo ed terzo byte, 0x7f. Quindi il BIOS disattivava il monitor del portatile in quanto non riconosceva l'header EDID.
Li ho "corretti" a mano con (ATTENZIONE: pericoloso! Se sbagliate "perdete" il monitor)
root@vv-studio15:/home/vv# i2cset -y 0 0x50 0x01 0xFF
root@vv-studio15:/home/vv# i2cset -y 0 0x50 0x02 0xFF
Al reboot tutto ha funzionato!
Parole chiave: Debian wheezy – Dell studio 15 - Dell 1537 - EDID - VGA ATI HD3400
Il taccuino tecnico - Permanentemente in fase di
riscrittura
Copyright 2013-2024, Vincenzo Villa (https://www.vincenzov.net)
Quest'opera è stata rilasciata con licenza Creative Commons | Attribuzione 4.0 Internazionale (CC BY 4.0)