Teardown von Trådfri

Nachtrag 18.03.2019: Dieser Blogeintrag wurde mit mehr Details ins Wiki übernommen.

Eigentlich habe ich mich nur in der Ausfahrt vertan – was bin ich nur für ein Dussel. Weil ich aber schon dort war, habe ich mir etwas mitgenommen: Die billigste verfügbare Lampe mit Funkanbindung (GU10 mit 400 lm, 803.652.70) und einen drahtlosen Dimmer (003.478.31), der eine relativ interessante Funktionsweise hat: Man kann ihn in quasi beliebiger Raumlage drehen (liegend oder an der Wand klebend) – die Halterung braucht man dafür nicht. Daher meine Vermutung: Da muss ein mindestens ein Drehratensensor (Gyroskop) oder gar ein Kompass drin sein.

Der Hauptgrund des Einkaufes war – zumal es in meiner Wohnung keine Leuchten mit GU10-Lampen – eher ein Teardown, da ich online bis jetzt noch nichts finden konnte.

Nimmt man das „User-servicable“ Gehäuse vom Dimmer ab, bekommt man folgendes zu Gesicht (klick macht wie immer groß):

Die Typenbezeichnung ist also neben der Ikea-Nummer ICTC-G-1. Obwohl das Gehäuse den Anschein macht, als wäre es Ultraschall-verschweißt, ist es nur geklipst. „Built to a price“, das Schweißen wäre ein zusätzlicher Produktionsschritt und die Spritzguss muss sowieso ran. Mit einem Schraubendreher lassen sich die Gehäuseteile vorsichtig trennen.

Das Rückteil ist weniger spektakulär – ein Magnet und eine Kontaktfeder für die Batterie. In der anderen Hälfte steckt die „Magie“:

Der Codename für das Leiterkärtchen ist allen Anschein nach „Nebula_1F“. Ich bin kein Trekkie, aber ist das eine Anspielung auf eine Schiffsklasse? Halbwegs futuristisch ist die Bedienung immerhin…

Hirn und Herz ist ein Silabs EFR32 MG1P132GI. Für ein Datenblatt sollte man den Suchbegriff auf „EFR32MG1“ einschränken: „Mighty Gecko Mesh Networking Wireless SoCs for Zigbee and Thread“-Produkt-Familie beim Hersteller.

Leider hört es da auch schon fast auf. der IC rechts unten (mit der Aufschrift „I4BEB2 P10343“) dürfte ein EEProm sein (nachdem der Gecko wohl keinen internen hat), bei den oberen beiden (Aufdruck „S2 636“ und „628“) dürfte es sich vermutlich um Magnetometer und Gyro handeln. Letzteres vermutlich eher links oben, da diese Komponenten meines Wissens etwas höhere Pulsstromaufnahmen (schließlich muss die Mikromechanik angeschubst werden) haben.

Schön an den Geckos ist, dass man die Pins ziemlich komfortabel auf die gewünschten Funktionen routen kann, für’s Reverse Engineering ist das allerdings nicht so ganz schön.

Wenn man die Leiterbahnen etwas verfolgt erkennt man, dass es die Leiterkarte mehr als 2 Lagen hat, halbwegs erstaunlich, bei der vergleichsweise geringen Komplexität. Bei der Leiterkartenproduktion wurde das aber wieder reingeholt: Die Leiterkarte ist gestanzt statt gefräst und das Material sieht eher billig als günstig aus. Immerhin sind die Kontakte vergoldet und es wurden einige Testpunkte spendiert – da wird sicher ein I²C dabei sein.

Objekt 2 ist, wie oben geschrieben, eine GU10-Lampe:

Der Deckel bzw. die Optik geht erstaunlich leicht runter, Innen sieht es erstaunlich unspektakulär aus:

Ein herumflatterndes Kupferfähnchen? Sieht nach einem late fix zum Bestehen der EMV-Prüfungen aus. Das LED-Modul hat keine Wärmeleitpaste im Rücken und die leicht verklebte Metallplatte lässt sich mit sanfter Gewalt (mit dem Schraubendreher am Schraubloch hebeln) herausnehmen. Dahinter begrüßt einen die Elektronik – oder zumindest das Funkmodul.

Es sieht besser aus als es ist. Ich bin mir nicht sicher, ob das Shielding seinen Namen verdient hat, es wackelt wie ein Kuhschwanz. Eine saubere elektromechanische Verbindung sieht auf jeden Fall anders aus. Ein bisschen mehr hebeln und das Innere erblickt das Tageslicht:

