Ultrasonic Level Meter Boot Loader Page in English
Ultrasonic Level Meter Boot Loader Page in English

Bootloader

Vor dem Start des Sensor-Programms wird ein Bootloader ge­startet, der es ermöglicht die Firm­ware über die RS485-Schnittstelle upzudaten. Der Boot­loader sendet ebenfalls im 9-Bit-Mode ein Asterisk ("*") mit ge­setztem 9. Bit. Anschließend wartet er maximal 17 ms auf Daten vom Host bevor er das Haupt­programm anspringt. Dieses muss dazu un­mittel­bar nach der Vektor­tabelle beginnen, also bei Adresse 0x0013.

17 ms scheinen sehr kurz dafür aber die Anzeige­einheit hat nichts anderes zu tun als darauf zu warten und so ist der Zeit­rahmen mehr als aus­rei­chend.

Der ältere Bootloader war für den AT90S2313 geschrie­ben und sprang nach 0x000b. In der aktuellen Firm­ware ist dies kein Problem da alle Interrupt-Vektoren ab 0x000b nicht benutzt werden und eben­falls nach 0x0013 springen. Wenn jedoch spätere Versionen insbe­sondere den Pin-Change-Interrupt benutzen würde der alte Boot­loader nicht funk­tionieren. Beden­ken Sie dies falls sie den alten Boot­loader im Einsatz haben.

Wenn der Host die Firm­ware ändern will ant­wortet er mit einem Doppel­kreuz und ge­setztem Bit 9. Bei anderen Ant­worten wird das Haupt­programm ange­sprungen.

Wird der Boot­loader aktiviert, erhöht er das Timeout auf 1.1 s. In keinem Fall darf zwischen emp­fangenen Zeichen mehr als 1.1s ver­gehen sonst wird der Bootloader beendet.

In den folgenden Tabellen ist Bit 9 durch die Farb­codierung angezeigt. Ein gesetztes Bit 9 wird gelb markiert, ein gelöschtes grün.

Die Daten sendet das Display binär in folgendem Format:

Daten '!' (0x21) ADRhigh ADRlow Data Checksum 0x00
Länge 1 1 1 32 1 1

Das Ausrufezeichen ist das Schreibkommando. Die Adresse ist in Bytes und muss an einem Seiten­anfang liegen. Es kann immer nur eine Seite auf einmal und als ganzes ge­schrie­ben werden.

Der Sensor programmiert die ent­sprechende Seite und ant­wortet mit "+" bei Erfolg und mit "-" bei einem Fehler. Auch diesem folgt ein 0x00 um eine einheitliche Telegrammende-Kennung einzuhalten. Wenn Sie versuchen eine Seite im Addressbereich des Bootloaders zu ändern wird er mit "P" antworten was soviel wie "protected" bedeutet. Die Seite wurde in diesem Fall nicht programmiert.

Die Antworten des Sensors werden im Display durch Setzen der Flags BOOTLDOK, BOOTLDERROR und BOOTLDPROTECTED reflek­tiert. BOOTLDPROTECTED wird dabei ignoriert da das Sensor.hex-File auch den Boot­loader beinhaltet.

Während des Schreibens wird die CPU angehalten. Der Host sollte daher keine Zeichen senden bevor er das Quittungs­byte erhält.

Das Display kann die Firmware auch auslesen. Dazu sendet es folgendes Telegramm:

Daten '?' (0x3F) ADRhigh ADRlow Checksum 0x00
Länge 1 1 1 1 1

Auch hier ist die Adresse in Bytes, sie muss jedoch nicht zwingend auf einem Seiten­anfang liegen.

Der Sensor antwortet mit folgendem Telegramm:

Daten '=' (0x3D) ADRhigh ADRlow Data Checksum 0x00
Länge 1 1 1 32 1 1

Bei der ganzen Prozedur ist zu beachten, dass der Boot­loader niemals länger als 1.1 s auf ein Zeichen wartet. Bei Timeout oder Telegrammfehler wird der Bootloader abgebrochen und das evtl. bis dahin geschriebene Haupt­programm angesprungen.

Der Bootloader kann sich nicht selbst modi­fizieren und wird daher Daten in seinem Adressbereich ignorieren. Dies gilt auch für Unterprogramme wie etwa zum Senden und Empfangen auf der seriellen Schnitt­stelle! Diese wurden, da sie sowohl vom Boot­loader als auch vom Haupt­programm gebraucht werden und als ausgetestet und fehlerfrei gelten, in den Adressbereich des Bootloaders gelegt. Beim Schrei­ben der Page 0 wird der Reset­vektor unabhängig von den emp­fangenen Daten auf den Boot­loader gesetzt. Die einzige Mög­lichkeit, den Bootloader selbst oder seinen Einsprung zu verändern wäre der Down­load einer ent­sprechenden Applikation.

Im fertigen System läuft das ganze für den Benutzer ziemlich einfach ab. Geben Sie das Kommando update. Das Display sendet daraufhin "Waiting for Intel HEX file". Senden Sie nun das "sensor.hex"-File und der Rest geht automatisch.

Das File darf keine Zeilen enthalten, die nicht mit einem Doppel­punkt beginnen (auch keine Leerzeilen), sonst schlägt die Prozedur fehl. AVR-Studio erzeugt dieses File korrekt und Sie können es direkt verwenden.

Benutzen Sie den Bootloader nicht wenn die Kommunikation mit dem Sensor ohnehin Probleme macht! Lösen sie diese zuerst. Obwohl der Boot­loader sich nicht selbst modi­fizieren kann (und Sie daher nicht mit einem 'toten' Sensor enden werden), kann der Sensor doch funktionslos zurückbleiben wenn Übertragungs­fehler die korrekte und vollständige Program­mierung ver­hindern.