X3xx (X300, 301) EDID Flash an Thinkpad X301

gdh9

New member
Themenstarter
Registriert
2 Okt. 2010
Beiträge
43
Ein kleines TUT, wie ich nach einer misslungenen Linux Installation das Thinkpad interne Display wieder nutzen konnte.

vorab: erst komplett durchlesen, sich fragen, ob man es verstanden hat, wenn ja, kann begonnen werden.
geschieht auf eigene Verantwortung!

Ursprünglich wollte ich nicht den Umweg über Linux machen, jedoch zeigt mir das Windowsbasierte EDID Flash Programm "Powerstrip" nicht den gewünschten Monitor an, somit kommt nun der Umweg über Linux.


Ausgangssituation:
Linux Installation abgebrochen, thinkpad Monitor blieb dunkel, bzw. zeigte vertikale Striche an.

vga Buchse genutzt um externen Monitor zu verwenden.

grobes vorgehen:
-richtiges edid besorgen (hatte ein ausdruck von dem richtigen edid)
-live cd/usb stick erstellen
-i2c-tools laden
-Im-sensors laden.
-fehlerhaftes edid auslesen
-bestimmen welche Werte abweichend sind von dem richtigen edid
-neues edid schreiben
-booten und Daumen drücken


genauer:
ich habe das tool linux live usb creator genutzt, um mir einen bootfähigen stick zu erstellenhttp://www.linuxliveusb.com/en/download

da es nur ein temporäres linux ist, habe ich mich für ein etwas kleineres entschieden (lubuntu)

von dem Stick lubuntu gebootet,