Das Silabs-Logo lässt sich erahnen, links unten sitzt auch ein „alter Bekannter“. Bin mir ziemlich sicher, dass es sich hier um einen EEProm handelt. Im Bild sieht man auch, dass das Modul by design eher bescheiden eingelötet ist: unter der linken Kante sitzt ein SMD-Widerstand, unter der rechten nicht. Da man sowas maschinell nicht vernünftig gelötet bekommt: Messer rein, Gedärme raus. Natürlich: Modul rein, Lötzinn-Raupe drüber.

Mit ein bisschen Zug kommt auch das Netzteil + Controller raus. Es ist hinten nicht verlötet und sieht von oben zwar sehr eng gepackt aber dennoch halbwegs ok-ish aus:

Von unten sollte man es – zumindest wenn man Elektroniker ist und einen schwachen Magen hat – besser nicht ansehen. Verdammt viele Handlötungen, mehr Lötzinn als mir lieb ist und noch mehr ekelhafte Flussmittelrückstände:

Der 5-Beiner oben ist mit ZR7IB beschriftet (kein Datenblatt auffindbar). Das Beuteil im SO-8-Gehäuse heißt BEH7JB (auch nix zu finden). Die Qualität dieser Leiterkarte ist leider nicht wirklich rühmlich.

Einen High-Pot-Test würde ich angesichts solcher Lötstellen nicht unbedingt machen:

The strangest deal

Gestern war es mal wieder so weit. Friedrichshafen ruft!

Dieses Jahr war die HAM Radio gefühlt wieder besser besucht, obwohl das Wetter nicht ganz so stabil war wie die Jahre zuvor.

An ein paar Ständen gab es wie auch die Jahre zuvor kaputte Digiknipsen. Darunter auch „meine“ Canon SX280. 15 Euro für eine kaputte Kamera? Ein Argument zum Handeln gab es: der Blitz fehlte. Also den Händler anquatschen und 10 Euro geboten. „Aber da fehlt der Blitz!“ – „ok, dann 8 Euro“. Gut, wenn er meint, dann bekommt er halt nochmal 2 Euro weniger als ich ihm eigentlich geben wollte.

Warum ich sie wollte? Zum einen bietet Canon keine Almanachdaten mehr an, zumindest keine aktuellen mehr. Wenn ich weiß, welcher Chipsatz verbaut ist, lässt sich vielleicht eher etwas finden. Zudem hat das Objektiv zwar eine Delle, scheint ansonsten aber noch intakt zu sein. Immerhin hat es Kleinbild-Äquivalent verrückte 28-500 mm Brennweite. Die Blende ist dann zwar ziemlich zu und die Abbildung nicht mehr ganz so perfekt, aber für den angepeilten Verwendungszweck an der Raspberry Pi-Cam, who cares? Ich hatte schon ein Canon EF-Objektiv am Pi. aus 200 mm Brennweite werden knapp 3000 mm KB-Äquivalent. Den Mond muss man damit ziemlich feinfühlig ansteuern und trotzdem haut er recht schnell ab. Leider ist das Objektiv bei offener Blende nicht ganz so knackig, zum Schließen selbiger braucht’s allerdings zusätzliche Hard- und Software…

Aber ich schweife ab. Don’t turn it on, take it apart? Naja, vorher möchte ich zumindest sehen, was die Kamera noch macht, schließlich habe ich alle Betriebsmittel daheim. Resultat: Der Bildschirm bleibt dunkel, das Objektiv fährt nur kurz aus, dann ist wieder Stille. Aber immerhin tut sich etwas.

Also, auf den Apparat! Alle Schrauben gelöst, braucht man nur noch sanfte Gewalt um die Gehäusehälften voneinander zu trennen. Die Innereien sind erstaunlich aufgeräumt – GPS und WLAN sind erwartungsgemäß Module, wodurch der kleine Schwester SX270 einfach die beiden Platinchen mit Funk fehlen.

SX280_module

Funkmodule der Canon SX280, links: WLAN, rechts: GPS

Auf dem WLAN-Modul ist WYSBCVCXA eingraviert. Eine kurze Suche ergibt: Es ist ein Modul von Taiyo Yuden – nicht die ganze Leiterkarte sondern nur das kleine Teil mit Blechdeckel. Alles außenrum stammt augenscheinlich von Canon, zumindest deutet der Aufkleber auf der Rückseite darauf hin. Im inneren werkelt ein Marvell 88W8787, der mit dem Prozessor über SDIO kommuniziert. Bluetooth und 2,4G-WLAN kann grundsätzlich über die die gleiche Antenne arbeiten, auch scheint das Modul die entsprechenden Bauteile für den Betrieb zu besitzen. Müsste ich nur noch die Anschlussbelegung herausfinden, dann wäre das tatsächlich etwas für den Raspberry Pi. Noch ein kurzer Ausflug: Warum macht man ein Modul auf ein Modul und nicht zumindest den Funkchip direkt auf das eigene Modul? Ganz einfach, und manche kennen es vielleicht schon von den ESP8266-Modulen: Zertifizierung. So muss nur das eigentliche Funkmodul durch die vollständige Zerti. Die Antenne und das andere Außenrum muss man zwar trotzdem noch checken, aber das geht bedeutend schneller und günstiger.

