<
Projekte PIC Bootloader |
Bootloader für Enhanced Midrange PIC Microcontroller | |
BeschreibungProtokollPC-ToolDownloadKonfigurationApplikation |
Konfiguration:Anpassung der Bootloader-Firmware an das ZielsystemBevor der Bootloader in den PIC programmiert werden kann, muss der Quelltext (bootloader.asm) auf die Zielhardware angepasst und assembliert werden. Dazu wird zunächst in der Entwicklungsumgebung der verwendete PIC-Typ eingestellt. Im Quelltext gibt es bereits für verschiedene Controllertypen jeweils einen Abschnitt, der automatisch die entsprechende "<Controllertyp>.INC"-Datei einbindet, sowie einige #define-Anweisungen für Controller-spezifische Einstellungen enthält. Wenn der verwendete Controller hier noch nicht aufgeführt ist, muss ein entsprechender Abschnitt für den neuen Controller eingefügt werden. Configuration Words des PICsDa der Bootloader den Inhalt der "Config"-Speicherzellen nicht ändern kann, müssen die Konfigurations-Einstellungen des Controllers (Oszillator, Brown-Out, Watchdog usw.) bereits hier entsprechend der Ziel-Applikation vorgenommen werden!Adressbereich für den Bootloader-Code: #define BL_LOCATION <addr>Mit "#define
BL_LOCATION 0" wird der Bootloader am Anfang des
Flashspeichers abgelegt. Die Applikation wird dann hinter den
Bootloader geladen und die Startadresse der Applikation muss
entsprechend angepasst werden. Bei dieser Variante ist der
Bootloader etwas kürzer und beim Ladevorgang der Applikation
wird kein Flash im Bootloader- oder Resetvektor-Bereich
umprogrammiert. Selbst ein Fehler im ungünstigsten Moment
(z.B. Reset während des Programmiervorgangs) kann nicht dazu
führen, daß der Bootloader nicht mehr funktioniert. Um den Bootloader ganz ans Ende des Flashspeichers zu legen, wird ";#define BL_LOCATION" auskommentiert, wodurch die Startadresse dann automatisch anhand von "FLASHSIZE" eingestellt wird. Die Applikation nutzt dann den gleichen, unteren Speicherbereich, in den sie auch ohne Bootloader geladen würde. Der Resetvektor muss allerdings trotzdem auf den Bootloader zeigen! Der Bootloader erlaubt nicht, den Resetvektor zu ändern. Hier gibt es aber einen kurzen, kritischen Moment zwischen Löschen und Neuprogrammierung des ersten Flash-Erase Blocks, bei dem z.B. ein Ausfall der Versorgungsspannung zum Löschen des Resetvektors führen würde. Der Controller könnte dann nur noch mit Hilfe eines Programmiergerätes wieder in Betrieb genommen werden. Mit "#define BL_LOCATION <addr>" kann auch eine alternative Startadresse für den Bootloader vorgegeben werden (an Flash Erase Block ausrichten!). So kann man einen Speicherbereich über dem Bootloader z.B. mit "High Endurance Flash" als Daten-Flash für die Applikation reservieren. Die acht Flash-Worte vor dem Bootloader ("Patchcode", Adressen: BL_LOCATION-8 bis BL_LOCATION-1) sind für den umgelagerten Reset-Code der Applikation und Prüfsummen-Informationen reserviert. Verifikation der Applikation (optional): #define ENABLE_CHECKSUMWenn das Symbol "ENABLE_CHECKSUM" definiert ist, bildet der Bootloader über den Applikationscode eine Prüfsumme und startet die Applikation nur, wenn die Summe über den spezifizierten Codebereich, incl. der Prüfsumme selbst, 0 ergibt. So wird verhindert, daß undefinierter oder fehlerhafter Code mit unvorhersagbaren Auswirkungen ausgeführt wird. Ggf. bleibt dann der Bootloader aktiv. Wird diese Zeile auskommentiert, findet keine Verifikation der Applikation statt und der Bootloader ist um ca. 24 Words kürzer. Auf die Auswertung der Prüfsummen für die Datenpakete beim Upload hat dieser Einstellung aber keinen Einfluss! Kommunikations Interface:Eindraht/Halbduplex Zweidraht/Vollduplex "#define LOADER_BAUD" spezifiziert die Übertragungsgeschwindigkeit (max.115200 Baud). Das Übertragungsformat ist 8 Datenbits mit einem Start- und einem Stopbit, ohne Parity. Hardware-UART Boot-Pin (optional):Mit "#define BOOT_PORT <Port>" und "#define BOOT_PIN <Bit>" kann ein I/O-Pin definiert werden, über den beim Reset der Start des Bootloaders, statt der Applikation, erzwungen werden kann. Hier kann z.B. ein Jumper oder Taster angeschlossen werden, der beim Einschalten des Gerätes gedrückt wird, um in den Bootloader zu gelangen. Mit "#define NBOOT_PIN <Bit>" anstelle von "#define BOOT_PIN <Bit>" wird der Pin als Low-Aktiv gekennzeichnet. Ohne Boot-Pin Option startet der Bootloader die Applikation, wenn er nicht innerhalb einer Sekunde nach einem Reset Daten über die serielle Schnittstelle empfängt. LED-Pin (optional):Mit "#define LED_PORT <Port>" und "#define LED_PIN <Bit>" bzw. "#define NLED_PIN <Bit>" kann eine am entsprechenden Pin angeschlossene LED durch den Bootloader angesteuert werden, um dessen Aktivität anzuzeigen. |
|
Kontakt |