ebps.de.vu > Schaltungen > AVR > Tiny2313-Bootloader

ATTiny2313-Bootloader

Beschreibung

Als der ATTiny2313 den AT90S2313 ablöste, war ich begeistert von den vielen neuen Features, die der Tiny2313 bietet. Unter anderem gibt es die Möglichkeit, dass das Programm selber Daten in den Programmspeicher schreiben kann - es kann sich also selbst verändern! Dadurch wird es möglich, einen Bootloader zu verwenden, um neue Programme per RS232 übertragen zu können. Anders als bei Controllern aus der ATMega-Serie fehlen dem Tiny2313 jedoch die Fuse-Bits, um einen Bootloader-Bereich am Ende des Flash-Speichers festzulegen, in dem die Ausführung des Programms nach dem Anlegen der Betriebsspannung beginnt. Den Bootloader an den Anfang des Programms zu legen ist auch keine gute Idee, da dann im Hauptprogramm enthaltene absolute Adressangaben nicht mehr stimmen würden. Aus diesem Grund habe ich einen besonderen Bootloader geschrieben, der diese Probleme umgeht. Die einzige Einschränkung ist, dass das Hauptprogramm einen "rjmp"-Befehl an Adresse 0x000 (Reset-Vektor) enthalten muss, was aber bei den meisten Programmen der Fall ist. Außerdem darf das Programm natürlich nicht selbst in den Flashbereich schreiben, in dem sich der Bootloader befindet. Ein weiterer Nachteil ist, dass durch den Bootloader natürlich ein Teil des Programmspeichers belegt wird, der für das Hauptprogramm dann nicht mehr zur Verfügung steht (ist das Hauptprogramm zu groß, wird der Programmiervorgang beim Erreichen des Bootloader-Bereichs abgebrochen, das Programm auf dem PC sollte dann eine Fehlermeldung ausgeben). Ich habe mich aber bemüht, den Bootloader so klein wie möglich zu halten, so dass noch etwas mehr als drei Viertel des Programmspeichers frei sind.

Einstellungen

Am Anfang der Assembler-Datei können einige Einstellungen gemacht werden:

Verwendung

Der Bootloader wird wie ein normales Assemblerprogramm mit einem gewöhnlichen Programmer in den Controller geschrieben. Anschließend wartet er nach dem Anlegen der Betriebsspannung ca. 2 Sekunden, bevor er das Hauptprogramm (sofern vorhanden) startet. Erhält er innerhalb dieser Zeit Befehle über die RS232-Schnittstelle, wird der Countdown zurückgesetzt und der Befehl ausgeführt. Es wird nur das AVR910-Protokoll unterstützt, nicht aber das AVR109-/Butterfly-Protokoll (Block Transfer), der Aufruf von avrdude für die Verwendung mit diesem Bootloader könnte also z.B. so aussehen:
avrdude -p t2313 -c avr910 -u -U flash:w:hauptprogramm.hex
(die Option "-u" ist nötig, da avrdude sonst versuchen würde, die Fuse-Bytes des AVR zu lesen) bzw. zum Schreiben des EEPROMs:
avrdude -p t2313 -c avr910 -u -U eeprom:w:eeprom-daten.hex
Ich weiß nicht, ob der Bootloader auch mit anderen Programmen (z.B. AVRProg von Atmel) zusammenarbeitet, deshalb würde ich mich sehr über Erfahrungsberichte freuen.

Links