Inhaltsverzeichnis
Sourcen
Alle Sourcen sowohl von der Firmware wie vom Bootloader stehen unter der LGPL Lizenz und sind in Github repository zu finden.
Compilieren
Zum Compilieren braucht ihr die Arduino IDE in einer Version > 1.5.6. Alles weitere ist im Repository vorhanden.
Nach der Installation müßt ihr der Arduino IDE noch den richtigen Sketchbook Ordner einstellen. Dazu geht ihr ins Einstellungsmenü.
Unter Sketchbook-Speicherort wählt ihr nun im ausgecheckten Verzeichnissbaum den Ordner „SketchBook“ aus.
Nach dem verlassen des Dialoges könnt ihr nun unter Werkzeuge/Board das „OpenSeaMap Data Logger w/ ATmega328“ Board auswählen.
Jetzt einmal testweise mit STRG+r compilieren, um zu schauen, ob alles richtig gefunden wird.
Mit dem richtigen Programmer (z.B. einen USBAsp) können wir nun per „Hochladen mit Programmer“ die neue Loggersoftware hochladen.
ACHTUNG: jedes Flashen mit einem Programmer überschreibt den Bootloader. Will man später den Bootloader weiter benutzen, muss man diesen neu Programmieren und die Software per SD Karte flashen.
HEX und BIN Datei
In eurem TEMP Verzeichniss werden beim Compilieren nun mehrere Unterverzeichnisse von der ArduinoIDE angelegt.
Für uns wichtig ist das „build*.tmp“ Verzeichniss. Darin befinden sich die Compilierten Dateien. Die Datei, die wir brauchen, heisst, „OpenSeaMap.cpp.hex“.
Für den Bootloader 1 brauchen wir diese Datei nur in OSMFIRMW.HEX umzubennen.
Beim Bootloader 2 müssen wir zunächst die Datei in ein reines BIN Format konvertieren. Dazu dient das Programm HEX2BIN HEX2BIN.ZIP
Einfach in einen leeren Ordner kopieren. HEX-Datei(en) dazu. Console öffnen und Programm aufrufen mit
HEX2BIN.EXE .
Nun werden alle Hex Dateien in BIN's konvertiert. Noch den Richtigen Namen geben und schon kann man die Firmware per SD Karte flashen.
Flashen
Für das Flashen der Firmware muss man 2 Dinge unterscheiden.
Für das Debuggen und probieren, reicht es einfach aus der Arduino IDE heraus mit dem ISP die Firmware in den Logger zu laden. Da bei jedem Ladevorgang aber das gesamte Flash gelöscht wird, wird somit nach dem 1. Laden auch der Bootloader gelöscht.
Will man den Logger für den produktiven Betrieb mit Bootloader benutzen, muss man zunächst den Bootloader in den Logger laden und dann per SD Karte die Firmware. Dazu muss man die HEX Datei aus der Arduino Umgebung in eine BIN Datei konvertieren und dann mit der richtigen Kennung auf die SD Karte schreiben.
Es gibt jedoch eine kleine Hintertür im Bootloader, Dateien, die OSMFIRMW.BIN heißen werden grundsätzlich immer geflasht. Ansonsten muss die Versionsnummer der Datei größer sein, als die beeits im EEPROM verzeichnete Version. Die FW-Datei muss in dem Fall OSMFW###.BIN heißen, wobei ### die Versionsnummer mit führenden Nullen ist.
Wenn alles funktioniert kann man dann ein komplettes Image vom Logger machen. Das enthält dann sowohl den Bootloader wie auch die Firmware.
Bootloader
Für den Logger gibt es 2 verschiedene Bootloader Versionen.
Version 1: Die erste Version. (Logisch) Der Bootloader beruhte auf dem 2Boot Bootloader von thseiler und war mit <2KB recht klein und überschaubar. Der Bootlader konnte Dateien im Intel HEX Format von der SD Karte flashen. Die Version hatte jedoch einige entscheidende Nachteile.
- Sie konnte nur von älteren SD Karten ⇐2GB flashen, weil nur das FAT16 Dateisystem unterstützt wurde.
- Sie kam mit den moderneren schnellen SDHC Karten nicht zurecht. D.h. der Bootloader stürzt beim Einlegen der Karte und einem Neustart ab. Das bedeutete, daß man größere KArten immer erst nach dem Start des Loggers einlegen mußte.
- Der Bootloader hat keinerlei Versionskontrolle. D.h. man kann den Logger mit jedweder Firmware beschreiben. Und wenn der Logger eine Firmware auf der Karte findet wird diese immer wieder neu programmiert. D.h. man kann leider die Karte mit der Firmware nicht im Logger lassen. Diese würde immer wieder geflasht.
Version 2: bietet Abhilfe für all diese Probleme. Basierend auf dem avr_boot loader Beispiel von Petit File System
- Der Bootloader unterstützt Karten mit bis zu 32GB und FAT32 Dateisystem.
- SDHC Karten werden unterstützt
- Eingebaute Versionskontrolle, d.h. es werden nur neuere Firmwareversion geflasht. D.h. man kann ohne Probleme eine Firmwareversion auf der Karte belassen.
Natürlich hat die neue Bootloaderversion auch ein paar Nachteile.
- Der Bootloader ist größer. ca. 4KB
- Der Bootloader unterstützt nur noch das Binärformat. HEX Dateien können somit nicht direkt geflasht werden. Man muss sie zunächst umwandeln. (Was aber nur ein kleines Problem darstellt).
Wer den Bootloader umprogrammieren möchte, muss dafür das Atmel Studio 6.1 installieren. build und burn Batches für Windows sind mit im Repository.
alles neu
Um den Logger komplett neu zu programmieren, habe ich mir einen kleinen Batch geschrieben, der alles automatisch macht.
Zunächst werden die richtigen Fuses gesetzt und dann wird die Firmware 12 inkl. dem Bootloader 2 geflasht.
Das ganze basierd auf AVRDude und ist im Augenblick eingestellt auf einen USBAsp. Diesen gibt es bereits für ein paar Euro bei eBay.
Vergesst aber den Adapter von 10pol auf 6pol nicht…
Hier nun das Paket: batchprogramming.zip
In der Batchdatei burn_complete.cmd wird der AVRDude mit den Parametern
-cusbasp -Pusb
für die Hardwareanbindung angesprochen. Falls ihr einen anderen Programmer habt, dann müßt ihr hier entsprechend eingreifen…