Bootloader
Aus iSysBus Doku
Hauptseite / Firmware / Bootloader
Allgemein
Der Bootloader ist Bestandteil der Software auf einem Knoten.
Er dient dazu die Firmware eines Knotens per Fernwartung auszutauschen, damit ist ein Ausbau des Knotens nicht nötig.
Funktionsweise
- Beim Booten des Knotens sendet der Bootloader eine Bootmeldung
- Wurde während des Einschaltens bzw. Drücken der Reset-Taste die NodeIdentify-Taste gedrückt, so meldet sich der Knoten mit einer weiteren Nachricht, die anzeigt, dass der Knoten konfiguriert werden möchte. Der Knoten bleibt dann im Bootloader-Modus.
- Nachdem die Bootmeldung gesendet wurde, kann dem Knoten innerhalb einer bestimmten Zeitspanne per SetMode befohlen werden, im Bootloader-Modus zu bleiben. Das ist hilfreich, wenn sich z.B. die Firmware aufhängt und nicht mehr angesprochen werden kann. Somit kann der Knoten mit einer korrekt arbeitenden Firmware aktualisiert werden.
- Wenn innerhalb der vorgegebenen Wartezeit kein Befehl zum Erhalt des Bootloader-Modus eingetroffen ist, wird eine weitere Meldung gesendet und die Firmware gestartet.
Vorgang Neuer Knoten
Veraltet; siehe Inbetriebnahme
Hier mal ein Anfang ... als Beispiel an einem USART-Bootloader
Vorgang Neuer Knoten
- Man baut einen Knoten
- Knoten per ISP an den Visu anschließen
- Visu bearbeitet Bootloader-hex-file (SerialId, HardwareId, Interface und Inputpin)
- Visu schreibt Bootloader in Knoten (NodeId = 0)
- Etikett mit SerialId auf Knoten kleben
- Knoten im Haus einbauen
- Knoten startet im Betriebsmodus Bootloader
- Knoten meldet sich auf dem bus wenn Reset oder Inputpin betätigt wurde
- Visu empfängt die Meldungen der ungeflashten Knoten und zeigt Wizard an
- Mit Wizard lässt sich NodeId, Knotenname, Verbauort, etc. festlegen und speichern
- Visu initialisiert Knoten mit neuer NodeId
- Knoten übernimmt neue NodeId und bestätigt die Nachricht
ab hier erfolgt die Kommunikation mit dem Knoten Adressbassiert über seine eigene NodeId
- Visu schreibt Firmware in den Knoten
- Visu setzt den Knoten in Betriebsmodus Firmware_Normal
- Knoten startet Firmware (Bootloader ab hier beendet)
- Visu setzt den Knoten in Betriebsmodus Firmware_Config
- Visu konfiguriert Knoten mit dem Config-Dienst
- Visu setzt den Knoten in Betriebsmodus Firmware_Normal
- Knoten erfüllt seine Aufgaben
Ablauf
(wird sich noch ändern!)
- Bootloader startet und initialisiert can- oder usart interface sowie watchdog
- NodeId aus dem eeprom lesen, wenn grösser als 2047 -> ungültig auf null setzen und ins eeprom schreiben
- InputPin aus flash einlesen und pullup einschalten
- überprüfen ob letzter reset vom watchdog kam, wenn ja, überprüfen ob bootloader oder firmware am laufen war und zähler im eeprom dementsprechend erhöhen
- wenn maximal reset-anzahl überschritten/erreicht, warnung senden
- wenn NodeId != 0 und Modus im eeprom auf Firmware_Normal -> Firmware starten
- SerialId aus flash einlesen
- Modus im eeprom auf Bootloader setzen
- Beginn Endlosschleife
- watchdog resetten
- wenn NodeId == 0, InputPin abfragen, entprellen und gegebenfalls "I'm here" Nachricht senden (wird automatisch beim ersten durchlauf gesendet)
- nachricht empfangen und zusammenbauen, wenn keine nachricht oder inkomplett -> Schleife von vorn
- nachricht komplett empfangen -> überprüfen auf unicast
- InitNode und SetNodeId befehle auswerten und ausführen, antwort zusammenstellen
- InitNode: bekommene SerialId vergleichen und VisuId auf absender stellen
- SetNodeId: absender mit VisuId vergleichen, NodeId neu setzen und ins eeprom schreiben
- wenn NodeId != 0, weitere befehle auswerten und ausführen, antwort zusammenstellen
- GetPageSize: PageSize antworten
- SetPageAddr: überprüfen ob gültig und setzen
- WriteFlash: page an gesetzter PageAddress füllen und antworten wenn ganze page gefüllt und geschrieben
- SetMode: Modus ändern (Firmware_Normal,Reboot)
- ReadEepromByte: eeprom an gegebener adresse auslesen und antworten
- wenn verlangt, antwort senden
- Schleife von vorn