|
UNABHÄNGIGKEITSERKLÄRUNG EINES MIKROCONTROLLERS
Single Chip Self Programming via Bootstrap Loader
Mikrocontroller
Bootstraploader
Christian Perschl
Christian Perschl
1. Independence
Single Chip Mikrocomputer - dieser Begriff definiert Stellung und Funktion von Mikrocontrollern in der Elektronik. Aber sind sie wirklich so single ? Meistens heftet sich an den vielbeinigen Herrn noch eine lästige Dame (mit bis zu 44 Verbindungen), welche ihrem Gemahl sagt, was er zu tun hat: das EPROM. Diese ist auch noch so stur, erst nach einem Weilchen im UV-Solarium ihr Gedächtnis zu verlieren, was einen entsprechenden Zeit- und Materialaufwand mit sich bringt.
Es stellt sich nun die Frage, wie der Herr Mikrocontroller seine persönliche Freiheit erringen kann. Nun, einerseits läßt sich die Befreiung durch chipinternes maskenprogrammierbares ROM bewerkstelligen. Dabei muß allerdings auf den Chiphersteller zurückgegriffen werden, welcher die ROM-Maske für die Chip-Produktion entsprechend dem Anwendungsprogramm fertigt. Nur leider rentiert sich dies nur für größere Stückzahlen (5000). Daher kommt dieses Verfahren für Schaltungen im Entwicklungsstadium oder bei kleineren Stückzahlen nicht in Frage.
Daher wird der Herr µC seine E(E)PROM-Dame wohl nicht missen können, oder ?
Doch. Mikrocontroller der neueren Generation haben eine Möglichkeit, ohne externen Speicher auszukommen. Die Frage ist nur, woher bekommt der µC seinen Code?
2. Der Bootstrap Loader
Ganz einfach: Über die serielle Schnittstelle. Nach Reset wird beim Mikrocontroller im Boot Mode ein Boot-ROM aktiviert, das entsprechende Programm per serieller Schnittstelle empfangen und in das interne RAM kopiert. Anschließend wird das geladene Programm automatisch gestartet. Für viele Applikationen ist jedoch das interne RAM zu klein, ein externer Speicherbaustein muß herhalten.
Neben der Tatsache, daß jetzt erst recht wieder externe Bausteine benötigt werden, ist RAM bekanntlich flüchtig: Bei Spannungsausfall muß ein neuer Download erfolgen.
3. On-Chip Flash
Die Ideallösung ist ein programmierbarer, löschbarer, nicht-flüchtiger Speicher, welcher sich auf dem Mikrocontroller befindet: OnChip Flash-EEPROM. Es bleiben jedoch noch einige Fragen offen: Woher bekommt das Flash seinen Inhalt ? Wie wird das Flash programmiert ?
Soll der MC jedesmal aus dem Sockel genommen und in ein Programmiergerät gesteckt werden ? Klingt umständlich, überhaupt wenn der Chip eingelötet ist. Außerdem müsste man sich dann das Programmiergerät vom Kollegen ausborgen, denn dieses ist ja sicher teuer und daher selten.
Daher muß Onchip-Flash EEPROM durch den Mikrocontroller selbst programmierbar sein, sonst ist der Aufwand erst recht wieder hoch. Nur: die Software zum Programmieren des internen Flash EEPROMs muß ja ebenfalls dem MC gegeben werden. Gott sei Dank gibt es den Bootstrap Loader, der wird das erledigen.
Fassen wir also zusammen: Mittels Bootstrap Loader wird der EEPROM-Programmieralgorithmus in das interne RAM geladen. Dieser lädt dann die eigentliche Applikation und programmiert diese in das Flash EEPROM. Ein abschließender Software-Reset startet die gerade programmierte Anwendung. Sie bleibt hartnäckig solange im Chip, bis ein neues Programm fällig wird.
Damit reduziert sich der Hardwareaufwand einer Mikrocontroller-Applikation auf Stromversorgung, eventuell einen Quarz (es gibt auch Mikrocontroller mit interner PLL-Nottaktversorgung) und ein heißer Draht zum PC.
Und somit hat der (Mikrocontroller-) Mann seine Unabhängigkeit erreicht.
4. Hardware
Jetzt fehlt nur noch ein passender Mikrocontroller, der alle notwendigen Eigenschaften besitzt.
Der Mikrocontroller C167CR-16F erfüllt diese Kriterien. Er hat wie fast alle Mikrocontroller der 80C166 Familie einen Bootstrap Loader. Die vorhandenen 128kB OnChip-Flash-EEPROM und 4 KB int. RAM sind auch für größere Applikationen nicht zu knapp bemessen.
Ein paar klitzekleine Nachteilchen darf man allerdings nicht verheimlichen. Das interne Flash EEPROM des C167CR-16FM benötigt wie der Großteil der EEPROM-Bausteine 12V Programmierspannung. Da aber Sensor/Aktor-Elemente ohnehin oft 12 V Spannung benötigen, ist dies zumeist wohl kein Problem.
|
|
Siemens-1
|
|
Siemens-2
|
|
Jedenfalls hat die nächste Generation dann nur mehr 5 V Programmierspannung (erstes Derivat C163-16F ist bereits verfügbar).
Ja, und dann muß noch erwähnt werden, das man das Flash nicht vom Flash aus programmieren kann, aber das ist wohl einleuchtend.
Hinweis:
Der nächste Chip dieser Mikrocontroller-Familie, der C167CS-32FM besitzt 256 kByte Flash für Programm, 4 kByte XFlash für Daten, 3 kByte dual ported IRAM und 8 kByte XRAM.
Programmierspannung Flash: 5 Volt.
5. Details: Bootstrap-Loader
Der Bootstrap-Loader ist ein Betriebsmodus des Mikrocontrollers, in welchem über die serielle Schnittstelle ein auszuführendes Programm empfangen und in den Speicher geschrieben wird. Der Download der eigentlichen Applikation und/oder des Flash-EEPROM Programmieralgorithmus erfolgt in mehreren Schritten:
Aktivierung des Bootstrap-Loaders
Der Bootstrap-Loader (BSL) Modus wird aktiviert, in dem ein bestimmter Pin (beim C167CR ist es P0L.4) während des Hardware-Resets auf Low liegt.
Berechnung der Baudrate
Da während Reset alle Register zurückgesetzt werden, sind auch die Einstellungen der seriellen Schnittstelle nicht entsprechend. Damit der MC selbsttätig diese Einstellungen vornehmen kann, wird vom Host (PC) zuerst ein Byte mit dem Wert 0 gesendet. Der MC berechnet aus dem Abstand zwischen Start- und Stopbit die Baudrate und setzt die für die Datenübertragung relevanten Special Function Register (SFRs).
Als Acknowledge sendet der MC ein Byte zum Host, welches von Typ zu Typ variiert. So kann auch der Typ und die Chiprevision (Step) des MC festgestellt werden:
Chip |
ID-Byte |
C165 |
B5h |
80C166 |
55h |
C167 Step AD |
A5h |
C167 Step BA |
C5h |
C167CR |
C5h |
Der Preloader (Programm: PRELOAD.ASM)
Nun wartet der MC auf den Empfang von genau 32 Bytes, welche den ersten auszuführenden Programmcode darstellen. Dieser wird in einen bestimmten Bereich des internen RAMs geladen und nach dem Empfang automatisch gestartet.
Zumeist hat dieses (sehr kurze) Programm die Aufgabe, die eigentliche Applikation oder einen weiteren, intelligenten Loader zu empfangen. Theoretisch können die 32 Bytes auch die Applikation sein, sehr viel wird diese dann aber nicht tun, ein weiterer Loader ist damit fast unumgänglich.
Der Loader (Programm: LOAD.ASM)
Nachdem der Preloader gestartet wurde, wird mit diesem der eigentliche Loader
( z.B. ein Intel-Hex Loader) empfangen und an eine beliebige Stelle im Speicher geschrieben - am besten wiederum im internen RAM. Dieser liest dann den Programmcode der Applikation ein, entweder blockweise oder als Intel Hex.
|
|
MC-Technik
|
|
Falls der Loader im internen RAM keinen Platz findet, muß er im externen RAM untergebracht werden. Dabei ist darauf zu achten, daß die Applikation nicht jene Speicherbereiche belegt, die der Loader belegt, da sich dieser sonst selbst überschreibt.
Wesentlich ist, daß der externe Speicher während des BSL-Modus deaktiviert ist. Zum Aktivieren des externen Speichers muß per Software ein Register konfiguriert werden und ein Intersegment-Sprung zum nächsten Befehl durchgeführt werden.
Nachdem die Applikation in den Speicher geschrieben wurde, erfolgt ein Software-Reset, und die Applikation startet.
Verfügbare Software
Es gibt eine ganze Reihe von sogenannten HEX-LOADERN, welche (mehr oder weniger) unabhängig vom verwendeten Entwicklungsboard bzw. der Hardware sind. Allerdings belegen die meisten aufgrund ihres großen Funktionsumfangs (Inline-Assembler, Monitor) einen Teil des externen Speichers, wodurch der belegbare Speicherbereich der Applikation eingeschränkt ist.
Es macht daher sehr wohl Sinn, hier einen eigenen Loader zu schreiben, welcher schlank genug ist, um in den internen Speicher zu passen.
Ein sehr einfacher und kompakter Loader plus DOS-Hexloader (Programm: HEXLOAD.C) liegt dem Artikel bei.
6. Details: On-Chip-Flash
Der interne Flash-Speicher des C167CR-16F kann vollständig per Software programmiert und gelöscht werden. Lediglich der Anschluß von 12 V Programmierspannung an den VPP-Pin ist erforderlich.
Speicherbelegung
Das OnChip Flash-EEPROM ist in 4 Bänke mit verschiedenen Größen unterteilt: Bank 0 und 1 mit jeweils 48 KB, Bank 2 mit 24 KB und Bank 3 mit 8 KB. Jede Bank kann separat gelöscht werden. Das Mapping der einzelnen Flash-EEPROM-Bänke sieht folgendermaßen aus:
Die untersten 32 KB können durch Setzen bzw. Löschen eines SFR-Bits entweder in den Bereich 00000-07FFF oder 10000-17FFF gemapped werden.
Wesentlich ist, daß das Flash vom internen RAM aus programmiert werden kann, d.h. der Programmieralgorithmus wird via Bootstrap-Loader ins interne RAM geladen, anschließend ausgeführt und dadurch das Flash programmiert. Danach wird per Software-Reset die Applikation gestartet.
On-Chip-FLASH-Programmierung
Die Software zur Flash-Programmierung aller On-Chip-Flash-Mikrocontroller findet man im Internet (Anmerkung: der Mikrocontroller programmiert sich selbst!):
Über eine Shell auf MS-DOS - Basis können folgende Befehle eingegeben werden:
CONNECT: Stellt die Verbindung zwischen PC und MC her.
ERASE0-3: Löscht die entsprechende Flash-EEPROM-Bank.
ERASEALL: Löscht alle EEPROM-Bänke.
|
|
Fh für Automatisierungstechnik Graz
|
|
PROGRAM: Verlangt die Eingabe einer Intel-Hex-Datei (20-Bit Version) und programmiert diese in den Flash-Speicher
STATUS: Zeigt den aktuellen Status des Flash-Registers an, u.a., ob auch die Programmierspannung angelegt wurde
QUIT: Beendet das Programm
Alle MC-Programme zum Laden, Löschen und Programmieren liegen als Source-Code bei und können jederzeit angepaßt und/oder erweitert werden (z.B. um nach dem Programmieren den Leseschutz zu aktivieren).
7. Aussichten
Mit Hilfe der Kombination Bootstrap-Loader, MC-internes Flash EEPROM und genügend großem internen RAM ist das Ziel des integrierten Computers in einem Baustein endgültig erreicht. Der Einchip-Computer ist damit sowohl für Serienproduktion alsauch für Einzelentwicklungen und Hobbybastler Realität geworden.
Die Vorteile des Einchip-Computers gegenüber dem µC mit externem Speicher kurz zusammengefaßt:
l Geringerer Platzbedarf
l Keine externen Speicherbausteine
l Mehr I/O Pins zur Verfügung (24 Adreßbuspins und 16 Datenbuspins werden frei)
l Schnellere Ausführungszeit
l Weniger fehleranfällig
l EMV-günstiger
l Damit hat in Zukunft eine µC-Platine annähernd die Größe des Mikrocontrollers, denn externe Beschaltung ist kaum mehr erforderlich. Vielleicht gibt es zur Jahrtausendwende gar keine Platinen mehr ;-)
8. Software zum Artikel
SELF_PRO.EXE ist selbstextrahierend und erzeugt folgende Verzeichnisse mit folgendem Inhalt:
Verzeichnis: Inhalt:
DOKU: SELF_PRO.DOC: dieses Dokument; INTELHEX.DOC: Beschreibung Intel Hex-Format und alle Schaubilder als .bmp, .ppt oder .wmf Datei
HEXLOAD: HEXLOAD.C / HEXLOAD.EXE: PC-Programm, welches jedes Intelhex-Format einliest und den Inhalt im folgenden Format: 4 Adreßbytes (A0-A7, A8-A15, A16-A23, A24-A31) und 1 Datenbyte (D0-D7) über die gewünschte serielle Schnittstelle versendet. PRELOAD.ASM / PRELOAD.H86: hexload.exe sendet das 32 Byte große Programm preload.h86 zum Mikrocontroller (im Bootstrap Loader Mode). LOAD.ASM / LOAD.H86: hexload.exe sendet das Programm load.h86 zum Mikrocontroller der das Programm preload.h86 ausführt und load.h86 einliest. Hinweis: danach führt der Mikrocontroller das empfangene Programm load.h86 aus und lädt damit die Applikation, welche hexload.exe zusendet. MAKEFILE: makefile zur Generierung der Dateien preload.h86 und load.h86 von den Quelldateien preload.asm und load.asm
FLASH167.16F: Vom Internet geladene Software zur Programmierung des 128 Kbyte großen On-Chip-Flash im Mikrocontroller C167CR-16F inklusive Dokumentation: AP160860.PDF und AP160960.EXE (selbstextrahierend)
|
|
Nowatron
|
|
PESACO-1
|
|
PESACO-2
|