=====TRÅDFRI Modul===== In einem früheren [[de:tech:tradfri|Artikel]] haben wir schon sehen können, wie man ein TRÅDFRI Modul aus einer IKEA Lampe ausbaut und für eigene LED Projekte benutzen kann. Das Modul selber wird in unterschiedlichen Geräten von IKEA eingesetzt, dazu gehören unter anderem neben den Lampen und Treibern auch: * TRÅDFRI Steckdose * TRÅDFRI Gateway * TRÅDFRI Signalverstärker * TRÅDFRI Bewegungsmelder * FYRTUR Verdunkelungsrollo Die Bedeutung der Pins ist dann entsprechend. Hier mal eine Übersicht: ^ TRÅDFRI Pin ^ Lamp \\ white ^ Lamp \\ white spectrum ^ Power Plug ^ FYRTUR ^ | PA0 | open | open | Button | Up Button | | PA1 | open | VCC | NTC | LED | | PA12 | - | PWM2 | Relay | TxD | | PA13 | PWM | PWM1 | LED | RxD | | PC10 | - | - | - | Down Button | Das Modul wird von einem EFR32MG1PXXXF256 Controller von Silicon Labs gesteuert. Dieser verfügt über ein Debug Interface, das auch am Modul zur Verfügung steht. Dabei handelt es sich um das ARM's Serial Wire Debug (SWD) Interface mit 2 Leitungen. ==== Debugger ==== Um das FLASH auslesen oder beschreiben zu können bedarf es einem Debugger. Eine preiswerte Variante gibt es wieder über [[https://www.ebay.de/itm/J-Link-OB-ARM-Debugger-Programmer-Downloader-ersetzt-v8-SWD-M74/164140805411?_trkparms=ispr%3D1&hash=item26378ded23:g:5QwAAOSwWp9efchy&amdata=enc%3AAQAFAAACcBaobrjLl8XobRIiIML1V4Imu%252Fn%252BzU5L90Z278x5ickkfOCvCjTOBWK8pwriaolq5kz8V%252F3fTn%252Bq1NprncvlEKsUO895Z6XqDQhlhBvpbG2iNwBFjad%252BDPZzBz7ihvtqJ4%252B%252Bg52gz8KOIOGYrD10yG3A8AfpY1cUWzvu8tjab91BJZ%252BYgvMSWDu1nbAGr1BOFXMR46ClABTL4mEBQrf2agUZJLnBxpsl6eg40caxG9mTAKdcyprIgilxKr99%252FLN6mijnJnSD2rdRaCudzFVV0vcj%252B%252BgahlfPxBTYA4RaRXWwLxoK5OGzTPTPnSSFAU4dxhb%252BySdVAd2cy1yq%252F7zyU5bQ48QCTp9KEEWC60mX4eRiMYN3EIcyBZ1KakivZwJC%252B%252FT4Y1euzBAqGr81Bx0FVIFD9uX%252BVFN8Ch%252B%252FDkW%252FCoehDajj06GFZjuZbEw65UEwoFKvkT4xMk6hEalDff2nViNHxTpK3Z2i1r%252BEFH0ZiMkRdOq1zxKbQpRufFLAr4hltuxPB3F%252BsOtgxmP1XT3pUWGvUis%252FsYC71Fw6uOu6NeaDkkxc7rP7oZw%252BvwS4jvcnEN2MZ5TMjUdXfcO%252FRThvUAwzwbAO0%252BVDJDvt3NPkaK774dr9QnaxHRZLTQzz6%252FqF7Bg3%252FRCMJ7Yn7VyHgw6OXDfYC68nUXPiJG3s0J%252FvztIof9JHeEgEioob5i4s5K%252Fg8yheJiR%252FnHUhphEOkmgMLjrXyhm16zhzXjdonBc0JNe52Ols5CWLD3ueZbnegfefnFdKcykgiE71oxGlVddcdR2vCcTXdgLqjmeUQsjTpab3ws0l3YetcB7SR5%252BHUG6L7w%253D%253D%7Ccksum%3A164140805411432396b05a514c0f8bca653630049171%7Campid%3APL_CLK%7Cclp%3A2334524|Ebay]]. Näheres findet man unter anderem auch [[https://github.com/basilfx/TRADFRI-Hacking/blob/master/FIRMWARE.md|hier]]. {{ :tech:j-link_debugger.png?direct&300 |}} Die 4 Leitungen des Debuggers werden wie folgt an das Modul angeschlossen: ^ JLINK ^ TRÅDFRI Modul ^ | VCC | VCC | | SWDIO | PF1 | | SWCLK | PF0 | | GND | GND | Zusätzlich muss das Modul noch mit 3.3V versorgt werden. Als Software bietet sich J-Link von [[https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack|SEGGER]] an. Auf meinem Mac lief die Version V648b stabil. ==== Auslesen ==== Im Terminal geben wir dann folgendes ein (Pfad anpassen): ''/JLinkExe -If SWD -Speed 5000 -Device EFR32MG1PXXXF256'' Es erscheint der ''J-Link>'' prompt. Zum Verbinden mit dem Cortex-M4 einfach ''connect'' eingeben und bei Erfolg sieht die Rückmeldung so aus: J-Link>connect Device "EFR32MG1PXXXF256" selected. Found SWD-DP with ID 0x2BA01477 Found Cortex-M4 r0p1, Little endian. FPUnit: 6 code (BP) slots and 2 literal slots CoreSight components: ROMTbl 0 @ E00FF000 ROMTbl 0 [0]: FFF0F000, CID: B105E00D, PID: 000BB00C SCS ROMTbl 0 [1]: FFF02000, CID: B105E00D, PID: 003BB002 DWT ROMTbl 0 [2]: FFF03000, CID: B105E00D, PID: 002BB003 FPB ROMTbl 0 [3]: FFF01000, CID: B105E00D, PID: 003BB001 ITM ROMTbl 0 [4]: FFF41000, CID: B105900D, PID: 003BB923 TPIU-Lite Cortex-M4 identified. Der Cortex-M4 des TRÅDFRI Moduls verfügt über vier FLASH Bereiche, die wir betrachten müssen: ^ Area ^ ADDR ^ Size ^ | MAIN | ''0x0'' | ''0x40000'' | | USER | ''0xfe00000'' | ''0x800'' | | LOCK | ''0xfe04000'' | ''0x800'' | | CHIP | ''0xfe08000'' | ''0x400'' | Zum Auslesen und Abspeichern geben wir die folgenden Befehle ein: J-Link>savebin TRADFRI_main.bin 0x0 0x40000 Opening binary file for writing... [/Users/rolf/Projekte/TradFri/TRADFRI_main.bin] Reading 262144 bytes from addr 0x00000000 into file...O.K. J-Link>savebin TRADFRI_chip.bin 0xfe08000 0x400 J-Link>savebin TRADFRI_lock.bin 0xfe04000 0x800 J-Link>savebin TRADFRI_user.bin 0xfe00000 0x800 Mit dem Befehl ''J-Link>verifybin TRADFRI_main.bin 0x0'' lässt sich das Ausgelesene nochmal verifizieren. Zum Glück waren bisher alle von mir ausgelesenen Module nicht lesegeschützt.\\ Haben wir alle vier Files können wir jetzt jedes beliebige Modul neu programmieren und so die gewünschte Funktion erhalten. In meinem Fall habe ich die TRÅDFRI Module aus dem Repeater genommen und in Rollo Module umgewandelt und [[de:tech:gw60|hier]] verwendet. ==== Programmieren ==== Das Programmieren geht genauso einfach wie das Auslesen mit folgenden Befehlen: J-Link>loadbin TRADFRI_blind_main_2_2_009.bin 0x0 Downloading file [TRADFRI_blind_main_2_2_009]...Comparing flash [100%] Done. Erasing flash [100%] Done. Programming flash [100%] Done. Verifying flash [100%] Done. J-Link: Flash download: Flash programming performed for 1 range (188416 bytes) J-Link: Flash download: Total time needed: 6.193s (Prepare: 0.112s, Compare: 0.298s, Erase: 2.700s, Program: 2.931s, Verify: 0.143s, Restore: 0.007s) O.K. J-Link>loadbin TRADFRI_blind_chip.bin 0xfe08000 J-Link>loadbin TRADFRI_blind_lock.bin 0xfe04000 J-Link>loadbin TRADFRI_blind_user.bin 0xfe00000 ==== TRÅDFRI Taster ==== Das gleiche Verfahren lässt sich übrigens auch für andere TRÅDFRI Geräte anwenden, wo nicht dieses Modul eingesetzt wird. Der Schaltungsaufbau ist nämlich immer der gleiche. Dazu muss man auf der Platine nur die vier Anschlüsse finden. Diese sind immer auch als Pads für den Modultest rausgeführt und somit leicht erreichbar.\\ Für das [[de:tech:gw60|Rollo Projekt]] habe ich dazu den Standard TRÅDFRI Taster (kabelloser Dimmer genannt) in einen Taster für das Rollo umgewandelt. Den gibt es ja leider nicht einzeln zu kaufen. {{:tech:tradfri_taster.png?nolink&200|}} {{:tech:tradfri_tester_rollo.png?direct&200|}} Wie man den Taster öffnet ist [[http://westsideelectronics.com/ikea-tradfri-on-off-switch-teardown/| hier]] gut beschrieben. Die Anschlüsse zum Programmieren sind auf der Rückseite des PCBs beschriftet und die Verbindung zum Debugger ergibt sich daher wie folgt: ^ JLINK ^ TRÅDFRI Taster ^ | VCC | VCC | | SWDIO | TMS | | SWCLK | CLK | | GND | GND | {{:tech:tradfri_taster_pcb_bottom.png?direct&300|}} ==== Update ==== Alle TRÅDFRI Komponenten unterstützen Over-The-Air (OTA) Updates. Darum braucht man sich nicht zu kümmern da es im Hintergrund zum Beispiel durch das Gateway erfolgt. Wollen wir beim Umprogrammieren jedoch gleich die aktuelle Firmware flashen, dann können wir die Daten auch direkt vom IKEA OTA Server holen. Findige Entwickler haben dazu ein [[https://github.com/dresden-elektronik/deconz-rest-plugin/blob/master/ikea-ota-download.py|Python Script]] geschrieben. Mit Hilfe dieses Script werden alle auf dem Server vorhanden Files heruntergeladen. Das Beispiel für das Rollo sieht dann so aus ''10037585-5.1-TRADFRI-connected-blind-2.2.009.ota.ota.signed''\\ Es wird allerdings nur der MAIN Bereich des FLASH aktualisiert. Die Bereiche USER, LOCK und CHIP ändern sich nicht und sind somit auch nicht online. Will man also ein Modul in eine andere Funktionalität umprogrammieren, so muss man es zumindest einmal selber ausgelesen haben um an die Daten für USER, LOCK und CHIP zu kommen.\\ Die geladenen Daten sind in einem exotischen Format gekapselt mit der Abkürzung NGIS. Hier war auch wieder etwas Arbeit nötig um das Format zu entschlüsseln und die Binärdatei zu extrahieren. Eine tolle Unterstützung war dabei übrigens das Program [[https://www.synalysis.net|Synalyze it! Pro]]. Das Graph File liegt im Downloadbereich bereit.\\ {{:tech:ota_ngis.png?direct | OTA NGIS Graph}} Zum Extrahieren habe ich ebenfalls ein Python Script geschrieben das auch im Downloadbereich liegt. Bei den bisherigen Tests war die extrahierte Version binäridentisch zur ausgelesenen.\\ ==== Downloads ==== * {{:tech:ota_ngis.dot.zip | OTA NGIS Graph file (.dot)}} * {{:tech:extract_image.py.zip |Python script to extract image (.py)}} ==== Spenden ==== Wenn ihr meine Arbeit unterstützen wollt, so könnt ihr mir gerne einen Cappuccino oder so spenden: .