Diese Seite beschreibt RS232-Bootloader. Wer sich für USB-Bootloader interessiert, der schaut bitte hier nach.
Diese Software nennt man den Bootloader. Sie muss vorab auf konventionellem Wege in den PIC gebrannt werden, also in einem Brenner oder via ICSP.
Der Bootloader wird aber nur ein Mal in den PIC gebrannt, danach steht er für viele RS232-Brennvorgänge zur Verfügung. Das bringt deutliche Vorteile, wenn die Software in einem PIC häufig modifiziert werden muss, insbesondere dann, wenn der Nutzer des PIC-gesteuerten Gerätes gar keinen eigenen Brenner besitzt. Man könnte damit also Firmwareupdates mit Hilfe eines einfachen PCs durchführen.
Beim Reset des PIC muss zunächst der Bootloader gestartet werden. (Dafür steht an der Adresse0x0000 des Flash ein Sprung zum Bootloader.) Er überprüft, ob eine neue Software in den PIC gebrannt werden soll. Dazu ist z.B. ein an einem Pin angeschlossener Schalter abzufragen oder für eine kurze Zeit der RS232-Eingang zu überwachen.
Wenn es nichts zu brennen gibt, muss der Bootloader das Anwendungsprogramm starten, das sich z.Z. neben dem Bootloader im Flash befindet. Dieses Programm muss den PIC so vorfinden, als wäre der Bootloader nach dem Reset nie gelaufen. Der Bootloader muss also alle relevanten Veränderungen, die er in den PIC-Registerrn vorgenommen hat wieder rückgängig machen, bevor er das Nutzprogramm startet.
Normale Anwendungsprogramme sind so ausgelegt, das sie an der Adresse 0x0000 starten. Diese Adresse wird aber vom Bootloader benötigt. Der Bootloader muss also den für die Adresse0x0000 bestimmten Code des Anwendungsprogramms verlagern, und an einem anderen Ort ausführen können.
Da der Bootloader immer wieder eingesetzt werden soll, darf er sich nicht selbst überschreiben.
Das Anwendungsprogramm muss auch einige Bedingungen einhalten. Es
muss auf der Adresse 0x0000 mit einem Befehl beginnen, der
problemlos vom Bootloader an einer anderen Adresse ausgeführt
werden kann. Ein einfaches 'GOTO MAIN' erfüllt diese Bedingungen
vorbildlich. Ein relativer Sprung wäre dagegen fatal.
Auch muss das Nutzprogramm den Programmspeicherbereich freilassen,
den der Bootloader benötigt.
Folgende Einstellungen werden beim Brennen des Bootloaders festgelegt, und können durch den Bootloader selbst nicht mehr geändert werden:
Writeprotection und Codeprotection darf höchstens für den
Speicherbereich aktiviert sein, in dem der Bootloader steht. Der
Nutzprogrammspeicher muss frei zugänglich sein.
Dieser Bootloader ist für die PIC16F87x-Famile (ohne A am Ende) ausgelegt. Er benötigt eine RS232-Verbindung mit 2 zusätzlichen Handshakeleitungen (RB1 und RB2) sowie einen Taster an RB0.
Am PC sucht man sich eine RS232-Schnittstelle aus, und
konfiguriert für diese Schnittstelle die korrekte Datenrate und
aktiviert Hardware-Handshake.
Der PIC mit RS232-Interface (Treiber-IC), Taktquelle und
eingebranntem Bootloader wird an den PC mit einem RS232-Kabel
angeschlossen, und die Betriebsspannung bei gedrücktem Taster (an
RB0) eingeschaltet. Nun kann man dem PIC das zu brennende HEX-File
mit einem beliebigen Terminalprogramm zusenden. Pro gebrannter
HEX-File-Zeile sendet der PIC einen '.' als Quittung (und
Fortschrittsindikator) zurück. Abschließend quittiert der
Bootloader das Brennen mit 'F' (Fehler) bzw. 'S' (Erfolg).
Im Erfolgsfall wird das gebrannte Programm gestartet.
Schaltet man den PIC ohne gedrückten Taster ein, startet der
Bootloader gleich das im PIC enthaltene Nutzprogramm.
Das Nutzprogramm muss folgende Bedingungen erfüllen, um mit dem
Bootloader zu kooperieren:
Im Lieferzustand ist die GUI nur für dsPIC30F4011 und dsPIC30F3011 ausgelegt. Der Anwender kann sie aber leicht auf andere Typen erweitern, wenn er die nötigen Infos über die Typen in ein XML-Konfigurationsfile einträgt.