SX280_gnss

Beim GPS-Modul (oder korrekter: GNSS) sieht es leider nicht ganz so gut aus. Auf dem Shielding steht zwar, dass es ein GYCFDMAXX von Canon sei aber bis auf Typenzulassungen findet man nichts im Netz, die Daten auf der Oberseite kommen rein aus der Produktion und das Shielding herunternehmen gefährdet die Elektronik darunter. Nebenbei: wen die Kerben an der Patchantenne irritieren – das war nicht ich mit dem abgerutschten Schraubendreher – das muss so! So werden die Antennchen bei der Produktion getrimmt.

Also keinerlei Infos. Ublox, Broadcomm, Sirf, SkyTraq, Qualcomm, Mediatek oder noch was exotischeres? Keine Ahnung. Da ist mehr Detektivarbeit vonnöten. Im Foto oben sieht man noch leicht die Flex vom Modul – die zwei linken Leiterbahnen sind etwas dicker – das MUSS die Stromversorgung sein. Ich definiere links einfach mal zu Pin 1. Nachdem Pin 2 auf die große Fläche geht, müsste das die Masse sein. Pin 1 ist also die Versorgung. Beim Rest bleibt die Ahnungslosigkeit. Klassischerweise sprechen GNSS-Chips UART oder I²C. Manche auch USB, was aber eher für PC-Empfänger und R&D-Zwecke verwendet wird. Jedes Interface benötigt aber lediglich zwei Leitungen, das Modul ist allerdings mit 8 angebunden. Bei UART kann noch RTS und CTS dazukommen. Was ich mir noch vorstellen könnte wären ein Enable, Interrupt, 32 kHz-Takt oder ein 1-Pulse-per-Second-Signal.

Es hilft nix, da muss ein Messgerät ran – Ich hab da mal was vorbereitet:

SX280_engine

Hab ich erwähnt, wie aufgeräumt das Design in der Kamera ist? Zu meinem weiteren Erstaunen ist die kleinste Bauteilgröße 0402. Ich hätte erwartet, dass Canon im Jahr 2013 schon alles mit 0201 zupflastert. Schön für Bastler, da ist das Umbauen deutlich angenehmer.

Folgende Bauteile sitzen auf der Leiterkarte:

  • Elpida B2064B3PB-8D-F – RAM
  • Macronix MX29GL256FHX01 – Flashspeicher (kein eMMC)
  • Analog Devices ADV7528 – HDMI-Transmitter
  • Renesas (?) R2A30447 – Motortreiber (?)
  • 4957 323A – ???

Vom eigentlichen Prozessor sieht man nichts. Er ist unter dem RAM versteckt – Stichwort Package-on-Package. Zum R2A30447 konnte ich nichts eindeutiges finden, aber Bauteile mit ähnlichen Bezeichnungen sind alles Motortreiber. Zudem deuten die dickeren Widerstände, größere Kupferflächen (um die Wärme wegzubekommen) und die Nähe zum Objektivkonnektor sehr explizit darauf hin. Neben dem Motor für das Objektiv und den Blitz könnte der Chip auch die Aktuatoren für Blende und Voicecoils für den Autofokus und Bildstabilisator ansteuern. Was der Chip mit der Gravur 4957 323A macht, konnte ich nicht herausfinden. Ich vermute, dass es ein IMU, also Accelerometer und Gyroskop ist. Accelerometer, um die Orientierung der Kamera (zum automatischen Drehen der Bilder, was Canon noch immer nicht „richtig“ in den Exif-Daten ablegt) und als Komponente für den Bildstabilisator verwendet. Was noch auffällt: Links unten im Bild befindet sich ein Footprint für einen unbestückten Konnektor. Hmmmm, könnte das vielleicht der Debug sein? 🙂

Zurück zum GNSS – Solderporn gefällig?

SX280_gnss_conn