terminal geöffnet (es gibt terminals in die man nicht kopieren kann, sucht am Anfang direkt nen terminal aus, in den man kopieren kann, sonst ist es sehr nervig mit der tipperrei und den dadurch verursachten Fehlern.

i2c tools, lm-sensors laden : "sudo apt-get install i2c-tools lm-sensors"

mit "sudo /usr/sbin/sensors-detect" kann man den SMBus controller erkennen.
in meinem Fall war es der i2c-i801

da die Treiber nach der Identifikation wieder entladen sind, erneut laden mit:
"sudo modprobe i2c-i801"
und
"sudo modprobe i2c-dev"

da meist mehrere Sachen an dem i²c bus hängen, muss festgestellt werden, welcher Teilnehmer der gesuchte ist.
dies geht durch "sudo i2cdetect -l"

jetzt sollte eine liste der Teilnehmern gezeigt werden, die an dem bus hängen.
relevant für uns ist der Eintrag "i2c-5 i2c i915 gmbus panel I2C adapter"

um den richtig Eintrag zu finden, nach Panel suchen.
in der ersten spalte steht etwas von i2c-x das x ist der "port" am bus.
bei mir war es Eintrag Nummer 2.

den port müsst ihr euch merken, den brauchen wir später noch.

das edid ist ja in einem eeprom gespeichert, dessen Adresse wir jetzt noch herausfinden müssen.
also suchen wir nochmal auf dem bus, jedoch nach dem zuvor identifizierten "port" (meiner war 2).
"sudo i2cdetect 2"

Continue? [Y/n] Y
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

sowas sollte nun erscheinen.
die 50 in ZEILE 50 und SPALTE 0 ist für uns relevant.
verwechselt niemals ZEILE und SPALTE miteinander, dass könnte fatal werden! überlegt euch etwas, um das nicht zu verwechseln!

jetzt haben wir genauere display infos, an bus "port" 2 und die adresse ist 0x50

jetzt lesen wir das vorhandene edid aus. hat den sinn, dass wenn wir etwas total falsch machen (z.b. falschen Monitor flashen, wir die infos noch irgendwo haben. zum anderen müssen wir ja das edid neu schreiben. um nicht jeden einzelnen Eintrag (256 Zeichen) neu zu schreiben empfiehlt es sich das gelesene edid mit dem richtigen edid zu vergleichen und nur selektiv neue werte zu schreiben.

Edid auslesen:
"sudo i2cdump -r 0-127 2 0x50 b"
die 2 steht für den bus "port" (bei mir 2)

Code:
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f 0123456789abcdef
00: 00 ff ff ff ff ff ff 00 30 ae b0 40 00 00 00 00 ........0??@....
10: 03 13 01 03 80 22 13 78 ea b0 25 9f 59 56 93 26 ?????"?x??%?YV?&
20: 0d 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01 ?PT...??????????
30: 01 01 01 01 01 01 2c 1a 56 45 50 00 0a 30 20 18 ??????,?VEP.?0 ?
40: 34 00 58 c1 10 00 00 18 ce 15 56 45 50 00 0a 30 4.X??..???VEP.?0
50: 20 18 34 00 58 c1 10 00 00 18 00 00 00 0f 00 8b ?4.X??..?...?.?
60: 09 32 8b 09 28 16 09 00 06 af 56 33 00 00 00 fe ?2??(??.??V3...?
70: 00 42 31 35 36 58 57 30 32 20 56 33 20 0a 00 ef .B156XW02 V3 ?.?

in etwa so eine Tabelle sollte ausgespuckt werden

wer sich genau über die aufschlüsselung der zeichen informieren will:https://en.wikipedia.org/wiki/Extend...ification_data

als Kontrolle, ob es wirklich ein edid ist,
EDIDs beginnen immer mit "00 ff ff ff ff ff ff 00". Falls dort etwas anderes steht ist es keine EDID!

abgespeichert wird die edid mit "sudo i2cdump -y -r 0-127 2 0x50 b | cut -b 5-51 | sed 's/ //g' > edid.txt && sed -i '1d' edid.txt"
wobei die 2 wieder mein "port" ist


jetzt geht es langsam zum flashen.

bei mir waren folgende Einträge falsch:
Zeile 10 spalte 0
Zeile 20 spalte 0 - 7
Zeile 70 spalte f

durch nachsehen, welche werte sich geändert haben, habe ich nur 10 befehle gebraucht um das edid lauffähig zu bringen.
sonst wären es 128!!!

mein tip. druckt euch das richtige edid aus und umkreist die Einträge, die geändert werden müssen.

"sudo i2cset 2 0x50 0x10 0x26 b" ist der befehl, die syntax hierzu: i2cset BUSNUMMER ADRESSE(0xYY) OFFSET(0xYY) NEUERWERT(0xYY) MODE

fettgeschrieben ist wieder der "port" (2) die erste 0x50 ist die Adresse des eeproms. die 0x10 ist 0xZEILE1 SPALTE0 (damit wird bestimmt wohin geschrieben wird) und die 0x26 ist der wert der geschrieben werden soll.

noch ein bsp. für Zeile 20 spalte 3

"sudo i2cset 2 0x50 0x23 0x00 b"

es ist wirklich wichtig hierbei einen klaren Kopf zu haben und nicht spalte und Zeile zu verwechseln.
ich habe für die 10 befehle 15 min gebraucht um alles doppelt und dreifach zu prüfen.

wenn ihr alle werte geschrieben habt, terminal schließen und neu starten.
an diesem Moment habe ich mir gedacht, das wird nie und nimmer funktionieren.. hat es aber
smile.gif

beim booten sollte wieder der externe Bildschirm angehen, jedoch spätestens, wenn wieder ein os geladen ist, sieht man den erfolg.... oder auch nicht.


eine sehr genaue Anleitung findet man unter http://thinkwiki.de/Display-EDID_verändern mein vorgehen basierte fast genau auf dieser Anleitung, jedoch gab es kein bsp. falls die zu beschreibenden Zeilen und spalten abweichend sein sollten, deshalb hier nochmal erläutert.


sollte man aus irgend einem Grund keine Möglichkeit haben das edid über einen rechner zu flashen, sollte es noch die Möglichkeit geben den eeprom über ein mikrocontroller zu flashen.

bsp. ein launchpad mit einem msp430 (texas instruments) etwa 5us$
kann auch den i²c bus abhören und auch darauf kommunizieren.
wer ein bisschen programmieren kann, sollte es auch damit hinbekommen.
Ich würde mich freuen, wenn jemand die µC geschichte ausprobiert und seine Erfahrungen mal postet
 
Zuletzt bearbeitet von einem Moderator:
Erstaunlich, das ist schon das dritte X301, bei dem das EDID durch Linux überschrieben wurde. Welche Distribution war es bei Dir? Hier hat LMDE zwei andere anscheinend gehimmelt.

Noch zwei Anmerkungen:
  1. Es gibt das Tool edid-decode, das den EDID dumpen kann.
  2. Ich mal mal den EEPROM eines BoeHydis UXGA mit einem Bus Pirate neu geschrieben. War kein Spass, weil ich es interaktiv im Monitor gemacht habe und alle Werte ueberschreiben musste.
 
Hi, ich kann nur sagen super und Hut ab:cool:, ich hätte das nicht hinbekommen.

Nobby
 
ich glaube linux mint war das
das gleiche problem gibt es auch häufiger mit samsung monitoren, nur samsung war mitlerweile so klug und hat hardware buttons dazwischen gemacht, kannst es also nur noch dumpen, wenn du z.b. + dabei drückst

das decodieren ist ja eigentlich wumpe, kann man über die Registry machen, oder mit powerstrip. viel interessanter wären tools die es über win flashen.

das bus pirate system habe ich mir auch angesehen, ist soweit nichts anderes wie nen µC, der den bus nur neu befeuert und nen paar gimmicks hat wie nen "oszi" bevor ich so ein teil verwende würd ich das lieber über den soundeingang übers mic machen... halte nicht so viel von dem teil.

wäre aber echt mal interessant, wenn du deine erfahrungen mit dem boehydis schreiben könntest


@nobby danke für die blumen, nett ein feedback zu bekommen
 
Zuletzt bearbeitet:
Prima Sache. :thumbup:

Ich habe in Deinem Beitrag oben die untere Hexdump-Tabelle umformatiert, damit sie sauberer aussieht.

Könntest Du Deine Ergebnisse im Wiki-Artikel noch ergänzen, vor Allem bezpglich
mein vorgehen basierte fast genau auf dieser Anleitung, jedoch gab es kein bsp. falls die zu beschreibenden Zeilen und spalten abweichend sein sollten, deshalb hier nochmal erläutert.

Einen Account richte ich Dir dort gerne ein, wenn Du mir Deine Mailadresse per PN zukommenlässt.
 
ich glaube linux mint war das
LMDE = Linux Mint Debian Edition bei den anderen.

das decodieren ist ja eigentlich wumpe, kann man über die Registry machen, oder mit powerstrip. viel interessanter wären tools die es über win flashen.
Falls man den EEPROM komplett beschreibt, könnte man so unter Linux nachsehen, was drin landet und ob die Checksumme OK ist.

das bus pirate system habe ich mir auch angesehen, ist soweit nichts anderes wie nen µC, der den bus nur neu befeuert und nen paar gimmicks hat wie nen "oszi" bevor ich so ein teil verwende würd ich das lieber über den soundeingang übers mic machen... halte nicht so viel von dem teil.
Es kann halt neben i2c noch andere Busse, z.B. SPI und wird angeblich von flashrom unterstützt.

wäre aber echt mal interessant, wenn du deine erfahrungen mit dem boehydis schreiben könntest

Siehe u.a. hier.

Es gibt nicht so viel zu berichten:

Ich hatte ein UXGA Panel ohne EDID, das in ein R61 eingebaut werden sollte. Leere Pads für den i2c EEPROM waren vorhanden. Also eine Platine aus einem defekten Panel besorgt, bei der der i2c EEPROM die richtigen Masse hatte und bei der man mittels Testpunkten gut an den i2c Bus herankam. Drähte angelötet. EDID Inhalt aus einem anderen UXGA Panel ausgelesen und mit dem Bus Pirate Monitor in das EEPROM geschrieben. Dann das EEPROM ausgelötet und auf das UXGA-Panel versetzt. Danach noch vier Widerstände ergänzt, die auch fehlten (2x Pullups an SDA und SCL, 2x 0 Ohm Reihenwiderstände).

Am meisten Sorgen machte ich mir um die Flexverbinder zwischen Platine und LCD-Matrix, da ich die Platine umklappen musste. Das EEPROM wurde auf der Unterseite verbaut.
Deshalb wollte ich das EEPROM auch vor dem Verlöten programmieren, damit die Platine nur kurz aufgeklappt ist. Die Verbinder sind recht empfindlich und nur sehr schlecht reparierbar.

Gruss,
Jörg
 
Nette Sache. Wie kommt es denn genau dazu, dass anscheinend Distributionen EDIDs überschreiben? Und bitte bitte lasst es nicht dabei, sondern schreibt schleunigst einen Bug Report darüber!
 
Moin,

Die überschreibende Linuxversion war LMDE und es ist "nur" das zweite, nämlich jenes von meinem Kumpel der es nicht geschlachtet hat.

Grüße

ingo
 
An dem überschreiben des Chips durch LMDE bei/nach der Installation.
gdh9 hat das X301 welches dort erwähnt wurde von dem erwähnten Kumpel ersteigert. Hab ich ja oben schon erwähnt.

Grüße

ingo

PS: zur Verifikation: X301 persönlich bei Michael B. abgeholt und Bar bezahlt. Rückmeldung ob es funktioniert hat über Email. Zeit: ca. 20 Minuten
 
Zuletzt bearbeitet:
Hi,
An dem überschreiben des Chips durch LMDE bei/nach der Installation.
gdh9 hat das X301 welches dort erwähnt wurde von dem erwähnten Kumpel ersteigert. Hab ich ja oben schon erwähnt.
...
PS: zur Verifikation: X301 persönlich bei Michael B. abgeholt und Bar bezahlt. Rückmeldung ob es funktioniert hat über Email. Zeit: ca. 20 Minuten

Jetzt ist es mir klar, ich wusste nicht dass gdh9 das zweite aus Deinem Thread hat, das bei ebay vor kurzem ueber den Tisch ging.
In #1 klang der TE so, als ob er die Linux-Installation selbst ausgefuehrt hat.

Ist das andere Panel aus Deinem zerlegten X301 ebenfalls durch EDID neuschreiben repariert worden?

Michael B. kenne ich nicht, brauche aber auch keine Verifikation.
 
An dem überschreiben des Chips durch LMDE bei/nach der Installation.
gdh9 hat das X301 welches dort erwähnt wurde von dem erwähnten Kumpel ersteigert. Hab ich ja oben schon erwähnt.

Grüße

ingo

PS: zur Verifikation: X301 persönlich bei Michael B. abgeholt und Bar bezahlt. Rückmeldung ob es funktioniert hat über Email. Zeit: ca. 20 Minuten

ist ja schon erstaunlich, welche wege sowas geht :D
aber zur info, ich hab es gegen 21 uhr abgeholt und saß bis 2:30 morgens dran, als ich das Thinkpad neu gebootet habe...
jetzt würde ich es in 20 min schaffen, da ich weiß, wie es geht


Das Display liegt noch hier, genau wie viele andere bis jetzt noch unverkaufte Teile des X301.

ingo

was liegt denn da noch, bzgl. wwan /gps karte oder ram für update auf 8gb
 
Zuletzt bearbeitet:
habe dasselbe problem (auch nach installation von linux mint), leider aber ein anderes panel verbaut, nämlich das

LTD133EQ1B


weiss jemand wo ich korrekte edid werte herbekomme für dieses panel?

hier mein edid mit den ersten abweichungen vom weiter oben im thread genannten markiert, allerdings habe ich dann
aufgehört da es ja ein anderes panel ist...

wer mir hilft bekommt virtuellen dank in unermesslicher größe

0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00:00 ff ff ff ff ff ff 00 30 ae 74 4000 00 00 00 ........0?t@....
10:2f 13 01 03 80 1d12 78 ea d0 a3 96 5b 57 9426 /??????x????[W?&
20:ff ff ff ff ff ff ff ff 0101 01 01 01 01 01 01 ........????????
30:01 01 01 01 01 01 d8 27 a0 8c 51 841a 30 3020 ???????'??Q??00
40:36 00 1fb4 10 00 00 18 34 21 a0 8c 51 84 1a 30 6.???..?4!??Q??0
50:30 20 36 00 1f b4 10 00 00 18 00 00 00 0f 00 95 0 6.???..?...?.?
60:0a 32 95 0a 28 1e 01 00 30 64 00 55 00 00 00 fe ?2??(??.0d.U...?
70:00 4c 54 44 31 33 33 45 51 31 42 0a 20 20 00 63 .LTD133EQ1B? .c

 
habe dasselbe problem (auch nach installation von linux mint), leider aber ein anderes panel verbaut, nämlich das

LTD133EQ1B

weiss jemand wo ich korrekte edid werte herbekomme für dieses panel?
Du fragst hier im Forum :). Hier ist das EDID meines LTD133EQ1B:
Code:
00ffffffffffff0030ae744000000000
24120103801d1278ead0a3965b579426
23525900000001010101010101010101
010101010101d827a08c51841a303020
36001fb4100000183421a08c51841a30
302036001fb4100000180000000f0095
0a32950a281e010030640055000000fe
004c5444313333455131420a2020006f

Kannst Du beschreiben, an welcher Stelle bei der Linux Mint Installation das EDID ueberschrieben wurde? Langsam wird es Zeit fuer eine Fehlermeldung, das ist schon das dritte Panel.

EDIT: Ich habe es mal mit dem Output von x301 verglichen: die Unterschiede sind:


  • Offset 0x10-0x11 (x301: 2f,13 ich: 24,12) - week/year of manufacture, kann differieren;
  • Offset 0x20-0x27 (x301: alles 0xff, ich: 23,52,59,00,00,00,01,01) - Chromaticity coordinates und Established timing bitmap, alles 0xff ist sicher falsch.
  • Offset 0x7f: Checksumme

Wenn ich im EDID von x301 die Werte an den Offsets 0x20-0x27 durch 23,52,59,00,00,00,01,01 ersetze (alles hex), ist edid-decode zufrieden und auch die Checksumme in 0x7f stimmt wieder.
Aber bitte noch mal pruefen vor dem Zurueckschreiben.
 
Zuletzt bearbeitet:
Ich denke jeder kann einfach ein korrektes EDID (samt Offset 0x10-0x11 - week/year of manufacture und Checksumme) nehmen und
das eigene überbügeln, dann hat man keine Notwendigkeit die Checksumme auszurechnen.

Das Töten der Werte Offset 0x20-0x27 (Chromaticity coordinates und Established timing bitmap) geschah bei mir im Verlauf der Installation von LMDE MATE 64bit.

Ich habe mir zur Korrektur ein LibreOffice Calc sheet gemacht (siehe Bild) das alle Befehle ausrechnet, wer es haben will soll sich bei mir melden.

Da ich das x301 derzeit nicht wirklich brauche versuche ich es mal zu reproduzieren, jetzt wo ich den Fix automatisiert habe...:)

=> Ergebnis: nicht reproduzierbar. Tritt wohl nicht immer auf...

EDID-Correction.png
 
Zuletzt bearbeitet:
  • ok1.de
  • thinkstore24.de
  • ok2.de - Notebook Computer Server
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben