Bootloader

Der Bootloader erlaubt eine Aktualisierung der Knotensoftware über CAN im eingebauten Betrieb.

Die zu flashenden Daten werden aus dem erzeugten S19-File in einen Flashcontainer überführt. Im Flashcontainer (Dateiendung .cfc = CanathomeFlashContainer) liegen Infos über die Verwendung der Knotensoftware vor. Anhand dieser kann der PC prüfen, ob die ausgewählte Software auf einen bestimmten Knoten geflasht werden darf (Sicherheit vor unzulässigem/versehentlichem Überschreiben). Stimmen vorausgesetzter Softwarestand und Hardwarestand überein, so erlaubt HomeCentral das Flashen in den Zielknoten.

Flashablauf

In der Flashkomponente von HomeCentral wird der zu schreibende Flashcontainer ausgewählt. Daraufhin wird geprüft welche Knoten für diese Softwareversion in Frage kommen und zur Auswahl gestellt.

Zunächst werden die Laufzeitdaten (LiveConfig-Daten) vom Knoten ausgelesen und im PC zwischengespeichert. Daraufhin wird der zu flashende Knoten in den Bootloader geschickt, der Flash- und Eepromspeicher gelöscht und die neuen Programmdaten in kleine Pakete (max. 512Bytes – aufgeteilt auf viele CAN-Botschaften) an den Knoten geschickt. Anschließend werden die Programmdaten komplett zurückgelesen und im PC auf Korrektheit geprüft. Bei korrektem Flashverlauf, wird dann das ACA-Flag (ApplicationCodeAvailable-Flag) gesetzt, das aussagt, dass gültiger Applikationscode vorliegt und der Bootloader beim nächsten Reset in die Applikation verzweigen darf. Wird oder ist dieses Flag nicht gesetzt, so muss darf der Bootloader nicht in die Applikation aufsteigen. Hinweis: Das ACA-Flag muss so gross sein wie die kleinste zu löschende Flasheinheit.
Ein abschliessendes Resetkommando zwingt den Knoten zu einem Neustart, bei dem er dann in die Applikation durchstartet. Der gelöschte Eepromspeicher wird dann erkannt und mit ROM-Defaultwerten beschrieben.
Typischerweise werden dann noch die (zuvor ausgelesenen oder sowieso im PC vorliegenden) Konfigurationsdaten mit HomeCentral neu eingespielt.

Bootloaderkommandos

Die Bootloaderdaten und -kommandos werden in einem Telegramm des Typs TransportObjekt (TO) übermittelt. Folgende Kommandos zwischen steuerndem/flashenden PC und Knoten werden zur Updateprogrammierung verwendet:

Code Kommando Parameter Beschreibung
0x01 ClearBuffer löscht den Puffer und setzt den Schreibpointer auf Pufferanfang
0x02 WriteInBuffer 8 Nutz-
datenbytes
autoinkrement; merkt Daten vor, die später dann geflasht werden; Buffersize: 512Byte
0x03 FlashBuffer u08 PPage; u16 Address; u16 Length schreibt den Puffer ins Flash mit der angegebenen Länge; Flash muss zuvor per Kommando gelöscht worden sein (Maximallänge: 512)
0x04 ReadFlash u08 PPage;
u16 Address;
u16 Length;
u08 Zykluszeit
fordert den zu flashenden Knoten auf, die Daten aus dem Flash zu lesen und zu übermitteln; Zeit zwischen zwei Antworttelegrammen ist im Parameter „Zykluszeit“ [in 1ms] festgelegt.
0x05 Erase ApplicationFlash Löscht den für die Applikation reservierten Flashbereich (nicht Eeprombereich)
0x06
0x07 Read BootloaderData liest Statusinfos des Bootloaders aus (Versionsnummer)
0x08 Reset Reset auslösen
0x09 ConfigureNode u08 Knr schreibt die gewünschte Knotennummer in den FixBereich des Eeproms; neue Knotennummer wird erst nach Reset übernommen
0x0A ReadEeprom u16 Address liest Eeprominhalt (4Bytes) ab gewünschter Adresse
0x0B WriteEeprom u16 Address, u32 Data schreibt 4Bytes ins Eeprom; auch in den FixBereich!
0x0C Erase Application Eeprom löscht den Application-Bereich des Eeproms (FixEeprom bleibt unangetastet)
0x0D StartApplication startet die Applikation OHNE vorheriges Setzen des ACA Flags (Rücksprung in Bootloader bei nächstem Reboot)

Antworten vom zu flashenden Knoten:

Code Kommando Parameter Beschreibung
0x20 AliveMessage 0x00 wird alle 5s geschickt, um anzuzeigen, dass Knoten im Bootloader ist
0x21 RespClearBuffer 0x00 Antwort auf ClearBuffer
0x22 RespWrite InBuffer 1 Statusbyte Antwort auf WriteInBuffer; 0-254: Anzahl der in den Puffer geschriebenen 8Byte-Blöcke;
255: Fehler – Overflow
0x23 RespFlashBuffer 1 Statusbyte Antwort auf FlashBuffer; 0: kein Fehler; 1: Adressfehler (auf diese Adresse darf nicht geflasht werden)
0x24 RespReadFlash 8 Nutz-
datenbytes
Antwort auf ReadFlash
0x25 RespErase ApplicationFlash 1 Statusbyte Antwort auf Erase ApplicationFlash; 0: kein Fehler; 1 Fehler aufgetreten
0x26
0x27 RespRead BootloaderData 2 Antwortbytes Antwort auf ReadBootloaderData
Byte0: Bootloaderversion (Highbyte);
Byte 1: Bootloaderversion (Lowbyte)
0x29 RespConfigure Node 1 Statusbyte Antwort auf ConfigureNode; 0: kein Fehler; 1: Fehler aufgetreten
0x2A Resp ReadEeprom u16 Address, u32 Data Antwort auf ReadEeprom
0x2B Resp WriteEeprom 1 Statusbyte Antwort auf WriteEeprom; 0: kein Fehler aufgetreten; 1: Fehler (PVIOL, ACCERR); 2: Adressfehler
0x2C RespErase Application Eeprom 1 Statusbyte Antwort auf Erase Application Eeprom; 0: kein Fehler; 1: Fehler
0x2D Resp StartApplication Antwort auf StartApplication

MemoryMap

Das folgende Diagramm zeigt die Memorymap der Zielknoten. Hieraus ist ersichtlich, an welche Adressen die Applikation gelinkt werden muss, und wo im Speicher welche Informationen abliegen.