\chapter{Prinzipielle Arbeitsweise eines Bootloaders}

Ein Bootloader ist ein kleines Programm, welches neue Programm-Daten
für einen Prozessor über eine Datenschnittstelle in Empfang nehmen kann
und in den Arbeitsspeicher dieses Prozessors ablegen kann.
Üblicherweise wird dieses über die Datenschnittstelle empfangene
Programm nach Beenden der Übertragung vom Bootloader gestartet.
Damit ist ein Rechner mit einem beschreibbaren Arbeitsspeicher
dann in der Lage, beliebige Anwenderprogramme aus dem
Arbeitsspeicher auszuführen.


Im Prinzip ist damit das BIOS eines PC's auch ein Bootloader,
allerdings erweitert um Möglichkeiten, die Schnittstelle
für den ersten Zugriff auf Programm-Daten einzustellen.
Beim PC läßt sich so oft eine ganze Kette von Peripheriegeräten
einstellen, die auf das Vorhandensein von Programm-Daten
getestet werden. 
Beim PC wird dann oft eine zweite Stufe gestartet, die weitere
Einstellungen (Auswahl von Betriebssystemen oder abgesicherter
Modus) ermöglicht.


Bei Mikrocontrollern ist der Bootloader meistens einfacher gestaltet.
Hier wird nur eine Schnittstelle untersucht und es gibt auch keine
weitere Einstellmöglichkeit im Betrieb.
Ein Merkmal für die Betriebsweise des Bootloaders besteht übrigens
im Typ des Arbeitsspeichers. Wenn der Arbeitsspeicher des Rechners
aus flüchtigem Speicher besteht (RAM = Random Access Memory), muß
der Bootloader vor einem Anwender-Programmstart sicher sein,
daß er gerade vorher ein Programm selbst geladen hatte.

Bei einem Mikrocontroller mit nicht flüchtigem Arbeitsspeicher (Flash)
darf der Bootloader annehmen, daß bereits irgendwann einmal
vorher ein Anwender-Programm in den Speicher geladen wurde.
Deshalb wird nach einer angemessenen Wartezeit auf neue Programm-Daten
versucht, das Anwenderprogramm zu starten. Dabei ist es egal,
ob gerade vorhin ein neues Anwenderprogramm geladen wurde oder nicht.
Selbst wenn noch nie ein Anwenderprogramm geladen wurde oder ein
fehlerhaftes, passiert nichts Schlimmes. Die Möglichkeit, ein
neues Anwenderprogramm zu laden, bleibt ja weiterhin erhalten.
Es ist eher das Gegenteil der Fall. Durch das fehlenden Anwenderprogramm
versucht der Bootloader immer wieder, die Kommunikation über
die serielle Schnittstelle aufzubauen.

Die Abbildung~\ref{fig:ablauf} zeigt die prinzipielle Arbeitsweise
von Bootloadern, die ihre Daten über eine serielle Schnittstelle
empfangen.

\begin{figure}[H]
\centering
\includegraphics[]{../FIG/ablauf.eps}
\caption{Prinzipielle Arbeitsweise eines Bootloaders}
\label{fig:ablauf}
\end{figure}

Der AVR-Zielprozessor wird beim Start des Daten-Sendeprozess auf dem PC
zurückgesetzt. Wenn dies nicht automatisch erfolgt, muß der AVR-Prozessor
von Hand zurückgesetzt werden. 
Der PC versucht die Kommunikation mit dem AVR-Prozessor aufzubauen, indem er ein
Datenbyte über die serielle Schnittstelle schickt und auf die Antwort
des AVR-Prozessors wartet. Wenn die Antwort nicht in angemessener Zeit erfolgt,
wird dieser Vorgang wiederholt.
Das Bootloader Programm auf dem AVR Prozessor wartet nur eine begrenzte
Zeit auf Daten (Time limit). Beim Überschreiten der Wartezeit wird
versucht, das Anwender-Programm im Flash-Speicher zu starten.
