KNX Bootloader für ARM

Fragen und Diskussionen zur Entwicklung von neuen Geräten. Sowohl Hardware als auch Software. English is welcome.
StefanSverige
Beiträge: 163
Registriert: 15. Feb 2014, 13:32

KNX Bootloader für ARM

Beitrag von StefanSverige »

Nach einer längeren kreativen Pause komme ich mal wieder dazu mich dem Coden zuzuwenden. Seite Jahren haben wir schon fertige Teile eines KNX Busupdaters, also eines KNX fähigen Bootloaders für den ARM im Git liegen. So richtig funktioniert hat das bei mir zumindest nie.

Beim LPC hatten wir nie genug Flash für einen KNX Bootloader. Beim 936er, der ja auch als Drop-in Ersatz für den 922er funktioniert, hätte das vermutlich funktioniert. Nur den 936er hatten wohl meist nur Oldi und ich zum Debuggen im Einsatz -- hätte sich also auch nicht wirklich gelohnt.

Es ist also an der Zeit das Puzzle zusammenzusetzen und endlich einen funktionierenden Bus Bootloader fertig zu bekommen 8-)
Die erste Version läuft nun und kann die Firmware als Hex Datei ohne Umwege mit dem Java Tool auf den LPC1115 schreiben. Es fehlen noch Kleinigkeiten, sowie die Portierung auf einen schnelleren Updater. Code Basis des Java Tools ist der Updater vom knxduino, dessen Basis von uns stammt. Meine Hoffnung ist das wir in Zukunft die Entwicklung des PC Tools mit dem knxdunio zusammenlegen können. Dafür muss unser Bootloader aber erst einmal auf den aktuellen Stand.

Eventuell kann ich in den nächsten Tagen einen Zwischenstand einchecken, samt Binary zum selber Testen.

/Stefan
Zuletzt geändert von Doumanix am 13. Jan 2022, 21:57, insgesamt 1-mal geändert.
Grund: Tags

Tags:
Tontechniker
Beiträge: 274
Registriert: 25. Mai 2013, 09:49
Wohnort: Melsungen/Hessen

Re: KNX Bootloader für ARM

Beitrag von Tontechniker »

Hallo Stefan!
Freue mich, wieder von Dir zu hören!
LG
Hans
Martin
Beiträge: 33
Registriert: 27. Jan 2017, 15:37

Re: KNX Bootloader für ARM

Beitrag von Martin »

Hallo,

hab Rauchmelder und 8-fach Ausgang da. Würde auch testen.

LG
Martin
StefanSverige
Beiträge: 163
Registriert: 15. Feb 2014, 13:32

Re: KNX Bootloader für ARM

Beitrag von StefanSverige »

Das Binary für den Bootloader ist inzwischen im Git Repo:
https://github.com/selfbus/software-rel ... re_updater

Eventuell schaffe ich es heute noch auch das angepasste PC Tool und ein Binary für den 8-out BCU1 hochzuladen.

Der Bootloader ist im Debug Mode Kompiliert, auf der UART an PIO3_0 kann man mit 19200 8N1 lauschen. Also darauf achten das an dem Pin nichts wichtiges angeschlossen ist wenn der Bootloader läuft. Wenn die Hautpfirmware einmal Geflasht ist wird diese jedes mal direkt gestartet. Es kommt also keine Meldung vom Bootloader.

Edit Darthyson: link fix
Zuletzt geändert von Darthyson am 22. Dez 2023, 22:46, insgesamt 1-mal geändert.
Grund: link fix
StefanSverige
Beiträge: 163
Registriert: 15. Feb 2014, 13:32

Re: KNX Bootloader für ARM

Beitrag von StefanSverige »

Das Updater Tool und eine Testversion des 8-out sind nun online.

Wenn der Bootloader geflasht wurde startet er direkt, erkennbar in der blinkenden RUN LED. Nachdem die Hauptfirmware drauf ist, kann der BL entweder durch drücken und halten der Progtaste beim Einschalten oder über den Bus gestartet werden.
Letzteres sollte mit so gut wie allen Geräten schon funktionieren, da die Funktion schon seit Jahren in der SBLib mit drin ist. Für ein komplettes Fernupdate muss die UID des ARM bekannt sein (dient als Passwort für ein Fernupdate). Diese kann durch weglassen des Schalters -uid erfragt werden, der Prog Mode muss dafür aber eingeschaltet sein!

