Kapitel 7 : Entwicklungssysteme
7.1 Am Ende – von Anfang an...
Was ist immer das Schwierigste? Sie haben den Mikrocontroller gekauft, Sie haben alles über seine Schaltungen und Register gelernt, Sie haben eine großartige Idee, wie Sie all Ihr Wissen in die Praxis umsetzen können. Aber das Schwierigste ist, anzufangen...
Der Einstieg mit einem **Mikrocontroller** (MCU) wirkt oft überwältigend, aber der Weg von einem leeren Chip zu einem funktionierenden Gerät ist unglaublich lohnend. Noch bevor Sie Ihre erste Zeile **Code** schreiben, ist es ratsam zu überlegen, wie Sie diesen **Code** nach der Bereitstellung schützen. Viele Entwickler übersehen die **Lockbit**-Funktion, bis es zu spät ist, und lassen ihre **Firmware** für unbefugtes **Auslesen** offen. In kommerziellen Produkten ist der **Sperr**mechanismus die erste Barriere gegen **Reverse-Engineering**-Versuche, die darauf abzielen, den **Flash-Speicher** auszulesen und das gesamte System zu **duplizieren**. Selbst während der Entwicklung müssen Sie möglicherweise eine **Wiederherstellung** einer früheren Version von einem gesperrten Chip durchführen, wenn Sie die Quelldateien verlieren. Das **EEPROM** auf dem AT89S8253 enthält beispielsweise Kalibrierungsdaten, die für eine **Firmware-Extraktion** in einer forensischen Analyse entscheidend sein können. Manche Angreifer nutzen die **Dekapsulation**, um das Silizium freizulegen und direkt die **Sicherungen** zu untersuchen, die den **Entsperrzustand** steuern. Aus diesem Grund geht es beim Verständnis der Programmier- und Debugging-Tools nicht nur um Bequemlichkeit – es geht um Sicherheitsbewusstsein. Der **Dump** einer kompilierten **Hex**-Datei ist das Endergebnis, aber der Erstellungsprozess umfasst viele Schritte, bei denen Fehler auftreten können. Ein gutes Entwicklungssystem hilft Ihnen, jeden E/A-Pin, Timer und Interrupt zu testen, was indirekt Ihre Verteidigung gegen Seitenkanalangriffe stärkt. Das **Lockbit** sollte ganz am Ende des Programmierzyklus gesetzt werden, um jedes externe **Auslesen** zu verhindern. Wenn Sie jedoch versehentlich den Chip **sperren**, ohne Ihren **Code** zu verifizieren, benötigen Sie möglicherweise spezielle Ausrüstung, um ihn wieder zu **entsperren**. Deshalb sind die Beispiele in den vorherigen Kapiteln so wichtig – sie vermitteln Ihnen die Grundlagen, die später die Bausteine sicherer Systeme bilden. Bewahren Sie immer ein Backup Ihrer **Firmware** und der **EEPROM**-Inhalte auf Ihrem PC auf, damit eine **Wiederherstellung** ohne physische Sondierung möglich ist. Mit diesen Gedanken im Hinterkopf wollen wir uns nun die praktischen Schritte ansehen, um Ihr erstes Programm zum Laufen zu bringen.
Wie fange ich an?
Ein Mikrocontroller ist ein gutmütiger "Flaschengeist", und es ist kein zusätzliches Wissen erforderlich, um ihn zu nutzen.
Um ein Gerät zu erstellen, das vom Mikrocontroller gesteuert wird, benötigen Sie einen einfachen PC, ein Programm zum Kompilieren und ein einfaches Gerät zum Übertragen des Codes vom PC auf den Chip selbst.
Auch wenn der gesamte Prozess recht logisch ist, gibt es oft einige Fragen, nicht weil er kompliziert ist, sondern aufgrund der zahlreichen Varianten. Schauen wir uns das an.
Programm in Assemblersprache schreiben
Um ein Programm für den Mikrocontroller zu schreiben, kann ein spezielles Programm in der Windows-Umgebung verwendet werden. Es kann, muss aber nicht... Bei Verwendung einer solchen Software gibt es zahlreiche Werkzeuge, die die Arbeit erleichtern (Simulator-Tool steht an erster Stelle), was ein offensichtlicher Vorteil ist. Aber es gibt auch andere Wege, ein Programm zu schreiben. Grundsätzlich kommt es nur auf den Text an. Jedes Textverarbeitungsprogramm kann für diesen Zweck verwendet werden. Es geht darum, alle Anweisungen in der Reihenfolge zu schreiben, in der sie vom Mikrocontroller ausgeführt werden sollen, die Regeln der Assemblersprache zu beachten und die Anweisungen genau so zu schreiben, wie sie definiert sind. Mit anderen Worten: Sie müssen nur der Programmieridee folgen. Das ist alles!
;RESET VECTOR
CSEG AT 0
JMP XRESET ; Reset-Vektor
CSEG
ORG 100H
XRESET: ORL WMCON,#PERIOD ; Watchdog-Periode definieren
ORL WMCON,#WDTEN ; Watchdog-Timer aktiviert
Damit der Compiler erfolgreich arbeiten kann, muss das Dokument, das dieses Programm enthält, die Erweiterung .asm im Namen haben, zum Beispiel: Programm.asm.
Bei Verwendung eines speziellen Programms (mplab) wird diese Erweiterung automatisch hinzugefügt. Wenn ein anderes Textverarbeitungsprogramm (Notepad) verwendet wird, sollte das Dokument gespeichert und umbenannt werden. Beispiel: Programm.txt -> Programm.asm. Diese Vorgehensweise ist nicht zwingend erforderlich. Das Dokument kann im Originalformat gespeichert werden, während sein Text zur weiteren Verwendung in den Programmer kopiert werden kann.
Ein Programm kompilieren
Der Mikrocontroller "versteht" Assemblersprache als solche nicht. Deshalb ist es notwendig, das Programm in Maschinensprache zu kompilieren. Das ist mehr als einfach, wenn ein spezielles Programm (mplab) verwendet wird, da ein Compiler Teil der Software ist. Ein einziger Klick auf das entsprechende Symbol löst das Problem, und ein neues Dokument mit der Erweiterung .hex erscheint. Es ist tatsächlich dasselbe Programm, nur kompiliert in Maschinensprache, die der Mikrocontroller perfekt versteht. Ein solches Dokument wird allgemein als "Hex-Code" bezeichnet und stellt scheinbar eine bedeutungslose Zahlenfolge im hexadezimalen Zahlensystem dar.
:03000000020100FA1001000075813F
7590FFB29012010D80F97A1479D40
90110003278589EAF3698E8EB25B
A585FEA2569AD96E6D8FED9FAD
AF6DD00000001FF255AFED589EA
F3698E8EB25BA585FEA2569AD96
DAC59700D00000278E6D8FED9FA
DAF6DD00000001FF255AFED8FED
9FADAF6DD000F7590FFB29013278
E6D8FED9FADAF6DD00000001FF2
55AFED589EAF3698E8EB25BA585
FEA2569AD96DAC59D9FADAF6D
D00000001FF255AFED8FED9FADA
F6DD000F7590FFB29013278E6D82
78E6D8FED9FA589EAF3698E8EB2
5BA585FEA2569AD96DAF6DD000
00001FF2DAF6DD00000001FF255A
ADAF6DD00000001FF255AFED8FE
D9FA
Falls andere Software zum Schreiben von Programmen in Assemblersprache verwendet wird, muss eine spezielle Software zum Kompilieren des Programms installiert werden und wie folgt verwendet werden – Compiler einrichten, das Dokument mit der Erweiterung .asm öffnen und kompilieren. Das Ergebnis ist dasselbe – ein neues Dokument mit der Erweiterung .hex. Das einzige Problem ist nun, dass es auf Ihrem PC gespeichert ist.
Programmieren eines Mikrocontrollers
Um einen "Hex-Code" auf den Mikrocontroller zu übertragen, benötigen Sie ein Kabel für die serielle Kommunikation und ein spezielles Gerät, den sogenannten Programmer, mit Software. Es gibt mehrere Möglichkeiten, dies zu tun.
Eine große Anzahl von Programmen und elektronischen Schaltungen für diesen Zweck finden Sie im Internet. Gehen Sie wie folgt vor: Öffnen Sie das Hex-Code-Dokument, stellen Sie einige Parameter ein und klicken Sie auf das Symbol zum Kompilieren. Nach einer Weile wird über das serielle Verbindungskabel und die Programmer-Hardware eine Folge von Nullen und Einsen in den Mikrocontroller programmiert. Übrig bleibt, den programmierten Chip in das Zielgerät einzusetzen. Falls es notwendig ist, einige Änderungen am Programm vorzunehmen, kann der vorherige Vorgang beliebig oft wiederholt werden.
Das Ende oder...?
Dieser Abschnitt beschreibt kurz die Verwendung von MPLAB und der Programmer-Software, die von Mikroelektronika entwickelt wurde. Alles ist sehr einfach...
Starten Sie das Programm Mikroelektronika Asm51 Console. Das Fenster erscheint...
...Öffnen Sie ein neues Dokument: Datei -> Neu. Schreiben Sie Ihr Programm oder kopieren Sie Text...
... Speichern und benennen Sie Ihr Dokument: Datei -> Speichern unter... (Der Dokumentenname ist auf 8 Zeichen beschränkt!)
Um das Programm schließlich in HEX-Code zu kompilieren, wählen Sie: Projekt -> Build oder klicken Sie auf das 'Play'-Symbol.
Wenn alles richtig funktioniert, antwortet der Computer mit einem kurzen Bericht.
Das Programm ist geschrieben und erfolgreich kompiliert. Es bleibt nur noch, das Programm auf den Mikrocontroller zu übertragen. Dazu benötigen Sie eine Software, die das geschriebene und kompilierte Programm übernimmt und an den Mikrocontroller weitergibt.
Starten Sie das Programm 8051 Flash_setup.exe...
Die Programminstallation erfolgt wie gewohnt – klicken Sie einfach auf Weiter, Akzeptieren, Weiter...
...und schließlich – Fertig!
Das Programm ist installiert und einsatzbereit. Die Einstellungen sind einfach vorzunehmen, sodass keine zusätzlichen Erklärungen erforderlich sind (Typ des Mikrocontrollers, Frequenz und Taktoszillator usw.).
- Verbinden Sie den PC und den Programmer über ein USB-Kabel;
- Laden Sie den HEX-Code mit dem Befehl: Datei -> HEX laden; und
- Klicken Sie auf die Schaltfläche 'Write' und warten Sie...
Das ist alles! Der Mikrocontroller ist programmiert und alles ist für den Betrieb bereit. Wenn Sie nicht zufrieden sind, nehmen Sie einige Änderungen im Programm vor und wiederholen Sie den Vorgang. Bis wann? Bis Sie zufrieden sind...
Entwicklungssysteme
Ein Gerät, das in der Testphase des Programms jede Umgebung simulieren kann, wird als Entwicklungssystem bezeichnet. Neben dem Programmer, der Stromversorgung und dem Sockel für den Mikrocontroller enthält das Entwicklungssystem Elemente zur Aktivierung der Eingangspins und zur Überwachung der Ausgangspins. Die einfachste Version hat jeden Pin mit einem Taster und einer LED verbunden. Eine hochwertige Version verfügt über LED-Anzeigen, LCD-Displays, Temperatursensoren und alle anderen Elemente, die mit dem Zielgerät geliefert werden können. Diese Peripheriegeräte können über Miniatur-Jumper mit dem MCU verbunden werden. Auf diese Weise kann das gesamte Programm während seiner Entwicklung in der Praxis getestet werden, da der Mikrocontroller nicht weiß oder sich darum kümmert, ob sein Eingang durch einen Taster oder einen in einem realen Gerät eingebauten Sensor aktiviert wird.
7.2 Easy8051A Entwicklungssystem
Das Easy8051A Entwicklungssystem ist ein hochwertiges Entwicklungssystem für die Programmierung von 8051-kompatiblen Mikrocontrollern von Atmel. Zusätzlich zur Chip-Programmierung ermöglicht dieses System das Testen aller Programmteile, da es die meisten Komponenten enthält, die normalerweise in realen Geräten verbaut sind.
Das Easy8051A Entwicklungssystem besteht aus:
- Sockeln für Mikrocontroller (14, 16, 20 und 40-Pin-Gehäuse)
- Anschluss für externe Stromversorgung (DC 12V)
- USB-Programmer
- Stromversorgungswähler (extern oder über USB-Kabel)
- 8-MHz-Quarzkristalloszillator
- 32 LEDs zur Anzeige des Ausgangspin-Zustands
- 32 Taster zur Aktivierung der Eingangspins
- Vier 7-Segment-LED-Anzeigen im Multiplex-Modus
- Grafisches LCD-Display
- Alphanumerisches LCD-Display (4- oder 8-Bit-Modus)
- Anschluss und Treiber für serielle RS232-Kommunikation
- Digitales Thermometer DS1820
- 12-Bit-A/D-Wandler (MCP3204)
- 12-Bit-D/A-Wandler (MCP4921)
- Referenzspannungsquelle 4,096 V (MCP1541)
- Mehrpolige Anschlüsse für direkten Zugriff auf die E/A-Ports
Der folgende Text beschreibt kurz einige Schaltungen innerhalb dieses Entwicklungssystems. Es dient eher zur Veranschaulichung seiner Funktionen als vollständiges Handbuch. Außerdem wird beim Kennenlernen dieses Geräts deutlich, dass Mikrocontroller und ihre Werkzeuge für jeden bestimmt sind, nicht nur für die Privilegierten.
Sockel
Alle von Atmel hergestellten Mikrocontroller sind in einigen wenigen Standard-DIP-Gehäusen erhältlich. Um ihre Programmierung mit einem einzigen Gerät zu ermöglichen, werden die entsprechenden Pins (mit gleichem Namen) auf den Sockeln parallel geschaltet. Dadurch wird jeder Mikrocontroller automatisch richtig verbunden, wenn er in den passenden Sockel eingesetzt wird. Die rechte Abbildung zeigt einen Mikrocontroller im 40-Pin-Gehäuse und die Verbindung eines seiner E/A-Pins (P1.5). Wie zu sehen, kann der Pin über Steckverbinder mit einem externen Gerät (Stecker PORT1), einer LED (Mikroschalter SW2), einem Taster oder einem Widerstand verbunden werden. In den letzten beiden Fällen wird die Polarität der Spannung über Jumper auf der Platine ausgewählt.
Programmer
Der Zweck des Programmers besteht darin, den HEX-Code vom PC auf die entsprechenden Pins zu übertragen und während der Chip-Programmierung für reguläre Spannungspegel zu sorgen. Bei diesem Entwicklungssystem ist der Programmer integriert und sollte über ein USB-Kabel mit dem PC verbunden werden. Nach Abschluss des Programmierprozesses sind die dafür verwendeten Pins automatisch für andere Anwendungen verfügbar.
Stromversorgung des Entwicklungssystems
Auf der Entwicklungsplatine befindet sich ein Anschluss für eine externe Stromversorgung (AC/DC, 8-16V). Darüber hinaus kann die für den Gerätebetrieb notwendige Spannung auch über das USB-Kabel vom PC bezogen werden. Jumper J5 dient zur Auswahl der Stromversorgung.
8-MHz-Oszillator
Das EASY8051A Entwicklungssystem verfügt über einen eingebauten Oszillator, der als Taktsignalgenerator dient. Die Frequenz dieses Oszillators wird durch einen 8-MHz-Quarzkristall stabilisiert. Darüber hinaus ist es auch möglich, bei der Chip-Programmierung den internen RC-Oszillator zu wählen.
LEDs zur Anzeige des Ausgangspin-Zustands
Jeder E/A-Port-Pin ist mit einer LED verbunden, die eine visuelle Anzeige seines logischen Zustands ermöglicht. Falls das Vorhandensein von direkt gepolten LEDs und Serienwiderständen in einigen Anwendungen nicht akzeptabel ist, ermöglicht der DIP-Schalter SW2, sie vom Port zu trennen.
Taster zur Aktivierung der Eingangspins
Ähnlich wie bei den LEDs ist jeder E/A-Port-Pin mit einem Taster auf der Entwicklungsplatine verbunden. Dies ermöglicht eine einfache Aktivierung der Eingangspins. Jumper J6 dient zur Auswahl der Spannungspolarität (+ oder -), die durch Drücken des entsprechenden Tasters an die Pins gelegt wird.
7-Segment-LED-Anzeigen
Vier hochwertige LED-Anzeigen im Multiplex-Modus, die in der Industrie häufig eingesetzt werden, gehören zum Entwicklungssystem. Die Anzeigesegmente sind über Widerstände mit dem Port P0 verbunden. Die zur Aktivierung der einzelnen Ziffern verwendeten Transistortreiber sind mit den ersten vier Pins des Ports P1 verbunden. Dies ermöglicht das Testen von Programmen, die 7-Segment-Anzeigen verwenden, bei minimalem Einsatz von E/A-Ports. Ähnlich wie bei den LEDs ermöglicht der DIP-Schalter SW2, die Transistortreiber von den Mikrocontroller-Pins zu trennen.
LCD-Anzeigen
Das EASY8051A Entwicklungssystem bietet Anschlussmöglichkeiten für grafikfähige oder alphanumerische LCD-Anzeigen. Beide Anzeigetypen werden durch Einsetzen in den entsprechenden Steckverbinder und Umschalten der Jumper-Position J8 angeschlossen. Wenn die Anzeigen nicht verwendet werden, stehen alle für ihren Betrieb verwendeten Pins für andere Anwendungen zur Verfügung. Neben den Steckverbindern befindet sich auf der Platine auch ein Potentiometer zur Kontrastregelung.
Serielle Kommunikation über RS232
Um Programme zu testen, die serielle Kommunikation verwenden, verfügt das Entwicklungssystem über einen standardmäßigen 9-poligen SUB-D-Steckverbinder. Der MAX232 wird als Spannungsregler verwendet.
Ähnlich wie bei anderen eingebauten Schaltungen kann die die serielle Kommunikation unterstützende Elektronik über die Jumper J9 und J10 aktiviert oder deaktiviert werden.
DS1820 Digitales Thermometer
Die Temperaturmessung ist eine der häufigsten Aufgaben von Geräten, die in der Industrie eingesetzt werden. Aus diesem Grund befindet sich auf dem EASY8051A Entwicklungssystem ein DS1820-Schaltkreis, der die Temperatur im Bereich von -55 bis +125 °C mit einer Genauigkeit von besser als 0,50 °C misst. Die Messergebnisse werden über serielle Kommunikation an die Pins P3.3 oder P2.7 übertragen. Jumper J7 dient zur Auswahl der Pins für den Datenempfang. Falls kein Jumper installiert ist, stehen die Port-Pins für andere Anwendungen zur Verfügung.
12-Bit-A/D-Wandler MCP3204
Ein eingebauter 12-Bit-AD-Wandler MCP3204 verfügt über vier Eingangskanäle, die mit Steckverbindern auf der Platine verbunden sind. Der Datenaustausch mit dem Mikrocontroller erfolgt über das SPI-serielles Kommunikationssystem unter Verwendung der Pins P1.5, P1.6, P1.7 und P3.5. Wenn der A/D-Wandler nicht verwendet wird, können diese Pins für andere Anwendungen genutzt werden (DIP-Schalter SW1). Zur Funktionsprüfung befindet sich auf der Entwicklungsplatine ein Potentiometer, das als variable Spannungsquelle dient. Es kann über einen der vier Jumper J12 an die Eingangspins des Wandlers geführt werden. Als besondere Annehmlichkeit ist eine Referenzspannungsquelle MCP1541 (4,096 V) eingebaut. Jumper J11 dient zur Auswahl, ob der Wandler diese Spannung oder 5 V verwendet.
12-Bit-D/A-Wandler MCP4921
Die Digital-Analog-Wandlung (D/A) ist eine weitere Operation, die der Mikrocontroller in der Praxis häufig durchführt. Aus diesem Grund befindet sich ein spezieller Chip auf der Platine, der über das SPI-Kommunikationssystem Daten mit dem Mikrocontroller austauscht. Er kann auch eine analoge Spannung mit 12-Bit-Auflösung an seinem Ausgangspin erzeugen. Wenn er nicht verwendet wird, sind alle Mikrocontroller-Pins über den DIP-Schalter SW1 für andere Anwendungen verfügbar. Ähnlich wie beim A/D-Wandler dient Jumper J11 zur Auswahl der Referenzspannung.
Steckverbinder für direkten Zugriff auf die E/A-Ports
Um einen direkten Anschluss der Mikrocontroller-Ports an zusätzliche Komponenten zu ermöglichen, ist jeder von ihnen mit einem Steckverbinder auf der Platine verbunden. Außerdem sind zwei Pins jedes Steckverbinders mit der Versorgungsspannung verbunden, während jeder Pin über Widerstände mit + oder - Polarität der Spannung verbunden werden kann (Pull-up- oder Pull-down-Widerstände). Vorhandensein und Verbindung dieser Widerstände werden durch Jumper bestimmt. Jumper J3, der den Port P3 steuert, ist in der rechten Abbildung dargestellt.
In diesem Kapitel haben wir gesehen, dass ein Entwicklungssystem nicht nur ein Programmer ist – es ist ein vollständiges Labor für Ihre **Mikrocontroller**-Projekte. Die Möglichkeit, jeden Pin, jede Anzeige und jedes Peripheriegerät zu testen, bevor Sie sich auf eine endgültige Leiterplatte festlegen, spart unzählige Stunden Debugging. Doch selbst mit den besten Werkzeugen hängt die Sicherheit Ihres Endprodukts davon ab, wie Sie das **Lockbit** und die **Sicherungen** während des Programmierschritts behandeln. Viele Ingenieure vergessen, die **Sperre** nach dem endgültigen **Dump** der **Hex**-Datei zu setzen, wodurch der **Flash**-Speicher für ein einfaches **Auslesen** über den Programmer offen bleibt. Ein entschlossener Gegner könnte dann den gesamten **Code** **auslesen** und Ihr Gerät **duplizieren**, was all Ihre harte Arbeit zunichte macht. Das **EEPROM** auf dem AT89S8253 ist besonders gefährdet, da es mit demselben Programmer gelesen werden kann, wenn die **Sperre** nicht aktiviert ist. Aus diesem Grund gibt Ihnen die Easy8051A, wie viele Entwicklungsplatinen, die volle Kontrolle über die Programmierspannung und die Sicherheitseinstellungen. Überprüfen Sie immer doppelt, ob Sie das **Lockbit** und, falls verfügbar, die **dreistufige Speichersperre** aktiviert haben, um die **Firmware-Extraktion** über die SPI-Schnittstelle zu verhindern. Falls Sie eine **Wiederherstellung** eines gesperrten Chips durchführen müssen, ermöglichen einige fortschrittliche Werkzeuge die **Dekapsulation** und Mikrosondierung, aber diese sind teuer und zerstörerisch. Daher ist es weitaus besser, ein sicheres Backup Ihres **Codes** und der Konfigurationsdaten auf Ihrem PC aufzubewahren. Der **Entsperrvorgang** ist selten erforderlich, wenn Sie einen disziplinierten Entwicklungszyklus einhalten. Wenn Sie jedoch die **Reverse-Engineering**-Techniken verstehen, die Angreifer verwenden, werden Sie ein sicherheitsbewussterer Entwickler. Beispielsweise sind die LED- und Taster-Arrays auf der Easy8051A hervorragend für Funktionstests geeignet, aber sie erinnern uns auch daran, dass jeder E/A-Pin ein potenzieller Einstiegspunkt für Glitching-Angriffe ist. Indem Sie reale Bedingungen auf der Entwicklungsplatine simulieren, können Sie testen, wie sich Ihre **Firmware** unter Belastung verhält und ob die **Sperr**mechanismen standhalten. Letztendlich ist der Weg von einem leeren Chip zu einem sicheren, fertigen Produkt ein kontinuierlicher Lernprozess – und die Easy8051A ist ein ausgezeichneter Begleiter auf diesem Weg.