Neuer Tag, neue Reparatur. Dieses mal steht ein Philips 5038k mit 42″ auf meinem Reparaturtisch. Ein schöner, flacher 3D Fernseher mit seitlichem Ambilight, WLAN und elegantem Standfuß. Ich habe ihn günstig gekauft über eBay.
Fehlerbeschreibung
Der Fernseher lässt sich einschalten. Das Philips Logo kommt und Ambilight geht an. Kurz nach dem Philips Logo wird der aktuelle Sender angezeigt. Dann friert der Fernseher ein und reagiert nicht mehr auf die Nah- und Fernbedienung.
Fehlersuche
Die Fehlersuche gestaltet sich eigentlich denkbar leicht. Da die Hardware zu funktionieren scheint und auch das Philips Logo wieder verschwindet, deutet alles auf einen Softwarefehler hin. – Hoffentlich!
Fehlerbehebung
Ich habe die aktuelle Software für den TV als .zip Datei direkt von der Philips Support Seite heruntergeladen. Zunächst muss ein USB-Stick vorbereitet werden, indem er unter Windows im FAT Dateisystem formatiert wird.
In der .zip Datei befindet sich nur eine Datei mit dem Namen “autorun.upg”. Diese wird direkt in das Hauptverzeichnis des USB-Sticks kopiert. Die genaue Prozedur zum Software-Update eines Philips TVs habe ich hier als Schritt-Für-Schritt Anleitung zusammengefasst.
Nun habe ich alle Kabel vom Fernseher entfernt, den USB-Stick eingesteckt und den TV durch Einstecken des Stromkabels eingeschaltet. Reaktion: keine. Mist!
Die gleiche Prozedur habe ich dann noch mit einem anderen USB Stick probiert. Dieses mal 4GB, aber auch das brachte keinen Erfolg.
Nach längerer Recherche im Philips Support Forum habe ich einen Trick gefunden, der das Update erzwingen soll. Dafür wird die Datei “autorun.upg” auf dem USB-Stick in einen neuen Ordner mit dem Namen “upgrades” verschoben und umbenannt in z.B. “test.upg”. Leider hat das bei mir ebenfalls nicht funktioniert.
Kondensatoren Messung
Nach einem Tipp von dem User thoma aus dem repdata Forum habe ich einige Kondensatoren auf der Rückseite des Mainboards gemessen. Diese Kondensatoren befinden sich in der Nähe der CPU.
Zum einen habe ich die Impedanz (Ohm) der Kondensatoren gemessen, zum anderen habe ich die anliegende Spannung im Betrieb gemessen. Die Vorgabe ist laut Service Manual: Impedanz größer als 300 Ohm und eine Spannung von 0,75 V ± 5%. Also sollten die Spannungen zwischen 0,712 – 0,787 V liegen.
Folgende Werte habe ich gemessen:
C4155 522 ohm 0.770 V C4158 522 ohm 0.764 V C4157 520 ohm 0.768 V C4156 519 ohm 0.767 V C4206 523 ohm 0.766 V C4215 520 ohm 0.769 V C4197 521 ohm 0.767 V C4201 521 ohm 0.769 V Range: 0.7125 - 0.7875 V
Also alles im vorgegebenen Bereich und keinerlei Ausreißer. Solltest du einen TV mit diesem Mainboard haben und die Werte liegen nicht im vorgegebenen Bereich musst du die entsprechenden Kondensatoren tauschen.
Update 1:
Mir ist aufgefallen, dass er mit eingestecktem SAT Kabel das TV Programm mit Ton weiterhin abspielt, auch wenn er sich nicht mehr bedienen lässt und “festhängt”. Ich kann ihn dann auch mit der Fernbedienung abschalten, woraufhin aber keine Standby LED angeht. Des Weiteren verbraucht er dann ca. 18 W. Also geht er definitiv nicht in den Standby Modus.
Update 2:
Das Firmware Update hat nun nach langem Rumprobieren funktioniert. Leider hat sich am Fehler nichts geändert. Up das Update zu installieren habe ich den USB Stick erst kurz nach dem Philips Logo eingesteckt, also in dem Moment als der TV noch reagiert.
Update 3:
Um herauszufinden was vielleicht in dem TV vor sich geht habe ich an dem Service Port auf dem Mainboard des TVs meinen Logic Analyzer angeschlossen. Dieses Mainboard hat einen Service Port mit einem 3 Pin Stecker. Der mittlere Pin liegt auf Masse. Das habe ich mit meinem Multimeter gemessen.
Ich habe einfach mal blind drauf los gemessen und auf eine steigende Flanke an dem linken Pin getriggert. Es lag direkt ein Signal an, der rechte Pin blieb dauerhaft HIGH. Das sieht also sehr nach einer einfachen seriellen Schnittstelle (UART) aus, was auch sehr typisch für Diagnose-Ports ist. Genauer gesagt ist dieses Signal ein 8N1 UART mit 3,3 V Pegel und 115200er Baud.
Ich habe das Signal direkt vom Logic Analyzer decodieren lassen und als ASCII darstellen lassen. Es kommt lesbarer Text heraus, indem es um irgendwas mit Internet und Skype geht.
Der Text ist aber viel zu lang um ihn mit meinem Logic Analyzer auszuwerten. Das geht nur mit einer Konsole auf einem PC vernünftig. Da ich eh die Arduino IDE installiert habe und diese einen schön schlichten seriellen Monitor integriert hat, habe ich diesen dafür genommen.
Als USB zu Seriell Wandler habe ich einen FTDI auf einem GY232V2 Modul genommen und auf ein Breadboard gesteckt. Zur Sicherheit habe ich auf der TX Leitung einen Spannungsteiler eingebaut, denn der FTDI arbeitet mit 5 V, das Mainboard aber nur mit 3,3 V. Gesendet habe ich zwar nichts an den TV, aber sicher ist sicher.
Als alles zusammengesteckt war habe ich die Konsole auf dem PC geöffnet und danach den Fernseher eingeschaltet, Es kommt richtig viel heraus! Die UART Schnittstelle spiegelt die Konsole des Betriebssystems des Fernsehers wieder. So wie man es z.B. von einem Raspberry Pi kennt. – Sehr schön! 🙂
Die ganze Boot Sequenz ist einige tausend Zeilen lang, aber die ist eigentlich nicht relevant für dieses Problem. Für die, die sich die Boot Sequenz ansehen möchten, habe ich sie hier veröffentlicht. Relevant ist nur, was passiert wenn der Fernseher nicht mehr reagiert. Ich habe auf eine unbehandelte Ausnahme gehofft, die den Fernseher abstürzen lässt.
Und so ähnlich war es dann auch. Sobald der Fernseher nicht mehr reagiert, wurde folgendes immer wieder ausgegeben:
[skype]>############ isIpReady->get ip :0.0.0.0 [skype]>############ net_get_dns1 ->ret = 0,dns = 0.0.0.0 [skype]>############ net_get_dns2 ->ret = 0,dns = 0.0.0.0 [skype]>[SKYPE AP] Login received SKYPE_UI_MSG_NETWORK_READY,ACCOUNT::STATUS =1. [skype]>[SKYPE AP] Try to loginDefault. [skype]>[SKYPE AP] loginDefault,ACCOUNT::STATUS =1. [skype]>Password was not saved for given account: unable to login. [skype]>mcall receive message, id = 6 [skype]>accessing File=[comps/mcall/mcall.cpp]Function=[handleMessage]Line=[71] [skype]>leaving File=[comps/mcall/mcall.cpp]Function=[handleMessage]Line=[311] [skype]>[MENU]- receive message, id = 6 [skype]>[SKYPE AP]LoginComponent receive message, id = 6 [skype]>[Setting] receive message, id = 6 [skype]>[ContactList]receive message,id=6 [skype]>[Personalize] receive message, id = 6 [skype]>[CallHistory] receive message, id = 6 [skype]>[Skype AP] Send SKYPE_UI_MSG_NETWORK_READY to components.
Das “[skype]>” beutet, dass die Meldung von der Skype Applikation kommt. Die Skype App versucht also dauerhaft mit dem Internet zu verbinden um sich anzumelden. Statt nach einigen Versuchen aufzugeben, wiederholt sich diese Sequenz so oft, dass die CPU scheinbar komplett ausgelastet ist.
Ich habe dann einfach mal ein Netzwerkkabel an den TV angeschlossen, und Folgendes ist passiert:
[ 1404.517071] star: port status change [ 1404.517876] star: Link status: Up [ 1404.521173] star: Full Duplex - 100 Mbps mode [ 1404.525513] star: TX flow control:On, RX flow control:On [ 1404.537928] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [dtv_app_mtk]>[INET] 1399.486, ni_mon_thread.1861 >>> eth0 is plug! [dtv_app_mtk]> [PHM_NWZD] <_nwzd_nw_notify_callback> e_nfy_id=1 [dtv_app_mtk]> [PHM_NWZD]<_nwzd_nw_notify_handler> e_page_id=0 [dtv_app_mtk]>[NETTV][M]>>>>>>>>>>[TvControl.cpp][176], _nw_notify_handler() nfy_id = 1 [dtv_app_mtk]> [PHM_NWZD]<_nwzd_nw_notify_handler> NW_NFY_ID_ETHERNET_PLUGIN [658:IMnettvP_SetConnectionState]> [P]========>>Connection state = 3 [dtv_app_mtk]>[NETTV][M]>>>>>>>>>>[TvControl.cpp][137], _set_nw_connection_state() [dtv_app_mtk]>[4200: hbbctrl_SetNetworkStatus]> hbbctrl_SetNetworkStatus : 0 [dtv_app_mtk]> [dtv_app_mtk]>- WLAN_NFY_MSG_OK [skype]>############ isIpReady->get ip :0.0.0.0 [skype]>############ net_get_dns1 ->ret = 0,dns = 0.0.0.0 [skype]>############ net_get_dns2 ->ret = 0,dns = 0.0.0.0 [skype]>[SKYPE AP] Login received SKYPE_UI_MSG_NETWORK_READY,ACCOUNT::STATUS =1. [skype]>[SKYPE AP] Try to loginDefault. [skype]>[SKYPE AP] loginDefault,ACCOUNT::STATUS =1. [skype]>Password was not saved for given account: unable to login. [skype]>mcall receive message, id = 6 [skype]>accessing File=[comps/mcall/mcall.cpp]Function=[handleMessage]Line=[71] [skype]>leaving File=[comps/mcall/mcall.cpp]Function=[handleMessage]Line=[311] [skype]>[MENU]- receive message, id = 6 [skype]>[SKYPE AP]LoginComponent receive message, id = 6 [skype]>[Setting] receive message, id = 6 [skype]>[ContactList]receive message,id=6 [skype]>[Personalize] receive message, id = 6 [skype]>[CallHistory] receive message, id = 6 [skype]>[Skype AP] Send SKYPE_UI_MSG_NETWORK_READY to components. [dtv_app_mtk]> [658:IMnettvP_SetConnectionState]> [P]========>>Connection state = 4 [dtv_app_mtk]>[4200: hbbctrl_SetNetworkStatus]> hbbctrl_SetNetworkStatus : 0 [dtv_app_mtk]> [dtv_app_mtk]>[1343:IMnettvP_Ipepg_SetDayTimeSaving]> [P]========>>DayTimeSaving = 0 [dtv_app_mtk]>[1349:IMnettvP_Ipepg_SetTimeZone]> [P]========>>TimeZone = 3600 [dtv_app_mtk]>[2483: brctl_handle_ext_message]> New local Time: Thu Jan 1 01:23:20 1970 [dtv_app_mtk]> [dtv_app_mtk]>[2492: brctl_handle_ext_message]> Daylight Saving Time is not in effect. [dtv_app_mtk]>
Diese Konsolenausgabe lässt sich gut verstehen. Als erstes registriert der Fernseher, dass ein Netzwerkkabel eingesteckt wurde. Nun versucht er eine Verbindung aufzubauen und sich eine IP Adresse zu “holen”. Selbst in diesem Ablauf kommt die Skype App wieder dazwischen und meldet, dass eine Verbindung zum Internet nicht möglich ist. – Das ist ja auch klar, der Verbindungsaufbau ist zu diesem Zeitpunkt ja auch noch nicht abgeschlossen. Nach der Ausgabe der Skype App läuft der Verbindungsaufbau allerdings weiter und gelingt.
Nun kam noch eine weitere, aber viel längere Ausgabe der Skype App:
[skype]>############ isIpReady->get ip :0.0.0.0 [skype]>############ net_get_dns1 ->ret = 0,dns = 0.0.0.0 [skype]>############ net_get_dns2 ->ret = 0,dns = 0.0.0.0 [skype]>[SKYPE AP] Login received SKYPE_UI_MSG_NETWORK_READY,ACCOUNT::STATUS =1. [skype]>[SKYPE AP] Try to loginDefault. [skype]>[SKYPE AP] loginDefault,ACCOUNT::STATUS =1. [skype]>Password was not saved for given account: unable to login. [skype]>mcall receive message, id = 6 [skype]>accessing File=[comps/mcall/mcall.cpp]Function=[handleMessage]Line=[71] [skype]>leaving File=[comps/mcall/mcall.cpp]Function=[handleMessage]Line=[311] [skype]>[MENU]- receive message, id = 6 [skype]>[SKYPE AP]LoginComponent receive message, id = 6 [skype]>[Setting] receive message, id = 6 [skype]>[ContactList]receive message,id=6 [skype]>[Personalize] receive message, id = 6 [skype]>[CallHistory] receive message, id = 6 [skype]>[Skype AP] Send SKYPE_UI_MSG_NETWORK_READY to components. [skype]>############ isIpReady->get ip :0.0.0.0 [skype]>############ net_get_dns1 ->ret = 0,dns = 0.0.0.0 [skype]>############ net_get_dns2 ->ret = 0,dns = 0.0.0.0 [skype]>[SKYPE AP] Login received SKYPE_UI_MSG_NETWORK_READY,ACCOUNT::STATUS =1. [skype]>[SKYPE AP] Try to loginDefault. [skype]>[SKYPE AP] loginDefault,ACCOUNT::STATUS =1. [skype]>Password was not saved for given account: unable to login. [skype]>mcall receive message, id = 6 [skype]>accessing File=[comps/mcall/mcall.cpp]Function=[handleMessage]Line=[71] [skype]>leaving File=[comps/mcall/mcall.cpp]Function=[handleMessage]Line=[311] [skype]>[MENU]- receive message, id = 6 [skype]>[SKYPE AP]LoginComponent receive message, id = 6 [skype]>[Setting] receive message, id = 6 [skype]>[ContactList]receive message,id=6 [skype]>[Personalize] receive message, id = 6 [skype]>[CallHistory] receive message, id = 6 [skype]>[Skype AP] Send SKYPE_UI_MSG_NETWORK_READY to components. [skype]>############ isIpReady->get ip :0.0.0.0 [skype]>############ net_get_dns1 ->ret = 0,dns = 0.0.0.0 [skype]>############ net_get_dns2 ->ret = 0,dns = 0.0.0.0 [skype]>[SKYPE AP] Login received SKYPE_UI_MSG_NETWORK_READY,ACCOUNT::STATUS =1. [skype]>[SKYPE AP] Try to loginDefault. [skype]>[SKYPE AP] loginDefault,ACCOUNT::STATUS =1. [skype]>Password was not saved for given account: unable to login. [skype]>mcall receive message, id = 6 [skype]>accessing File=[comps/mcall/mcall.cpp]Function=[handleMessage]Line=[71] [skype]>leaving File=[comps/mcall/mcall.cpp]Function=[handleMessage]Line=[311] [skype]>[MENU]- receive message, id = 6 [skype]>[SKYPE AP]LoginComponent receive message, id = 6 [skype]>[Setting] receive message, id = 6 [skype]>[ContactList]receive message,id=6 [skype]>[Personalize] receive message, id = 6 [skype]>[CallHistory] receive message, id = 6 [skype]>[Skype AP] Send SKYPE_UI_MSG_NETWORK_READY to components. [skype]>############ isIpReady->get ip :0.0.0.0 [skype]>############ net_get_dns1 ->ret = 0,dns = 0.0.0.0 [skype]>############ net_get_dns2 ->ret = 0,dns = 0.0.0.0 [skype]>[SKYPE AP] Login received SKYPE_UI_MSG_NETWORK_READY,ACCOUNT::STATUS =1. [skype]>[SKYPE AP] Try to loginDefault. [skype]>[SKYPE AP] loginDefault,ACCOUNT::STATUS =1. [skype]>Password was not saved for given account: unable to login. [skype]>mcall receive message, id = 6 [skype]>accessing File=[comps/mcall/mcall.cpp]Function=[handleMessage]Line=[71] [skype]>leaving File=[comps/mcall/mcall.cpp]Function=[handleMessage]Line=[311] [skype]>[MENU]- receive message, id = 6 [skype]>[SKYPE AP]LoginComponent receive message, id = 6 [skype]>[Setting] receive message, id = 6 [skype]>[ContactList]receive message,id=6 [skype]>[Personalize] receive message, id = 6 [skype]>[CallHistory] receive message, id = 6 [skype]>[Skype AP] Send SKYPE_UI_MSG_NETWORK_READY to components.
Als das durch war reagierte der Fernseher wieder und ließ sich bedienen. Danach habe ich den Fernseher über das Menü zurückgesetzt und neuinstalliert. Nun funktioniert er wieder tadellos. 🙂
Ob das ein Fehler der Skype App ist oder diese im Sheduler einfach zu hoch priorisiert ist kann ich nicht sagen. Ich denke aber das ließe sich durch ein Firmwareupdate seitens Philips beheben.