Hier der komplette Aufruf für ein Fernupdate:
java -jar SB_updater_0.25.jar <IP des KNX Interface/Router> -fileName "out8-bcu1.hex" -uid <UID des ARM> -device <PA der laufenden Hauptfirmware>

Um nicht jedes mal die komplette Firmware über den Bus zu jagen, kann zum Testen der Schalter -f0 angehängt werden. Dann wird das Löschen und Flashen übersprungen und nur der Boot Descripter (Einsprung ins Hauptprogramm, etc.) neu geschrieben und anschließend die Hauptfirmware gestartet. Diese muss natürlich vorher einmal komplett geflasht worden sein. Also den Schalter -f0 nur verwenden wenn die Hauptfirmware vorher bereist erfolgreich über den Bus geflasht wurde.

Viel Spaß beim Flashen!
Olli
Beiträge: 70
Registriert: 12. Aug 2014, 20:52
Wohnort: Moormerland / Ostfriesland

Re: KNX Bootloader für ARM

Beitrag von Olli »

Hallo Stefan,

ich freue mich, das die Möglichkeit besteht, die Geräte über den Bus zu flashen.
Da ich gerade an den Rauchmeldern arbeite, würde ich gerne diese Möglichkeit nutzen, um die Module bei einem Update nicht von der Decke nehmen zu müssen.

Leider wirft das Tool bei mir Fehler:

Code: Alles auswählen

