Skip to content

bootloader

RealMerlin edited this page Mar 7, 2019 · 5 revisions

Funktion des Bootloaders

Der Bootloader ist ein kleines Programm fuer die ATmega32/ATmega644p MCUs, welches es ermoeglicht, per CAN Bus die eigentliche Applikation (Firmware) zu flashen. Er wird mit dem ISP Kabel und dem Tool uisp auf den Atmega geflasht und befindet sich dann im oberen Flashbereich.

Nach jedem MCU-Reset wird der Bootloader automatisch abgearbeitet. Dazu sind die richtigen Fuses zu setzen.

Das Booten laeuft folgendermassen ab:

  • Initialisieren des SPI-Schaltkreises und des CAN Controllers MCP2515
  • Laden der eigenen HCAN Adresse aus dem EEPROM
  • Versenden des Bootflag Status Bytes
  • Abarbeiten einer Schleife fuer maximal 5 Sekunden, darin
    • Firmware Checksumme CRC16 pruefen; wenn diese mit dem im EEPROM gespeicherten Wert uebereinstimmt, wird die Firmware nach 5 Sekunden gebootet
    • Befindet sich noch keine Firmware im Flash, so loest der Watchdog nach ca. 2 Sekunden einen Reset aus
    • Stimmt die Checksumme nicht, so wird am Ende der 5 Sekunden ein FIRMWARE_CRC16_ERROR Frame versendet
    • wird waehrend der 5 Sekunden ein DEVICE_BOOT_STOP Frame empfangen, so wird dieser mit DEVICE_BOOT_STOP_ACK bestaetigt und der 5-Sekunden-Countdown beendet; das kann mit dem Befehl bootloader im telican erreicht werden
  • Nun kann PC-seitig mit telican die Firmware per CAN uebertragen werden und der Bootloader schreibt sie in den Flash-Speicher

Flashen des Bootloader

Zuerst muessen die Fuses gesetzt werden. Liegt der Bootloader noch nicht als Hex-File vor, muss dieser erst compiliert werden. Dazu in das Verzeichnis der Bootloader hcanbl wechseln und den Bootloader compilieren:

$ make clean
$ make

Ist der ATmega32/ATmega644p schon einmal verwendet wurden, dann ist das Loeschen des Chips (inkl. EEPROM) sinnvoll:

$ make erase_chip

Dann wird er geflasht:

$ make flash

Nun sollten - wenn alles geklappt hat - FIRMWARE_CRC16_ERROR Frames auf dem HCAN Bus mit der Absender-Adresse 1023 erscheinen.

Weitere Moeglichkeiten des Bootloaders

Ist der Bootvorgang durch den Befehl bootloader unterbrochen worden, so verweilt die MCU im Bootloader. Hier koennen folgende Befehle abgesetzt werden:

Das EEPROM an Speicherstelle X auslesen:

> show ee X

Die im EEPROM gespeicherte HCAN Adresse anzeigen:

> show address

Die HCAN Adresse ins EEPROM schreiben:

> set address Y

Die MCU resetten:

> reset

Die Applikation/Firmware booten:

> loadapp

Eine neue Firmware flashen (fuehrt danach implzit loadapp aus):

> flash theNewFirmware.hex
Clone this wiki locally