Bootloader

Aus iSysBus Doku

Wechseln zu: Navigation, Suche

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

  1. Beim Booten des Knotens sendet der Bootloader eine Bootmeldung
    1. 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.
    2. 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.
  2. 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

  1. Man baut einen Knoten
  2. Knoten per ISP an den Visu anschließen
  3. Visu bearbeitet Bootloader-hex-file (SerialId, HardwareId, Interface und Inputpin)
  4. Visu schreibt Bootloader in Knoten (NodeId = 0)
  5. Etikett mit SerialId auf Knoten kleben
  6. Knoten im Haus einbauen
  7. Knoten startet im Betriebsmodus Bootloader
  8. Knoten meldet sich auf dem bus wenn Reset oder Inputpin betätigt wurde
  9. Visu empfängt die Meldungen der ungeflashten Knoten und zeigt Wizard an
  10. Mit Wizard lässt sich NodeId, Knotenname, Verbauort, etc. festlegen und speichern
  11. Visu initialisiert Knoten mit neuer NodeId
  12. Knoten übernimmt neue NodeId und bestätigt die Nachricht

ab hier erfolgt die Kommunikation mit dem Knoten Adressbassiert über seine eigene NodeId

  1. Visu schreibt Firmware in den Knoten
  2. Visu setzt den Knoten in Betriebsmodus Firmware_Normal
  3. Knoten startet Firmware (Bootloader ab hier beendet)
  4. Visu setzt den Knoten in Betriebsmodus Firmware_Config
  5. Visu konfiguriert Knoten mit dem Config-Dienst
  6. Visu setzt den Knoten in Betriebsmodus Firmware_Normal
  7. Knoten erfüllt seine Aufgaben


Ablauf

(wird sich noch ändern!)

  1. Bootloader startet und initialisiert can- oder usart interface sowie watchdog
  2. NodeId aus dem eeprom lesen, wenn grösser als 2047 -> ungültig auf null setzen und ins eeprom schreiben
  3. InputPin aus flash einlesen und pullup einschalten
  4. ü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
  5. wenn maximal reset-anzahl überschritten/erreicht, warnung senden
  6. wenn NodeId != 0 und Modus im eeprom auf Firmware_Normal -> Firmware starten
  7. SerialId aus flash einlesen
  8. Modus im eeprom auf Bootloader setzen
  9. Beginn Endlosschleife
  10. watchdog resetten
  11. wenn NodeId == 0, InputPin abfragen, entprellen und gegebenfalls "I'm here" Nachricht senden (wird automatisch beim ersten durchlauf gesendet)
  12. nachricht empfangen und zusammenbauen, wenn keine nachricht oder inkomplett -> Schleife von vorn
  13. nachricht komplett empfangen -> überprüfen auf unicast
  14. InitNode und SetNodeId befehle auswerten und ausführen, antwort zusammenstellen
    1. InitNode: bekommene SerialId vergleichen und VisuId auf absender stellen
    2. SetNodeId: absender mit VisuId vergleichen, NodeId neu setzen und ins eeprom schreiben
  15. wenn NodeId != 0, weitere befehle auswerten und ausführen, antwort zusammenstellen
    1. GetPageSize: PageSize antworten
    2. SetPageAddr: überprüfen ob gültig und setzen
    3. WriteFlash: page an gesetzter PageAddress füllen und antworten wenn ganze page gefüllt und geschrieben
    4. SetMode: Modus ändern (Firmware_Normal,Reboot)
    5. ReadEepromByte: eeprom an gegebener adresse auslesen und antworten
  16. wenn verlangt, antwort senden
  17. Schleife von vorn

Weiterführende Links

Meine Werkzeuge