java -jar SB_updater_0.50.jar 192.168.178.X -f0
←[1;92m

     _____ ________    __________  __  _______    __  ______  ____  ___  ________________
    / ___// ____/ /   / ____/ __ )/ / / / ___/   / / / / __ \/ __ \/   |/_  __/ ____/ __ \
    \__ \/ __/ / /   / /_  / __  / / / /\__ \   / / / / /_/ / / / / /| | / / / __/ / /_/ /
   ___/ / /___/ /___/ __/ / /_/ / /_/ /___/ /  / /_/ / ____/ /_/ / ___ |/ / / /___/ _, _/
  /____/_____/_____/_/   /_____/\____//____/   \____/_/   /_____/_/  |_/_/ /_____/_/ |_|
  by Stefan Haller et al.                                                     Version 0.50

←[0m
Requesting UID from15.15.192 ... Nov. 14, 2020 2:00:58 NACHM. org.hkfree.knxduino.updater.Updater onCompletion
SCHWERWIEGEND: completed tuwien.auto.calimero.KNXTimeoutException: timeout occurred while waiting for data response
tuwien.auto.calimero.KNXTimeoutException: timeout occurred while waiting for data response
        at org.hkfree.knxduino.updater.UpdatableManagementClientImpl.waitForResponse(UpdatableManagementClientImpl.java:879)
        at org.hkfree.knxduino.updater.UpdatableManagementClientImpl.waitForResponse(UpdatableManagementClientImpl.java:840)
        at org.hkfree.knxduino.updater.UpdatableManagementClientImpl.sendWait(UpdatableManagementClientImpl.java:814)
        at org.hkfree.knxduino.updater.UpdatableManagementClientImpl.sendUpdateData(UpdatableManagementClientImpl.java:1014)
        at org.hkfree.knxduino.updater.Updater.run(Updater.java:673)
        at org.hkfree.knxduino.updater.Updater.main(Updater.java:97)
Es wird aber schon mit dem Teilnehmer kommuniziert, die Prog LED blinkt nachd em flashen des Bootloaders langsam, nach dem ausgühren des Updaters schnell.
Ich habe nur dieses eine Gerät mit dem Bootloader am Bus (zum testen).

Mein IP Gateway ist folgendes: Enertex® KNXnet/IP Interface

Was ich komisch finde: im Log ist die Audgabe "Requesting UID from15.15.192" zu finden.
Ist damit die KNX Adresse des Gateways gemeint?
Mein Gateway hat 5 Tunnel und die Adressen sind von 1.0.250 bis 1.0.255 vergeben.
Ich habe beim Versuch der Updaters die Tunnel angesehen. In dem Moment, in dem der Updater läuft (bis zur Fehlermeldung) ist ein weiterer Tunnel belegt. Diese Verbindung sollte also funktionieren.

Zusätzlich wäre es wichtig zu wissen, wie muss die Rauchmelder Software für den Einsatz mit dem Bus Updater kompiliert werden muss?
Normalerweise erzeugt MCUXpresso ja eine .axf Datei, aber keine .hex
Muss in der Software noch eine Adressveränderung vorgenommen werden?

Vielen Dank schonmal für deine Mühe!

Grüße,
Olli
Olli
Beiträge: 70
Registriert: 12. Aug 2014, 20:52
Wohnort: Moormerland / Ostfriesland

Re: KNX Bootloader für ARM

Beitrag von Olli »

Hallo nochmal,

wer lesen kann ist klar im Vorteil....
Wichtig ist: Den Programmiermodus einschalten, wenn man die UID abfragen möchte...
Der oben beschriebene Fehler ist somit hinfällig.

Ich konnte nun meine UID auslesen und es werden auch Daten zum Controller übertragen.

Es hat leider ein paar Versuche benötigt, bis alle Daten übertragen werden konnten, aber es hat am Ende super funktioniert.

Bleibt am Ende die Frage, wie ich das Rauchmelder Programm Updater-kompatibel kompilieren muss?

Vielen Dank!
Olli
Beiträge: 70
Registriert: 12. Aug 2014, 20:52
Wohnort: Moormerland / Ostfriesland

Re: KNX Bootloader für ARM

Beitrag von Olli »

Hallo,

nachdem ich nun herausgefunden habe, wie man Programme für den Bootloader mit entsprechender Anganfsadresse kompiliert, habe ich mal eins mit Startadresse 0x2000 kompiliert.
Mit dem Bootloader im Release kompiliert, sollte diese ja die Startadresse sein.
Leider ist dann folgende Fehlermeldung zu lesen:

Code: Alles auswählen

..Update boot descriptor with CRC32 0xa646710b, length 10
Application not startable
Nov. 15, 2020 10:40:46 VORM. org.hkfree.knxduino.updater.Updater onCompletion
SCHWERWIEGEND: completed java.lang.RuntimeException: KNXduino udpate failed.
java.lang.RuntimeException: KNXduino udpate failed.
        at org.hkfree.knxduino.updater.Updater.run(Updater.java:771)
        at org.hkfree.knxduino.updater.Updater.main(Updater.java:89)
Wenn ich die selbe Firmware mit Startadresse 0x3000 kompiliere, und den Bootloader auf Release lasse, funktioniert es.

Ich denke, da ist noch irgendwo ein Bug in der Startadressenberechnung im Bootloader?

Grüße,
Olli
StefanSverige
Beiträge: 163
Registriert: 15. Feb 2014, 13:32

Rauchmelder full download mit Bootloader im Debug

Beitrag von StefanSverige »

Hier wird die RM Firmware über eine BCU1 8out geschrieben.
Mit -v gibt es ein bisschen mehr output (verbose) und
-full sendet die komplette Firmware (deaktiviert denn Diff mode)

Code: Alles auswählen

java -jar SB_updater_0.50.jar 192.168.188.X -fileName "Rauchmelder-bcu1.hex" -uid 08:70:01:05:69:8C:AB:CD:EF:AA:BB:CC -v -full


     _____ ________    __________  __  _______    __  ______  ____  ___  ________________ 
    / ___// ____/ /   / ____/ __ )/ / / / ___/   / / / / __ \/ __ \/   |/_  __/ ____/ __ \
    \__ \/ __/ / /   / /_  / __  / / / /\__ \   / / / / /_/ / / / / /| | / / / __/ / /_/ /
   ___/ / /___/ /___/ __/ / /_/ / /_/ /___/ /  / /_/ / ____/ /_/ / ___ |/ / / /___/ _, _/ 
  /____/_____/_____/_/   /_____/\____//____/   \____/_/   /_____/_/  |_/_/ /_____/_/ |_|  
  by Stefan Haller et al.                                                     Version 0.50  


Unlocking device with UID 08:70:01:05:69:8C:AB:CD:EF:AA:BB:CC ... done (0)
Device Bootloader Identity   : 0x1050, Features: 0x8100, Bootloader Size: 0x3000

Requesting App Version String ...
  Current App Version String is: O08.10  1.00

Loading new firmware file ...
  Hex file parsed: starting at 0x3000, length 11460 bytes
  File App Version String is : S_RM_H6 1.01 found at address 0x2cb3
  Firmware stats directly beyond bootloader.

Requesting Boot Descriptor ...
  Current firmware: starts at 0x4000 ends at 0x99a8 CRC is 0x83f680bb

Starting to send new firmware now: 
Erase sector 3 ...done (0)
 OKErase sector 4 ...done (0)
 OKErase sector 5 ...done (0)
 OKSending application data (11460 bytes) 
......................................................................................................................................................................................................................................................................................................................................................
Program device at flash address 0x3000 with 4096 bytes and CRC32 0x87ff80f3 ... done (0)
......................................................................................................................................................................................................................................................................................................................................................
Program device at flash address 0x4000 with 4096 bytes and CRC32 0x1579152b ... done (0)
.................................................................................................................................................................................................................................................................................
Program device at flash address 0x5000 with 3268 bytes and CRC32 0xc67cf9a1 ... done (0)
Wrote 11460 bytes from file to device.

Preparing boot descriptor with start address 0x3000, end address 0x5cc4, CRC32 0x443b6767, APP_VERSION pointer 0x5cb3
..Update boot descriptor with CRC32 0x3c8aa286, length 10 done (0)
Firmware Update done, Restarting device now ...

StefanSverige
Beiträge: 163
Registriert: 15. Feb 2014, 13:32

Rauchmelder full download mit Bootloader im Release

Beitrag von StefanSverige »

Hier der Download der RM Firmware in einen frisch geflashten Bootloader im Release.
Man sieht das er auch ohne den Parameter -full einen kompletten Download macht, weil keine Firmware im Flash gefunden wurde.

Wichtig: Der Parameter -f0 den du in einem Post benutzt hast überspringt das Flashen der Firmware. Das ist NUR zum testen des Bootloaders, oder wenn man genau weiß was man tut. Es wird dann wird NUR der Bootdescriptor geschrieben.
Also -f0 einfach weg lassen.

Wenn er im Diff Mode Probleme macht (das ist noch nicht ganz sauber), einfach
-full anhängen dann wird die komplette Firmware geschrieben und das funktioniert hier bisher immer.


/Stefan

Code: Alles auswählen

java -jar SB_updater_0.50.jar 192.168.188.X -fileName "Rauchmelder-bcu1.hex" -uid 08:70:01:05:69:8C:AB:CD:EF:AA:BB:CC -v

     _____ ________    __________  __  _______    __  ______  ____  ___  ________________ 
    / ___// ____/ /   / ____/ __ )/ / / / ___/   / / / / __ \/ __ \/   |/_  __/ ____/ __ \
    \__ \/ __/ / /   / /_  / __  / / / /\__ \   / / / / /_/ / / / / /| | / / / __/ / /_/ /
   ___/ / /___/ /___/ __/ / /_/ / /_/ /___/ /  / /_/ / ____/ /_/ / ___ |/ / / /___/ _, _/ 
  /____/_____/_____/_/   /_____/\____//____/   \____/_/   /_____/_/  |_/_/ /_____/_/ |_|  
  by Stefan Haller et al.                                                     Version 0.50  


Unlocking device with UID 08:70:01:05:69:8C:AB:CD:EF:AA:BB:CC ... done (0)
Device Bootloader Identity   : 0x1051, Features: 0x100, Bootloader Size: 0x2000

Requesting App Version String ...
  Current App Version String is: [SB KNX BL ]

Loading new firmware file ...
  Hex file parsed: starting at 0x3000, length 11460 bytes
  File App Version String is : S_RM_H6 1.01 found at address 0x2cb3
  Info: There are 4096 bytes of unused flash between bootloader and firmware.

Requesting Boot Descriptor ...
  Current firmware: starts at 0x5d204c42 ends at 0xffffff00 CRC is 0x5aa55aa5

Starting to send new firmware now: 
Erase sector 3 ...done (0)
 OKErase sector 4 ...done (0)
 OKErase sector 5 ...done (0)
 OKSending application data (11460 bytes) 
......................................................................................................................................................................................................................................................................................................................................................
Program device at flash address 0x3000 with 4096 bytes and CRC32 0x87ff80f3 ... done (0)
......................................................................................................................................................................................................................................................................................................................................................
Program device at flash address 0x4000 with 4096 bytes and CRC32 0x1579152b ... done (0)
.................................................................................................................................................................................................................................................................................
Program device at flash address 0x5000 with 3268 bytes and CRC32 0xc67cf9a1 ... done (0)
Wrote 11460 bytes from file to device.

Preparing boot descriptor with start address 0x3000, end address 0x5cc4, CRC32 0x443b6767, APP_VERSION pointer 0x5cb3
..Update boot descriptor with CRC32 0x3c8aa286, length 10 done (0)
Firmware Update done, Restarting device now ...

Antworten