Bootloader - ein PIC programmiert sich selbst

- das Brennen des PIC in der fertigen Schaltung via RS232

zurück zu PIC-Prozessoren , Elektronik , Homepage

Diese Seite beschreibt RS232-Bootloader. Wer sich für USB-Bootloader interessiert, der schaut bitte hier nach.



Bootloader - Allgemeines
Grundlagen
Limits
RS232-Bootloader von Microchip
RS232-dsPIC-Bootloader von Ingenia

USB-Bootloader

zurück


Bootloader - Allgemeines

Wenn man in die Tabelle der Flash-PIC-Typen schaut, findet man dort eine Reihe von PICs, die in der Lage sind, in den eigenen Flash-Programm-Speicher zu schreiben. Damit besteht die Möglichkeit, dem PIC ein neues Programm über eine einfache Schnittstelle (wie z.B. RS232) zuzuspielen, das der PIC dann selber in den Flash brennt und anschließend startet. Dafür muss im PIC natürlich schon vorher eine Software stehen, die den neuen Code über die Schnittstelle entgegennimmt, und in den Flash brennt.

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.

nach oben

Grundlagen

Der Bootloader muss sich mit dem in den PIC zu brennenden Anwendungsprogramm gut vertragen. Darum sollte der Bootloader in einem Flash-Speicherbereich stehen, der vom Anwendungsprogramm nicht benötigt wird. Das ist in der Regel das Ende des Flash-Speichers.

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.

nach oben


Limits

Der Bootloader kann zwar in den Flash-Programmspeicher und den EEPROM-Datenspeicher schreiben, er hat aber keinen Zugriff auf das Konfigurationswort und die ID-Speicherzellen. Während man auf das Eintragen einer ID gut und gern verzichten kann, ist die Unfähigkeit, die Konfiguration zu ändern, wesentlich ärgerlicher.

Folgende Einstellungen werden beim Brennen des Bootloaders festgelegt, und können durch den Bootloader selbst nicht mehr geändert werden:

Damit der Bootloader arbeiten kann, muss am PIC ein Takt anliegen, bzw. der Oszillator des PIC arbeiten (bei ICSP ist das nicht nötig). Aus diesem Takt leitet die RS232-Hardware des PIC ihre Baudrate ab. Folglich muss dieser Takt stabil und genau genug für eine asynchrone Übertragung sein. Die Abweichung der Baudrate von mehr als 5% von der Baudrate des angeschlossenen PC führt zu Fehlern. Ein RC oder ER-Oszillator ist also nicht verwendbar.

Writeprotection und Codeprotection darf höchstens für den Speicherbereich aktiviert sein, in dem der Bootloader steht. Der Nutzprogrammspeicher muss frei zugänglich sein.
 

nach oben

Bootloader von Microchip

Wer nun seinen eigenen Bootloader programmieren will, kann das gern tun, aber es gibt schon eine ganze Reihe fertiger Bootloader im Internet. Einer stammt von Microchip selbst, und ist in der application note AN732 auf der Microchip-Homepage veröffentlicht.

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:

nach oben

dsPIC-Bootloader von Ingenia

Die Firma Ingenia hat einen Bootloader für dsPICs entwickelt, und als Open-Source freigegeben.  Der Bootloader besteht aus der eigentlichen Firmware für den PIC und einem Windowsprogramm (GUI) zur einfachen Bedienung. Beide Files sind von der Ingenia-Seite herunterzuladen.

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.

nach oben

zurück zu PIC-Prozessoren , Elektronik , Homepage
Autor: sprut
erstellt: 12.05 2004
letzte Änderung: 19.02 2006