|
|
MMC/SD Bootloader für AT Mega
[Bearbeiten] BeschreibungDieser Bootloader wird einmalig, z. B. per PonyProg, STK500, etc., in einen AVR Atmega geschrieben. Ab nun kann das Hauptprogramm mit Hilfe einer SD oder MMC Speicherkarte in den µC geschrieben werden. Um sicherzustellen dass das Gerät mit dem richtigen Update beschrieben wird, wird im Hauptprogramm mit Hilfe einer Section am Ende des Hauptprogramms eine eindeutige Hardware-ID, eine Software-Versionsnummer und eine Prüfsumme hinterlegt. Zum Aktualisieren des Hauptprogrammes wird im selbigen die Versionnummer erhöht, kompiliert, und mit einem kleinen Kommandozeilen-Tool die CRC berechnet und in die Datei geschrieben. Diese Datei wird dann auf eine Speicherkarte kopiert, an den µC angeschlossen, und der µC resettet. [Bearbeiten] Ausstattung
[Bearbeiten] Erstellen und Anpassen[Bearbeiten] BootloaderDer Bootloader muss zunächst an den verwendeten µC angepasst werden. Dazu öffnet man zunächst das makefile des Bootloaders und passt diesen Ausschnitt an:
Bei der DEVID handelt es sich um eine eindeutige Hardware-Kennung, die für jedes Gerät eindeutig vergeben werden muss. BOOTLOADERSTARTADR ist die Adresse, auf der der Bootloader liegt, im obigen Beispiel für einen ATMega 16. Dieser hat 16384 Bytes Flash, davon wird die Größe des Bootloaders (2048 Bytes) abgezogen und man erhält 14336 = 0x3800. Nun muss noch in mmc_lib.h angegeben werden, wo die Speicherkarte angeschlossen ist:
Für CS der Speicherkarte sollte der SS Pin des µC verwendet werden. Der SS Pin muss sowieso auf Ausgang und Low gesetzt werden, weil sonst der SPI Master nicht funktioniert. [Bearbeiten] HauptprogrammIm Hauptprogramm müssen folgende Angaben an entsprechender Stelle im makefile gemacht werden:
Das Format muss zwingend auf binary gesetzt werden. Die DEVID muss mit der des Bootloaders übereinstimmen. Mit SWVERSIONMAJOR und SWVERSIONMINOR wird die Softwareversionsnummer eingestellt. Der Bootloader schreibt das Hauptprogramm nur dann, wenn die Versionnummer auf der Karte größer als im Flash ist. BOOTLDRINFOSTART ist die Adresse, auf der der Informationsblock (DEVID, Version, CRC) landet. Das Beispiel bezieht sich ebenfalls auf den ATMega16: 16384 Flash - 2048 Bootloader - 8 Bytes Info = 14328 = 0x37F8. In main.c wird der Infoblock deklariert:
Nun kann das Hauptprogramm compiliert werden. Die entstehende .hex Datei (binary Format!) wird anschließend noch mit dem Kommandozeilentool crcgen.exe behandelt (z. B. crcgen myflashfile.hex). Der Aufruf dieses Programmes kann auch vom makefile aus geschehen. Das Update benennt man am besten etwa in der Form MeinApparat-v1.0-bin, darf aber beliebig (lang) sein . [Bearbeiten] Einschränkungen
[Bearbeiten] Download und DiskussionDer Sourcecode findet sich in der Codesammlung unter http://www.mikrocontroller.net/topic/67047#new Immer schön runterscrollen um die brandneueste Version zu erwischen! [Bearbeiten] Dankean
für die Codeoptimierung. So konnte die ursprüngliche Fassung, in der nur FAT16 implementiert war, um FAT12 erweitert werden. |