Eigentlich gar nicht so spekakulär – wie gesagt: die Widerstände sind im 0402-Package. Pin 1, die mutmaßliche Versorgung ist hier rechts. Im letzten Bild sieht man: an ihm hängt auch das Oszi. Pin 4 konnte ich nicht richtig anlöten, weil es anscheinend auf keinen Widerstand unten führt. Vielleicht der in der zweiten Reihe? keine Ahnung. auf jeden Fall kommt jeder Pin an den Logicanalyzer.

Sobald die Kamera Strom bekommt regt sich auch etwas:

SX280_gnss_LA1

Kanal 4 und 5 sieht sehr interessant aus und der Screenshot oben ist schon verräterischer als ich beabsichtigte:

SX280_gnss_LA2

We got signal! UART 115200 Baud, 8N1. Die Signale auf Kanal 5 sind offensichtlich Glitches durch Nebensprechen.

Der GNSS-Receiver meldet:

$PMTK011 MTKGPS*08\r\n$PMTK010 001*2E\r\n

$PMTK010 002*2D\r\n

Wir haben es mit sehr großer Wahrscheinlichkeit mit MediaTek zu tun, der NMEA 0183 spricht. So weit, so gut.

Auf der Suche nach Mediatek und Almanac bin ich auf eine Seite von Gizmochina gestoßen. Darauf ein Link auf http://ftp.epo.mediatek.com. Allerdings ist der Server offline. Aber zumindest gibt es eine Fährte. Auf der Suche nach Mediatek und epo fand ich die Sourcen eines Updaters für Android. Man muss etwas wühlen, aber schlussendlich läuft es auf folgende Ressource hinaus: http://epodownload.mediatek.com/EPO.DAT. Datei heruntergeladen, und neben die aktuelle CAGM01.EED der Kamera gelegt (Die Datei befindet sich auf der Speicherkarte im Ordner \DCIM\CANONMSC\GPS\)  – zumindest die Dateigröße ist gleich. BeyondCompare sagt: Inhalt ebenfalls identisch. Ich habe ein Bingo!

Ok, im Nachhinein hätte ich das auch einfacher haben können. Denn, meine Fritzbox kann Netzwerkverkehr mitschneiden. Der Vollständigkeit halber habe ich das nun auch nachgeholt.

Kurz und knapp baut die Kamera auch eine Verbindung und sendet folgenden Header:

GET /rmds/ic/agps/cagm01.eed HTTP/1.1

HOST: gdlp01.c-wss.com:80

CONNECTION: close

Funktioniert auch im Browser. Als Antwort kommt, wie erwartet, die Datei von oben. Nur zeigt die Kamera noch immer „Gültigk.zeitr. d. A-GPS-Dat.: –.–‚– – –.–.‘–“ an. (warum eigentlich so stark abgekürzt, da wäre noch elendig viel Platz auf dem Bildschirm…)

Vielleicht funktioniert auch nur die Anzeige des Gültigkeitszeitraum nicht?! Naja, zumindest der TTFF liegt irgendwo bei 2 Minuten – ich bin mir also nicht sicher.

In den Untiefen meiner Festplatte konnte ich ältere Versionen der Datei finden. Mit richtiger Dateizeit. Hmmm – was macht wohl die Kamera damit? Also eine von 2014 kopiert, die Karte in die Kamera gelegt und siehe da: ich habe für den damaligen Zeitraum A-GPS-Support. Was passiert nun, wenn ich aktualisiere? Die Kamera behauptet was zu laden, nach dem Update steht aber der alte Zeitraum auf dem Display. Zurück am PC: Ja, die Datei wurde nicht überschrieben.

Bleibt eine Frage: Warum? Drei Ideen hätte ich:

  • Canon hat nur eine zeitlich begrenzte Lizenz von Mediatek oder deren Zulieferern für die Daten (Die Datei wird für andere Produkte auf dem Server aktualisiert oder wurde schlichtweg vergessen)
  • Jemand in der Software-Entwicklung hat es verkackt
  • Canon will, dass eine neue Kamera mit integriertem GPS-Empfänger (die es nicht gibt) gekauft wird

Für den zweiten Fall könnte man sich vertrauensvoll an den Support wenden. So motiviert wie ich sämtliche Consumer-Produkte-Hersteller mittlerweile kennengelernt habe, wird ein Standardschreiben zurückkommen: „Wir haben das Problem weitergeleitet. Ob und wann eine Fehlerkorrektur zur Verfügung steht, können wir zum aktuellen Zeitpunkt allerdings nicht sagen“. Wenn die Person, die diesen Textbaustein geschrieben hat, je Verwendung einen Cent bekommen hätte – sie oder er wären reich. Sehr sogar. 🙁

Und nun: sorry für die Länglichkeit. Wer hat es bis hier geschafft? Schreibt einfach einen kurzen Kommentar!