Tuto correction réparation EDID corrompu gratuitement - Ecran - Hardware - Périphériques
Marsh Posté le 31-03-2019 à 13:28:38
Salut j'ai réussi à réparer l'edid de mon viewsonic vx2025wm grâce à ce tuto, merci pour la documentation sans quoi j'aurais été obligé de dépenser de l'argent pour powerstrip ou alors chopper des virus en essayant de le trouver autrement .
Je trouve ça triste pour l'auteur que son topic à bider alors que son tuto m'a énormément aider.
Marsh Posté le 13-03-2011 à 13:05:40
Indroduction
Bonjour à tous,
N'ayant pas vraiment trouvé mon bonheur sur internet j'ai décidé de faire un mon premier tutoriel suite a un problème que j'ai eu la corruption de l'EDID de mon projecteur. Quand je parle de trouver mon bonheur c'est une solution pour restaurer mon EDID gratuitement, il y a bien une solution avec un logiciel ddcw.exe mais dont tout les liens semble être mort.
Comme je ne suis pas un pro du pingouin si il y a une commande qui pourrait être amélioré, simplifier ou ajouté, n'hésitez pas. Exemple pour récupérer la table EDID actuel, directement dans un fichier car les logiciels que j'ai testés effectuent des corrections quand l'EDID est corrompu.
Mise en garde
Attention vous allez entrer dans un monde ou une erreur peut être fatale à votre ordinateur hardwarement parlant. Donc si vous n'êtes pas sûr ou habitué à taper des lignes dans un terminal linux je vous conseille de demander à un ami plus expérimenté de vous aider.
Ma Configuration:
Carte mère : Formula Crosshair II
Carte graphique : Nvidia gtx 260
Projecteur : Optoma HD82
OS : Windows 7, Ubuntu 10.10
Projecteur connecté sur l'HDMI de la carte mère au travers d'un commutateur HDMI (utilisation de la carte graphique au travers du SLI au besoin). Sur le commutateur j'ai également un récepteur satellite.
Symptôme
Quand j'allume mon ordinateur, il ne démarre pas, bien que les LED et ventilateur s'allume. Si je branche le projecteur sur la carte graphique, l'ordinateur démarre mais avec une résolution réduite que l'on ne peut pas augmenter.
Sur le récepteur sat une page nouvelle me demande si l'écran supporte bien une résolution full-HD.
Donc on remarque qu'il manque des informations concernant les possibilités d'affichage de mon projecteur vidéo. Après quelque recherche il semblerait que certaine carte NVIDIA ont tendance à corrompre l'EDID de certain moniteur, projecteur ou télévision.
Qu'es que EDID
L'EDID sont des informations qui se trouve à l'intérieur de l'écran. Ces informations vont être utilisé par les appareils sur lequel l'écran est branché, pour qu'il puisse connaître les caractéristiques et possibilités de celui-ci. Une fois ses informations connues la carte graphique ou tout autre appareil, va adapter la résolution, le taux de rafraichissement et d'autre paramètre pour avoir la « meilleur image » possible. Il sert également de garde fou pour des configurations inadaptées.
À quoi ressemble EDID
L'EDID est contenu dans une mémoire EEPROM ayant une interface I2C. Une mémoire EEPROM possède la faculté de pouvoir effacer et ou modifier chaque byte indépendament des autres. Avantage sur les mémoires flash qui doivent être effacé par bloc de byte puis réécrit. Autre avantage elle garde en mémoire leurs informations en l'absence d'alimentation.
L'EDID est une table de nombre qui est généralement représenté en hexadécimal. Vous trouverez plus informations sur la structure de cette table sur wikipedia. Mais je vais vous donner quelques informations simples sur la structure de cette table.
1) La table doit commencer par :
0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00
2) Le registre 127 est se que l'ont appel un checksum. Il permet de vérifier l'intégrité des données contenues dans la table. Se checksum est simple comme la table contient des nombres on fait la somme de tout les nombres de la table modulo 256 et on doit obtenir 0x00. En d'autre terme on adapte le registre 127 pour que la somme de tout les bytes la table (registre 127 compris) donne un multiple de 256. Donc si la somme de tout les nombres n'est pas un multiple de 256, c'est qu'il y a une erreur dans la table, ce qui confirme que la table a été modifiée.
Détecter l'erreur
Alors comment savoir si mon EDID est faux. Première chose à faire essayer de trouver sur internet un EDID fonctionnel de votre écran faites attention la version HDMI ou VGA ne sont pas les même donc il y a une table EDID par type de connecteur. Attention avec certain connecteur DVI qui combine l'analogique (VGA) et le digital (HDMI) cela dépend de leur utilisation. Ne me demander pas ou se trouve les tables EDID de votre écran le mien je l'ai trouvé après plusieurs heurs sur un site russe.
Autre chose à avoir sous la main est le programme « Monitor Asset Manager MonInfo », il permet de décoder les informations contenues dans la table ainsi que d'indiquer si le checksum est correcte ou non. Comparer les informations pour voir si c'est la table peut correspondre à votre écran. Il suffit de copier la table trouvée de la coller dans le fichier texte attention seulement la table, et ouvrir le fichier.
Exemple
Dans mon cas, j'ai trouvé sur internet la table suivante :
Table Internet
Raw data
00,FF,FF,FF,FF,FF,FF,00,3E,14,82,00,EA,00,00,00,04,13,01,03,80,00,00,78,0A,1C,43,A4,57,4B,A8,26,
0C,49,4E,FF,FF,80,81,80,81,00,90,40,71,4A,71,40,71,59,61,59,81,40,02,3A,80,18,71,38,2D,40,58,2C,
45,00,C4,8E,21,00,00,1A,01,1D,00,BC,52,D0,1E,20,B8,28,55,40,C4,8E,21,00,00,1E,00,00,00,FC,00,4F,
70,74,6F,6D,61,20,48,44,38,32,0A,20,00,00,00,FD,00,0F,63,0F,78,12,00,0A,20,20,20,20,20,20,01,95,
02,03,17,31,4B,90,1F,05,14,04,22,04,13,03,12,20,66,03,0C,00,10,00,28,01,1D,80,18,71,1C,16,20,58,
2C,25,00,C4,8E,21,00,00,9E,01,1D,80,D0,72,1C,16,20,10,2C,25,80,C4,8E,21,00,00,9E,01,1D,00,72,51,
D0,1E,20,6E,28,55,00,C4,8E,21,00,00,1E,8C,0A,D0,90,20,40,31,20,0C,40,55,00,13,8E,21,00,00,18,8C,
0A,D0,8A,20,E0,2D,10,10,3E,96,00,13,8E,21,00,00,18,00,00,00,00,00,00,00,00,00,00,00,00,00,00,B2
Table corrompue de mon HD82
Raw data
21,FF,FF,FF,FF,FF,FF,00,3E,14,82,00,63,00,00,00,13,14,01,03,80,00,00,78,0A,1C,43,A4,57,4B,A8,26,
0C,49,4E,FF,FF,80,81,80,81,00,90,40,71,4A,71,40,71,59,61,59,81,40,02,3A,80,18,71,38,2D,40,58,2C,
45,00,C4,8E,21,00,00,1E,01,1D,00,BC,52,D0,1E,20,B8,28,55,40,C4,8E,21,00,00,1E,00,00,00,FC,00,4F,
70,74,6F,6D,61,20,48,44,38,32,0A,20,00,00,00,FD,00,0F,63,0F,78,12,00,0A,20,20,20,20,20,20,01,08,
02,03,17,31,4B,90,1F,05,14,04,22,04,13,03,12,20,66,03,0C,00,10,00,28,01,1D,80,18,71,1C,16,20,58,
2C,25,00,C4,8E,21,00,00,9E,01,1D,80,D0,72,1C,16,20,10,2C,25,80,C4,8E,21,00,00,9E,01,1D,00,72,51,
D0,1E,20,6E,28,55,00,C4,8E,21,00,00,1E,8C,0A,D0,90,20,40,31,20,0C,40,55,00,13,8E,21,00,00,18,8C,
0A,D0,8A,20,E0,2D,10,10,3E,96,00,13,8E,21,00,00,18,00,00,00,00,00,00,00,00,00,00,00,00,00,00,B2
La meilleure façon pour débusquer l'erreur est de comparer une table correcte et la table que j'ai récupéré, ainsi que de calculer les checksum. Comme prévu la table correcte a un checksum de 0x00 alors que le checksum que j'ai récupéré de mon projecteur est de 0x21 ou en valeur décimale 33. Pour calculer le checksum pensez à excel ou calc, attention à convertir les valeurs hexa en decimal.
Byte 0x00 (1ère ligne 1ère colonne):
Dans la table correcte on a 0x00 alors que dans la mienne elle contiens 0x21, comme on la vue plus haut la table EDID doit commencer par 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 et non pas 0x21 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00. De plus 0x21 – 0x00 correspond exactement au surplus du checksum donc on peut raisonnablement dire que la valeur que devrai avoir le registre 0x00 est de 0x00.
registre 0x0C ou 12 (1ère ligne 13ème colonne) :
Pourquoi alors aurait-on encore des registres différent ? Et bien si on regarde bien le document de wikipedia les registres 12 à 15 correspondes au numéro de série qui peuvent bien sûr différer d'un projecteur à l'autre.
registres 0x10 et 0x11 ou 16 et 17 (1ère ligne 13ème colonne 17 et 18):
Les registres 0x10 et 0x11, selon wikipedia sont la date de fabrication du beamer et la non plus pas étonnant qu'il soit différent.
registre 0x7F ou 127 (4ème ligne dernière colonne):
Le registre 0x7F ou 127, comme on l'a vue correspond au checksum, comme le numéro de série ou la date de fabrication sont différent alors il est normal que le checksum ne soit pas identique.
Récupérer le EDID de sont écran
C'est maintenant que les choses ce corse. Il faut faire très attention, car si vous modifier quelque chose dans un autre chip par exemple les informations d'une barrette de RAM elle sera perdue. Donc avant d'utiliser la commande i2cset vous devez être sûr à 100% que c'est le bon chip.
Là il faut avoir une distribution linux je n'ai pas testé avec un live CD. Dans tout les cas il faut que le module "i2c-tools" soit installé ainsi que les pilote pour la carte graphique ou se trouve l'écran défectueux. Si l'ordinateur ne peut pas démarrer avec l'écran, il faut en utiliser un autre. Penser à installer un programme type "remote desktop" pour avoir accès à l'ordinateur au travers du réseau. Une fois l'ordinateur prêt :
1) Ouvrer un terminal
2) Ajouter le mdule i2c au fichier de configuration du modprob commande :
# sudo modprobe i2c-dev
3) Lister tout les bus I2C présent avec la commande:
#sudo i2cdetect -l
Résultat:
i2c-0 unknow SMBus nForce2 adapter at 1c00 N/A
i2c-1 unknow TERRATEC S7 MKII N/A
i2c-2 unknow Yuan PD378S N/A
i2c-3 unknow DiBX000 tuner I2C bus N/A
i2c-4 unknow NVIDIA i2c adapter N/A
i2c-5 unknow NVIDIA i2c adapter N/A
i2c-6 unknow NVIDIA i2c adapter N/A
i2c-7 unknow NVIDIA i2c adapter N/A
i2c-8 unknow NVIDIA i2c adapter N/A
i2c-9 unknow NVIDIA i2c adapter N/A
i2c-10 unknow NVIDIA i2c adapter N/A
i2c-11 unknow NVIDIA i2c adapter N/A
i2c-12 unknow NVIDIA i2c adapter N/A
4) Lister les chips connecter sur l'un des bus. Choisir intelligemment. Mon projecteur étant connecté à une carte nvidia inutile de tester i2c-1 TERRATEC.... Après avoir testé i2c-0,4,5 je teste ici I2C-6 car on a mis en paramètre <bus> à 6.
Format:
i2cdetect <bus>
Exemple:
# sudo i2cdetect 6
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-6.
I will probe address range 0x03-0x77.
Continue? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- 3a -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 52 53 54 55 56 57 -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
5) Lister le contenu de l'un de ces chips ici le chip 0x3a du bus 6, on remarque que ca n'a rien a voire avec la table EDID que j'ai récupéré. Donc ce n'es pas le bon.
Format:
I2cdump <bus> <chip>
Exemple:
# sudo i2cdump 6 0x3a
No size specified (using byte-data access)
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-6, address 0x3a, mode byte
Continue? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
20: 8a 8b de bb c9 d8 d0 1d ff ff aa c1 9e c1 9e e3
30: ba cc a8 d8 b2 ed c2 e4 bb 3c 32 e1 e1 e1 00 00
40: 01 c3 00 00 00 00 40 50 2d 01 01 40 01 95 00 a3
50: 10 01 80 ff ff ff 00 00 11 ff ff ff ff ff ff ff
60: 8a 8b de bb c9 d6 d1 1d ff ff aa c1 9e c1 9e e3
70: ba cc a8 d8 b2 ed c2 e4 bb 3c 32 e1 e1 e1 00 00
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
a0: 8b 8b de bb c8 d9 d1 1d ff ff ab c1 9e c1 9e e3
b0: ba cc a8 d8 b2 ed c2 e4 bb 3c 32 e1 e1 e1 00 00
c0: 01 c3 00 00 00 00 40 50 2d 01 01 40 01 95 00 a3
d0: 10 01 80 ff ff ff 00 00 11 ff ff ff ff ff ff ff
e0: 8a 8a de bb c9 d8 d1 1d ff ff aa c1 9e c1 9e e3
f0: ba cc a8 d8 b2 ed c2 e4 bb 3c 32 e1 e1 e1 00 00
6) On passe en revue tout les chips jusqu'à se que l'on trouve ce que l'on cherche, si je compare avec le EDID trouvé sur internet on voit que celui là est très similaire.
Format:
i2cdump <bus> <chip>
Exemple:
# sudo i2cdump 6 0x50
No size specified (using byte-data access)
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-6, address 0x50, mode byte
Continue? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: 21 FF FF FF FF FF FF 00 3E 14 82 00 63 00 00 00
10: 13 14 01 03 80 00 00 78 0A 1C 43 A4 57 4B A8 26
20: 0C 49 4E FF FF 80 81 80 81 00 90 40 71 4A 71 40
30: 71 59 61 59 81 40 02 3A 80 18 71 38 2D 40 58 2C
40: 45 00 C4 8E 21 00 00 1E 01 1D 00 BC 52 D0 1E 20
50: B8 28 55 40 C4 8E 21 00 00 1E 00 00 00 FC 00 4F
60: 70 74 6F 6D 61 20 48 44 38 32 0A 20 00 00 00 FD
70: 00 0F 63 0F 78 12 00 0A 20 20 20 20 20 20 01 08
80: 02 03 17 31 4B 90 1F 05 14 04 22 04 13 03 12 20
90: 66 03 0C 00 10 00 28 01 1D 80 18 71 1C 16 20 58
A0: 2C 25 00 C4 8E 21 00 00 9E 01 1D 80 D0 72 1C 16
B0: 20 10 2C 25 80 C4 8E 21 00 00 9E 01 1D 00 72 51
C0: D0 1E 20 6E 28 55 00 C4 8E 21 00 00 1E 8C 0A D0
D0: 90 20 40 31 20 0C 40 55 00 13 8E 21 00 00 18 8C
E0: 0A D0 8A 20 E0 2D 10 10 3E 96 00 13 8E 21 00 00
F0: 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B2
7) Maintenant qu'on est sûr d'avoir le bon chip et que l'on a identifié le registre erroné, on va pouvoir le changer. Dans mon cas c'est le registre 0x00 du chip 0x50 du bus 6 que l'on va mettre à 0x00 (value) :
Format:
i2cset <bus> <chip> <register> <value>
Exemple:
# sudo i2cset 6 0x50 0x00 0x00
8) On vérifie que la modification a été correctement effectué, on relit le chip. On voit que le registre 0x00 est bien passé de la valeur 0x21 à 0x00 et que le reste n'a pas été touché.
Format:
i2cdump <bus> <chip>
Exemple:
# sudo i2cdump 6 0x50
No size specified (using byte-data access)
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-6, address 0x50, mode byte
Continue? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: 00 FF FF FF FF FF FF 00 3E 14 82 00 63 00 00 00
10: 13 14 01 03 80 00 00 78 0A 1C 43 A4 57 4B A8 26
20: 0C 49 4E FF FF 80 81 80 81 00 90 40 71 4A 71 40
30: 71 59 61 59 81 40 02 3A 80 18 71 38 2D 40 58 2C
40: 45 00 C4 8E 21 00 00 1E 01 1D 00 BC 52 D0 1E 20
50: B8 28 55 40 C4 8E 21 00 00 1E 00 00 00 FC 00 4F
60: 70 74 6F 6D 61 20 48 44 38 32 0A 20 00 00 00 FD
70: 00 0F 63 0F 78 12 00 0A 20 20 20 20 20 20 01 08
80: 02 03 17 31 4B 90 1F 05 14 04 22 04 13 03 12 20
90: 66 03 0C 00 10 00 28 01 1D 80 18 71 1C 16 20 58
A0: 2C 25 00 C4 8E 21 00 00 9E 01 1D 80 D0 72 1C 16
B0: 20 10 2C 25 80 C4 8E 21 00 00 9E 01 1D 00 72 51
C0: D0 1E 20 6E 28 55 00 C4 8E 21 00 00 1E 8C 0A D0
D0: 90 20 40 31 20 0C 40 55 00 13 8E 21 00 00 18 8C
E0: 0A D0 8A 20 E0 2D 10 10 3E 96 00 13 8E 21 00 00
F0: 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B2
C'est fini, on arrête l'ordinateur et on rebranche l'écran comme désiré si c'est pas le cas. Et on redémarre. Et la ça doit être bon.
J'espère que se tuto vous a aidé
Quelque liens:
EDID http://en.wikipedia.org/wiki/Exten [...] ation_data
EEPROM http://fr.wikipedia.org/wiki/Elect [...] nly_memory
I2C http://fr.wikipedia.org/wiki/I2C
hexadecimal http://fr.wikipedia.org/wiki/Hexad%C3%A9cimal
site1: http://www.e-t172.net/blog/posts/2010/09/11/1117
site2: http://www.lm-sensors.org/wiki/man/i2cdetect
site3: http://www.lonelycoder.com/blog/?p=14