Dieser Artikel beschreibt, wie der Titel schon vermuten lässt, die Funktion von Bootloader für AVR bzw. AtMega Mikrocontroller.
 Zudem habe ich zwei Bootloader entwickelt die ich in diesem Artikel vorstellen möchte.

 

Eine schöne detaillierte Anleitung zum Einstieg in das Thema AVR Bootloader gibt es mal wieder bei mikrocontroller.net:

AVR Bootloader in C - eine einfache Anleitung


Für die ATtiny-Mikroprozessoren funktioniert das Prinzip des Bootloaders, wie bei der ATMega-Prozessorreihe angewendet, nicht.
Dies liegt unter anderem an
    - fehlenden Fuses zum Einstellen des Bootlaoder-Bereich im Flash
    - kein spezieller Resetvektor für den Bootloader
    - und es steht keine separate Interrupttabelle für einen Bereich innerhalb des Bootloaders zu Verfügung.

Wie man dennoch einen Bootloader auf einen ATtiny verwenden kann, wird in dem folgenden Beitrag detailliert erklärt: Konzept für einen ATtiny-Bootloader in C

 

Anbei kann man einen Bootloader (sbooti) runter laden, den ich auf Basis des Artikels "AVR Bootloader in C - eine einfache Anleitung" erstellt habe.

Dieser Bootloader ist bei weitem nicht so performant und funktional wie z.B. der "bootloader" von Peter Dannegger (AVR_Bootloader_FastBoot_von_Peter_Dannegger), er basiert jedoch auf dem Beispiel aus dem erwähnten Beitrag und kann durch seinen einfachen Aufbau gut nachvollzogen werden. Für die UART-Kommunikation des sbooti Bootloaders wird in diesem Fall die UART-Bibliothek von Peter Fleury (http://homepage.hispeed.ch/peterfleury/uartlibrary.zip) verwendet. Diese Bibliothek kann universell für die gesamte Palette der ATMega Mikrocontroller eingesetzt werden. Für einen Bootloader ist diese Bibliothek jedoch nur bedingt geeignet, da gewisse Funktionalitäten der Bibliothek nicht benötigt werden und den Bootloader-Code etwas aufblähen lassen. Um den Code des Bootloaders so klein wie möglich zu halten, sollte man die UART-Kommunikation so rudimentär wie möglich jedoch so funktional wie möglich gestalten.

 

Zum Senden der Firmware an den Mikrocontroller kann das Programm "Firmware Flasher" (zu finden unter Projekte->Software) genutzt werden.

Alternativ können die Daten auch mit z.B. putty gesendet werden, jedoch finde ich es einfacher mit der Software Firmware Flasher zu flashen.

 

sbooti Bootloader (simple bootloader)

Der sbooti Bootloader ist ein ganz simpler / intuitiver Bootloader, dessen Code gut zu lesen und zu verstehen ist. Er erledigt nur die einfachsten rudimentären Aufgaben die ein Bootloader erfüllen muss:

1.) Empfangen der neuen Daten die in den Flash geschrieben werden sollen.

2.) Parsen der empfangenen Daten und befüllen des internen page-Buffers.

3.) Schreiben des page-Buffers in die entsprechende page

In der aktuellen Version wird der Flash-Speicher neu geschrieben jedoch keine Verifizierung durchgeführt ob die Daten korrekt geschrieben wurden. Ebenfalls kann mit diesem Bootloader nur der FLASH und nicht das EEPROM beschrieben werden.

 

ebooti Bootloader (extended bootloader)

Noch in der Entstehung!

 

Weitere Bootloader für Atmel Mikrocontroller:

https://code.google.com/p/optiboot/ bzw. https://github.com/Optiboot/optiboot

arduino bootloader: https://code.google.com/p/arduino/source/browse/#svn%2Ftrunk%2Fhardware%2Farduino%2Fbootloaders%253Fstate%253Dclosed

bzw. https://github.com/arduino/Arduino/tree/1.6.1/hardware/arduino/avr/bootloaders