Haben 1998 den ersten 8051-Mikrocontroller reversed – hat das jemand früher gemacht?
Unsere Domäne
break-ic.com wurde im Jahr 2000 registriert – Sie können das selbst nachprüfen.
Unsere Erfahrung
Tausende von Chips und PCBs bearbeitet – alle potenziellen Probleme vorhergesehen.
Unsere Ethik
Ehrlichkeit sichert langfristige Geschäfte – wir hätten 28 Jahre lang nicht betrügen können.
Microchip MCU Reverse Engineering
Microchip Technology ist ein amerikanischer Hersteller von Mikrocontrollern, Speicher- und Analog-Halbleitern. Zu den Produkten gehören Mikrocontroller (PICmicro, dsPIC / PIC24, PIC32), serielle EEPROMs, serielle SRAMs, KEELOQ-Geräte, Hochfrequenz-(RF)-Geräte sowie thermische, Leistungs- und Batteriemanagement-Analogbausteine sowie lineare, Interface- und Mixed-Signal-Bausteine. Zu den Interface-Geräten gehören USB, ZigBee/MiWi, Controller Area Network und Ethernet.
Der Hauptsitz befindet sich in Chandler, Arizona, mit Wafer-Fabriken in Tempe, Arizona und Gresham, Oregon. Der Umsatz für das am 31. März 2013 endende Geschäftsjahr betrug 1.581.623.000 US-Dollar.
PIC ist eine Familie von Mikrocontrollern mit modifizierter Harvard-Architektur, die von Microchip Technology hergestellt wird und vom PIC1650 abstammt, der ursprünglich von der Microelectronics Division von General Instrument entwickelt wurde. Die Bezeichnung PIC stand ursprünglich für "Peripheral Interface Controller".
PICs sind sowohl bei Industrieentwicklern als auch bei Hobbyisten beliebt aufgrund ihrer niedrigen Kosten, weiten Verfügbarkeit, großen Nutzerbasis, umfangreichen Sammlung von Application Notes, Verfügbarkeit von kostengünstigen oder kostenlosen Entwicklungswerkzeugen und der seriellen Programmierbarkeit (und Wiederbeschreibbarkeit mit Flash-Speicher). Sie werden auch häufig in der Ausbildung eingesetzt, da sie oft mit der einfach zu bedienenden 'PIC Logicator'-Software geliefert werden.
Geschichte
Der ursprüngliche PIC wurde entwickelt, um mit der neuen 16-Bit-CPU CP1600 von General Instrument eingesetzt zu werden. Obwohl der CP1600 im Allgemeinen eine gute CPU war, hatte er eine schlechte I/O-Leistung, und der 8-Bit-PIC wurde 1975 entwickelt, um die Gesamtsystemleistung zu verbessern, indem I/O-Aufgaben von der CPU ausgelagert wurden. Der PIC verwendete einfachen Mikrocode, der im ROM gespeichert war, um seine Aufgaben auszuführen, und obwohl der Begriff damals nicht verwendet wurde, teilt er einige gemeinsame Merkmale mit RISC-Designs.
1985 gliederte General Instrument seine Mikroelektronikabteilung aus, und die neue Eigentümerschaft stellte fast alles ein – was zu diesem Zeitpunkt größtenteils veraltet war. Der PIC wurde jedoch mit internem EPROM aufgerüstet, um einen programmierbaren Kanalcontroller zu schaffen, und heute ist eine riesige Vielfalt von PICs mit verschiedenen On-Board-Peripheriegeräten (serielle Kommunikationsmodule, UARTs, Motorsteuerungs-Kernel usw.) und Programmspeicher von 256 Wörtern bis zu 64k Wörtern und mehr erhältlich (ein "Wort" ist eine Assembler-Befehlsanweisung, die je nach spezifischer PIC-Mikro-Familie 12, 14 oder 16 Bit groß ist).
PIC und PICmicro sind eingetragene Marken von Microchip Technology. Es wird allgemein angenommen, dass PIC für Peripheral Interface Controller steht, obwohl der ursprüngliche Akronym von General Instruments für die ersten PIC1640- und PIC1650-Geräte "Programmable Interface Controller" war. Der Akronym wurde schnell durch "Programmable Intelligent Computer" ersetzt.
Der Microchip 16C84 (PIC16x84), der 1993 eingeführt wurde, war die erste Microchip-CPU mit On-Chip-EEPROM-Speicher. Dieser elektrisch löschbare Speicher machte ihn kostengünstiger als CPUs, die ein Quarz-"Löschfenster" zum Löschen des EPROM benötigten.
Kernarchitektur
Die PIC-Architektur zeichnet sich durch mehrere Attribute aus:
Getrennte Code- und Datenbereiche (Harvard-Architektur).
Eine kleine Anzahl von Befehlen mit fester Länge
Die meisten Befehle werden in einem einzigen Taktzyklus ausgeführt (2 Taktzyklen oder 4 Taktzyklen bei 8-Bit-Modellen), mit einem Verzögerungszyklus bei Verzweigungen und Sprüngen
Ein Akkumulator (W0), dessen Verwendung (als Quelloperand) implizit ist (d. h. nicht im Opcode kodiert)
Alle RAM-Speicherplätze fungieren als Register sowohl als Quelle als auch als Ziel für mathematische und andere Funktionen.
Ein Hardware-Stack zur Speicherung von Rücksprungadressen
Ein kleiner adressierbarer Datenbereich (32, 128 oder 256 Byte, abhängig von der Familie), erweitert durch Banking
Datenbereich mit CPU-, Port- und Peripherieregistern
ALU-Status-Flags sind in den Datenbereich abgebildet
Der Programmzähler ist ebenfalls in den Datenbereich abgebildet und beschreibbar (wird zur Implementierung indirekter Sprünge verwendet).
Es gibt keine Unterscheidung zwischen Speicherbereich und Registerbereich, da der RAM sowohl als Speicher als auch als Register dient und der RAM normalerweise einfach als Registerdatei oder als Register bezeichnet wird.
Datenbereich (RAM)
PICs verfügen über eine Reihe von Registern, die als allgemeiner RAM dienen. Spezielle Steuerregister für On-Chip-Hardwareressourcen sind ebenfalls in den Datenbereich abgebildet. Die Adressierbarkeit des Speichers variiert je nach Baureihe, und alle PIC-Geräte verfügen über eine gewisse Banking-Mechanik, um die Adressierung auf zusätzlichen Speicher zu erweitern. Spätere Baureihen verfügen über Move-Befehle, die den gesamten adressierbaren Bereich unabhängig vom ausgewählten Bank abdecken können. Bei früheren Geräten musste jede Registerbewegung über den Akkumulator erfolgen.
Zur Implementierung indirekter Adressierung werden ein "File Select Register" (FSR) und ein "Indirect Register" (INDF) verwendet. Eine Registernummer wird in den FSR geschrieben, wonach Lese- oder Schreibzugriffe auf INDF tatsächlich auf das durch den FSR adressierte Register erfolgen. Spätere Geräte erweiterten dieses Konzept um Post- und Pre-Inkrement/Dekrement für höhere Effizienz beim Zugriff auf sequenziell gespeicherte Daten. Dies ermöglicht es auch, den FSR fast wie einen Stack-Pointer (SP) zu behandeln.
Externer Datenspeicher ist nur bei einigen PIC18-Geräten mit vielen Pins direkt adressierbar.
Codebereich
Der Codebereich wird im Allgemeinen als ROM, EPROM oder Flash-ROM implementiert. Im Allgemeinen ist externer Codespeicher aufgrund des fehlenden externen Speicherinterfaces nicht direkt adressierbar. Ausnahmen sind PIC17 und ausgewählte PIC18-Geräte mit vielen Pins.
Wortgröße
Alle PICs verarbeiten (und adressieren) Daten in 8-Bit-Blöcken. Die Adressierbarkeit des Codebereichs ist jedoch nicht generell dieselbe wie die des Datenbereichs. Beispielsweise haben PICs der Baseline- (PIC12) und Mid-Range-Familien (PIC16) Programmspeicher, der in derselben Wortgröße adressiert wird wie die Befehlsbreite, d. h. 12 bzw. 14 Bit. Im Gegensatz dazu wird bei der PIC18-Serie der Programmspeicher in 8-Bit-Schritten (Bytes) adressiert, was sich von der Befehlsbreite von 16 Bit unterscheidet.
Zur Klarheit wird die Programmspeicherkapazität normalerweise in der Anzahl der (Ein-Wort-)Befehle angegeben, anstatt in Bytes.
Stacks
PICs verfügen über einen Hardware-Call-Stack, der zum Speichern von Rücksprungadressen verwendet wird. Der Hardware-Stack ist bei früheren Geräten nicht softwarezugänglich, aber dies änderte sich mit den 18-Serie-Geräten.
Hardwareunterstützung für einen allgemeinen Parameter-Stack fehlte in früheren Serien, aber dies verbesserte sich erheblich mit der 18-Serie, was die 18-Serie-Architektur für High-Level-Sprachcompiler freundlicher macht.
Befehlssatz
Ein PIC-Befehlssatz umfasst etwa 35 Befehle für die Low-End-PICs bis zu über 80 Befehle für die High-End-PICs. Der Befehlssatz enthält Befehle zur Durchführung verschiedener Operationen auf Registern direkt, dem Akkumulator und einem Literal-Konstanten oder dem Akkumulator und einem Register, sowie für bedingte Ausführung und Programmverzweigung.
Einige Operationen, wie das Setzen und Testen von Bits, können auf jedem nummerierten Register durchgeführt werden, aber Zwei-Operanden-Arithmetikoperationen betreffen immer W (den Akkumulator) und schreiben das Ergebnis entweder in W oder in das andere Operandenregister zurück. Um eine Konstante zu laden, muss sie zuerst in W geladen werden, bevor sie in ein anderes Register verschoben werden kann. Bei älteren Kernen mussten alle Registerbewegungen über W erfolgen, aber dies änderte sich bei den "High-End"-Kernen.
PIC-Kerne haben Skip-Befehle, die für bedingte Ausführung und Verzweigung verwendet werden. Die Skip-Befehle sind 'skip if bit set' und 'skip if bit not set'. Da Kerne vor PIC18 nur unbedingte Verzweigungsbefehle hatten, werden bedingte Sprünge durch einen bedingten Skip (mit der entgegengesetzten Bedingung) gefolgt von einem unbedingten Sprung implementiert. Skips sind auch nützlich für die bedingte Ausführung eines beliebigen unmittelbar folgenden Befehls. Es ist möglich, Skip-Befehle zu überspringen. Beispielsweise führt die Befehlssequenz "skip if A; skip if B; C" C aus, wenn A wahr ist oder wenn B falsch ist.
Die 18-Serie implementierte Schattenregister, die mehrere wichtige Register während eines Interrupts speichern und so Hardwareunterstützung für das automatische Speichern des Prozessorzustands bei der Bedienung von Interrupts bieten.
Im Allgemeinen fallen PIC-Befehle in 5 Klassen:
Operation auf dem Arbeitsregister (WREG) mit 8-Bit-Immediate ("Literal")-Operand. Z.B. movlw (Literal in WREG verschieben), andlw (UND-Literal mit WREG). Ein besonderer Befehl beim PIC ist retlw, Immediate in WREG laden und zurückkehren, der mit berechneten Verzweigungen zur Erstellung von Nachschlagetabellen verwendet wird.
Operation mit WREG und indiziertem Register. Das Ergebnis kann entweder in das Arbeitsregister (z.B. addwf reg,w) oder in das ausgewählte Register (z.B. addwf reg,f) geschrieben werden.
Bit-Operationen. Diese nehmen eine Registernummer und eine Bitnummer und führen eine von 4 Aktionen aus: Setzen oder Löschen eines Bits sowie Testen und Überspringen bei Setzen/Löschen. Letztere werden verwendet, um bedingte Verzweigungen durchzuführen. Die üblichen ALU-Status-Flags sind in einem nummerierten Register verfügbar, sodass Operationen wie "branch on carry clear" möglich sind.
Steuerübertragungen. Abgesehen von den zuvor erwähnten Skip-Befehlen gibt es nur zwei: goto und call.
Einige wenige verschiedene Null-Operanden-Befehle, wie return from subroutine und sleep zum Wechseln in den Niedrigenergiemodus.
Leistung[edit source | edit]Die architektonischen Entscheidungen zielen auf die Maximierung des Geschwindigkeits-Kosten-Verhältnisses ab. Die PIC-Architektur gehörte zu den ersten skalaren CPU-Designs und ist immer noch eine der einfachsten und kostengünstigsten. Die Harvard-Architektur – bei der Befehle und Daten aus getrennten Quellen stammen – vereinfacht das Timing und das Mikroschaltungsdesign erheblich, was sich positiv auf Taktfrequenz, Preis und Stromverbrauch auswirkt.
Der PIC-Befehlssatz eignet sich für die Implementierung schneller Nachschlagetabellen im Programmspeicher. Solche Nachschlagevorgänge benötigen einen Befehl und zwei Befehlszyklen. Viele Funktionen können auf diese Weise modelliert werden. Die Optimierung wird durch den relativ großen Programmspeicher des PIC (z.B. 4096 × 14-Bit-Wörter beim 16F690) und durch das Design des Befehlssatzes, das eingebettete Konstanten ermöglicht, erleichtert. Beispielsweise kann das Ziel eines Verzweigungsbefehls mit W indiziert werden und einen "RETLW" ausführen, der – wie der Name sagt – mit einem Literal in W zurückkehrt.
Die Interrupt-Latenz ist konstant bei drei Befehlszyklen. Externe Interrupts müssen mit dem Vier-Takt-Befehlszyklus synchronisiert werden, andernfalls kann es zu einem Ein-Befehlszyklus-Jitter kommen. Interne Interrupts sind bereits synchronisiert. Die konstante Interrupt-Latenz ermöglicht es PICs, interruptgetriebene Timing-Sequenzen mit geringem Jitter zu erreichen. Ein Beispiel hierfür ist ein Video-Sync-Pulsgenerator. Dies gilt bei den neuesten PIC-Modellen nicht mehr, da sie eine synchrone Interrupt-Latenz von drei oder vier Zyklen haben.
Vorteile
Kleiner Befehlssatz, der leicht zu erlernen ist
RISC-Architektur
Integrierter Oszillator mit wählbaren Geschwindigkeiten
Einfacher Einstieg, In-Circuit-Programmierung plus In-Circuit-Debugging – PICKit-Geräte für weniger als 50 $ erhältlich
Kostengünstige Mikrocontroller
Breites Spektrum an Schnittstellen, einschließlich I²C, SPI, USB, USART, A/D, programmierbare Komparatoren, PWM, LIN, CAN, PSP und Ethernet
Verfügbarkeit von Prozessoren im DIL-Gehäuse erleichtert die Handhabung für den Hobbygebrauch.
Einschränkungen[edit source | edit]Ein Akkumulator
Registerbank-Umschaltung ist erforderlich, um auf den gesamten RAM vieler Geräte zuzugreifen
Operationen und Register sind nicht orthogonal; einige Befehle können RAM und/oder Immediate-Konstanten adressieren, während andere nur den Akkumulator verwenden können
Die folgenden Stack-Einschränkungen wurden in der PIC18-Serie behoben, gelten aber weiterhin für ältere Kerne:
Der Hardware-Call-Stack ist nicht adressierbar, daher kann keine präemptive Aufgabenumschaltung implementiert werden
Softwareimplementierte Stacks sind nicht effizient, daher ist es schwierig, reentranten Code zu erzeugen und lokale Variablen zu unterstützen
Bei gepagtem Programmspeicher gibt es zwei Seitengrößen, die beachtet werden müssen: eine für CALL und GOTO und eine weitere für berechnete GOTO (typischerweise für Tabellensuchen verwendet). Beispielsweise haben CALL und GOTO auf dem PIC16 11 Adressbits, sodass die Seitengröße 2048 Befehle beträgt. Bei berechneten GOTOs, bei denen Sie zu PCL addieren, beträgt die Seitengröße 256 Befehle. In beiden Fällen werden die oberen Adressbits vom PCLATH-Register bereitgestellt. Dieses Register muss jedes Mal geändert werden, wenn die Steuerung zwischen Seiten wechselt. PCLATH muss auch von jedem Interrupt-Handler erhalten bleiben.
Compiler-Entwicklung
Während mehrere kommerzielle Compiler verfügbar sind, hat Microchip 2008 seine eigenen C-Compiler, C18 und C30, für die 18F-, 24F- und 30/33F-Prozessorlinien herausgebracht.
Der leicht zu erlernende RISC-Befehlssatz der PIC-Assemblersprache kann den Gesamtfluss schwer verständlich machen. Der umsichtige Einsatz einfacher Makros kann die Lesbarkeit von PIC-Assemblersprache erhöhen. Beispielsweise hat der ursprüngliche Parallax-PIC-Assembler ("SPASM") Makros, die W verbergen und den PIC wie eine Zwei-Adress-Maschine aussehen lassen. Er verfügt über Makrobefehle wie "mov b, a" (verschiebe Daten von Adresse a nach Adresse b) und "add b, a" (addiere Daten von Adresse a zu Daten in Adresse b). Er verbirgt auch die Skip-Befehle, indem er Drei-Operanden-Verzweigungsmakros wie "cjne a, b, dest" (vergleiche a mit b und springe zu dest, wenn sie nicht gleich sind) bereitstellt.
Familien-Kernarchitektur-Unterschiede
PICmicro-Chips haben eine Harvard-Architektur, und die Befehlswörter haben ungewöhnliche Größen. Ursprünglich hatten 12-Bit-Befehle 5 Adressbits zur Angabe des Speicheroperanden und 9-Bit-Verzweigungsziele. Spätere Überarbeitungen fügten Opcode-Bits hinzu, die zusätzliche Adressbits ermöglichten.
Baseline-Kern-Geräte (12 Bit)[edit source | edit]Diese Geräte verfügen über einen 12-Bit breiten Codespeicher, eine 32-Byte-Registerdatei und einen winzigen, zwei Ebenen tiefen Call-Stack. Sie werden durch die PIC10-Serie sowie durch einige PIC12- und PIC16-Geräte repräsentiert. Baseline-Geräte sind in Gehäusen von 6 bis 40 Pins erhältlich.
Im Allgemeinen sind die ersten 7 bis 9 Bytes der Registerdatei spezielle Funktionsregister, die restlichen Bytes sind allgemeiner RAM. Zeiger werden mit einem Registerpaar implementiert: Nach dem Schreiben einer Adresse in den FSR (File Select Register) wird das INDF-Register (Indirect f) zu einem Alias für das adressierte Register. Wenn gebankter RAM implementiert ist, wird die Banknummer durch die oberen 3 Bits des FSR ausgewählt. Dies betrifft die Registernummern 16–31; die Register 0–15 sind global und werden von den Bankauswahlbits nicht beeinflusst.
Aufgrund des sehr begrenzten Registerplatzes (5 Bits) wurden 4 selten gelesene Register nicht adressiert, sondern durch spezielle Befehle (OPTION und TRIS) geschrieben.
Der ROM-Adressraum umfasst 512 Wörter (12 Bit), die durch Banking auf 2048 Wörter erweitert werden können. CALL- und GOTO-Befehle geben die unteren 9 Bits der neuen Codelocation an; zusätzliche höherwertige Bits werden aus dem Statusregister übernommen. Beachten Sie, dass ein CALL-Befehl nur 8 Adressbits enthält und nur Adressen in der ersten Hälfte jeder 512-Wort-Seite angeben kann.
Nachschlagetabellen werden mit einem berechneten GOTO (Zuweisung zum PCL-Register) in eine Tabelle von RETLW-Befehlen implementiert.
Der Befehlssatz ist wie folgt. Registernummern werden als "f" bezeichnet, während Konstanten als "k" bezeichnet werden. Bitnummern (0–7) werden von "b" ausgewählt. Das "d"-Bit wählt das Ziel: 0 zeigt W an, während 1 anzeigt, dass das Ergebnis in das Quellregister f zurückgeschrieben wird. Die C- und Z-Statusflags können basierend auf dem Ergebnis gesetzt werden; andernfalls bleiben sie unverändert. Additions- und Subtraktionsbefehle (aber nicht Rotationsbefehle), die C setzen, setzen auch das DC-Flag (Digit Carry), den Übertrag von Bit 3 zu Bit 4, der für die BCD-Arithmetik nützlich ist.
Gleicher Opcode wie 12-Bit-PIC
†: Befehl, der nur für EM78-Befehlssatz einzigartig ist und kein PIC-Äquivalent hat
Einige Modelle unterstützen mehrere ROM- oder RAM-Bänke, ähnlich wie andere PIC-Mikrocontroller.
Mid-Range-Kern-Geräte (14 Bit)
Diese Geräte verfügen über einen 14-Bit breiten Codespeicher und einen verbesserten, 8 Ebenen tiefen Call-Stack. Der Befehlssatz unterscheidet sich nur geringfügig von den Baseline-Geräten, aber die 2 zusätzlichen Opcode-Bits ermöglichen die direkte Adressierung von 128 Registern und 2048 Code-Wörtern. Es gibt einige zusätzliche verschiedene Befehle sowie zwei zusätzliche 8-Bit-Literal-Befehle für Addition und Subtraktion. Der Mid-Range-Kern ist in der Mehrheit der Geräte mit der Bezeichnung PIC12 und PIC16 verfügbar.
Die ersten 32 Bytes des Registerbereichs sind speziellen Funktionsregistern vorbehalten; die restlichen 96 Bytes werden für allgemeinen RAM verwendet. Wenn gebankter RAM verwendet wird, sind die hohen 16 Register (0x70–0x7F) global, ebenso wie einige der wichtigsten speziellen Funktionsregister, einschließlich des STATUS-Registers, das die RAM-Bankauswahlbits enthält. (Die anderen globalen Register sind FSR und INDF, die unteren 8 Bits des Programmzählers PCL, das PC-High-Vorlade-Register PCLATH und das Master-Interrupt-Steuerregister INTCON.)
Das PCLATH-Register liefert höherwertige Befehlsadressbits, wenn die 8 Bits, die durch einen Schreibzugriff auf das PCL-Register geliefert werden, oder die 11 Bits, die von einem GOTO- oder CALL-Befehl geliefert werden, nicht ausreichen, um den verfügbaren ROM-Bereich zu adressieren.
Enhanced Mid-Range-Kern-Geräte (14 Bit)
Enhanced Mid-Range-Kern-Geräte führen einen tieferen Hardware-Stack, zusätzliche Reset-Methoden, 14 zusätzliche Befehle und Optimierungen für die 'C'-Programmiersprache ein. Insbesondere gibt es zwei INDF-Register (INDF0 und INDF1) und zwei entsprechende FSR-Registerpaare (FSRnL und FSRnH). Spezielle Befehle verwenden FSRn-Register wie Adressregister mit einer Vielzahl von Adressierungsmodi.
14-Bit-Enhanced-PIC-Zusatzbefehle
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Mnemonic
C?
Z?
Beschreibung
0
0
0
0
0
0
0
Opcode
Verschiedene Befehle
0
0
0
0
0
0
0
0
0
0
0
0
0
1
RESET
Software-Reset
0
0
0
0
0
0
0
0
0
0
1
0
1
0
CALLW
PC pushen, dann zu PCLATH:W springen
0
0
0
0
0
0
0
0
0
0
1
0
1
1
BRW
PC ← PC + W, relativer Sprung mit W
0
0
0
0
0
0
0
0
0
1
0
n
0
0
MOVIW ++FSRn
Z
FSRn inkrementieren, dann W ← INDFn
0
0
0
0
0
0
0
0
0
1
0
n
0
1
MOVIW −−FSRn
Z
FSRn dekrementieren, dann W ← INDFn
0
0
0
0
0
0
0
0
0
1
0
n
1
0
MOVIW FSRn++
Z
W ← INDFn, dann FSRn inkrementieren
0
0
0
0
0
0
0
0
0
1
0
n
1
1
MOVIW FSRn−−
Z
W ← INDFn, dann FSRn dekrementieren
0
0
0
0
0
0
0
0
0
1
1
n
m
MOVWI mit FSRn
INDFn ← W, gleiche Modi wie MOVIW
0
0
0
0
0
0
0
0
1
k
MOVLB k
BSR ← k, Literal in Bank-Auswahlregister verschieben
1
1
Opcode
d
Register
ALU-Operationen: dest ← OP(f,W)
1
1
0
1
0
1
d
f
LSLF f,d
C
Z
dest ← f << 1, logische Verschiebung nach links
1
1
0
1
1
0
d
f
LSRF f,d
C
Z
dest ← f >> 1, logische Verschiebung nach rechts
1
1
0
1
1
1
d
f
ASRF f,d
C
Z
dest ← f >> 1, arithmetische Verschiebung nach rechts
1
1
1
0
1
1
d
f
SUBWFB f,d
C
Z
dest ← f + ~W + C, Subtraktion mit Übertrag
1
1
1
1
0
1
d
f
ADDWFC f,d
C
Z
dest ← f + W + C, Addition mit Übertrag
1
1
Opcode
k
Operationen mit Literal k
1
1
0
0
0
1
0
n
k
ADDFSR FSRn,k
FSRn ← FSRn + k, 6-Bit-Offset addieren
1
1
0
0
0
1
1
k
MOVLP k
PCLATH ← k, 7-Bit-Literal in PC-Latch-High verschieben
1
1
0
0
1
k
BRA k
PC ← PC + k, relativer Sprung mit 9-Bit-Offset
1
1
1
1
1
1
0
n
k
MOVIW k[FSRn]
Z
W ← [FSRn+k], 6-Bit-Offset
1
1
1
1
1
1
1
n
k
MOVWI k[FSRn]
[FSRn+k] ← W, 6-Bit-Offset
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Mnemonic
C?
Z?
Beschreibung
PIC17 High-End-Kern-Geräte (16 Bit)
Die 17-Serie wurde nie populär und wurde durch die PIC18-Architektur abgelöst. Sie wird nicht für neue Designs empfohlen, und die Verfügbarkeit kann eingeschränkt sein.
Verbesserungen gegenüber früheren Kernen sind 16-Bit-breite Opcodes (die viele neue Befehle ermöglichen) und ein 16 Ebenen tiefer Call-Stack. PIC17-Geräte wurden in Gehäusen von 40 bis 68 Pins hergestellt.
Die 17-Serie führte eine Reihe wichtiger neuer Funktionen ein:
einen speicherabgebildeten Akkumulator
Lesezugriff auf Codespeicher (Tabellenlesen)
direkte Register-zu-Register-Bewegungen (frühere Kerne mussten Register durch den Akkumulator bewegen)
ein externes Programmspeicher-Interface zur Erweiterung des Codebereichs
einen 8-Bit × 8-Bit-Hardware-Multiplizierer
ein zweites indirektes Registerpaar
Auto-Inkrement/Dekrement-Adressierung, gesteuert durch Kontrollbits in einem Statusregister (ALUSTA)
PIC18 High-End-Kern-Geräte (16 Bit)[edit source | editbeta]Microchip führte die PIC18-Architektur im Jahr 2000 ein. Im Gegensatz zur 17-Serie hat sie sich als sehr beliebt erwiesen, mit einer großen Anzahl von derzeit in Produktion befindlichen Gerätevarianten. Im Gegensatz zu früheren Geräten, die häufiger in Assembler programmiert wurden, ist C zur vorherrschenden Entwicklungssprache geworden.
Die 18-Serie übernimmt die meisten Merkmale und Befehle der 17-Serie und fügt eine Reihe wichtiger neuer Funktionen hinzu:
Call-Stack ist 21 Bit breit und viel tiefer (31 Ebenen tief)
der Call-Stack kann gelesen und beschrieben werden (TOSU:TOSH:TOSL-Register)
bedingte Verzweigungsbefehle
indizierter Adressierungsmodus (PLUSW)
Erweiterung der FSR-Register auf 12 Bit, sodass sie den gesamten Datenadressraum linear adressieren können
Hinzufügung eines weiteren FSR-Registers (Erhöhung der Anzahl auf 3)
Der RAM-Bereich ist 12 Bit breit und wird mit einem 4-Bit-Bankauswahlregister und einem 8-Bit-Offset in jedem Befehl adressiert. Ein zusätzliches "Access"-Bit in jedem Befehl wählt zwischen Bank 0 (a=0) und der vom BSR ausgewählten Bank (a=1).
Für die STATUS-, WREG- und BSR-Register ist auch ein 1-Ebenen-Stack verfügbar. Sie werden bei jedem Interrupt gesichert und können bei der Rückkehr wiederhergestellt werden. Wenn Interrupts deaktiviert sind, können sie auch bei Unterprogrammaufruf/Rückkehr verwendet werden, indem das s-Bit gesetzt wird (durch Anhängen von ", FAST" an den Befehl).
Die Auto-Inkrement/Dekrement-Funktion wurde verbessert, indem die Kontrollbits entfernt und vier neue indirekte Register pro FSR hinzugefügt wurden. Je nachdem, auf welche indirekte Datei zugegriffen wird, ist es möglich, FSR zu postdekrementieren, postinkrementieren oder preinkrementieren; oder die effektive Adresse durch Addition von W zu FSR zu bilden.
Bei fortschrittlicheren PIC18-Geräten steht ein "erweiterter Modus" zur Verfügung, der die Adressierung für kompilierten Code noch günstiger macht:
ein neuer Offset-Adressierungsmodus; einige Adressen, die relativ zur Access-Bank waren, werden jetzt relativ zum FSR2-Register interpretiert
die Hinzufügung mehrerer neuer Befehle, insbesondere zur Manipulation der FSR-Register.
Diese Änderungen zielten hauptsächlich darauf ab, die Effizienz einer Datenstack-Implementierung zu verbessern. Wenn FSR2 entweder als Stack-Pointer oder als Frame-Pointer verwendet wird, können Stack-Elemente leicht indiziert werden – was effizienteren reentranten Code ermöglicht. Der MPLAB C18 C-Compiler von Microchip verwendet FSR2 als Frame-Pointer.
PIC24- und dsPIC-16-Bit-Mikrocontroller
Im Jahr 2001 führte Microchip die dsPIC-Serie ein, die Ende 2004 in die Massenproduktion ging. Es sind Microchips erste inhärent 16-Bit-Mikrocontroller. PIC24-Geräte sind als Allzweck-Mikrocontroller konzipiert. dsPIC-Geräte enthalten zusätzlich digitale Signalverarbeitungsfähigkeiten.
Obwohl sie noch ähnlich wie frühere PIC-Architekturen sind, gibt es erhebliche Verbesserungen:
Alle Register sind 16 Bit breit
Datenadressraum erweitert auf 64 KByte
Die ersten 2K sind für periphere Steuerregister reserviert
Datenbankumschaltung ist nicht erforderlich, es sei denn, der RAM überschreitet 62K
Direktadressierung mit "f-Operand" erweitert auf 13 Bit (8 KByte)
16 W-Register für Register-Register-Operationen verfügbar.
(Operationen mit f-Operanden referenzieren jedoch immer W0.)
Programmzähler ist 22 Bit (Bits 22:1; Bit 0 ist immer 0)
Befehle sind 24 Bit breit
Befehle sind in Byte- (B=1) und (16-Bit-)Wort-Form (B=0) erhältlich
Stack befindet sich im RAM (mit W15 als Stack-Pointer); es gibt keinen Hardware-Stack
W14 ist der Frame-Pointer
Auf im ROM gespeicherte Daten kann direkt zugegriffen werden ("Program Space Visibility")
Interrupt-Vektoren für verschiedene Interrupt-Quellen werden unterstützt.
Einige Funktionen sind:
Hardware-MAC (Multiplizieren-Akkumulieren)
Barrel-Shifting
Bit-Reversal
(16×16)-Bit-Einzelzyklus-Multiplikation und andere DSP-Operationen
Hardware-Divisionsunterstützung (19 Zyklen für 16/32-Bit-Division)
Hardwareunterstützung für Loop-Indizierung
Direkter Speicherzugriff
dsPICs können in C mit dem C30-Compiler von Microchip programmiert werden, einer Variante von GCC.
Der Befehls-ROM ist 24 Bit breit. Die Software kann auf den ROM in 16-Bit-Wörtern zugreifen, wobei gerade Wörter die niederwertigen 16 Bit jedes Befehls enthalten und ungerade Wörter die höherwertigen 8 Bit. Die hohe Hälfte ungerader Wörter wird als Null gelesen. Der Programmzähler ist 23 Bit breit, aber das niederwertigste Bit ist immer 0, sodass es 22 modifizierbare Bits gibt.
Befehle gibt es in zwei Hauptvarianten. Eine ist wie die klassischen PIC-Befehle mit einer Operation zwischen W0 und einem Wert in einem angegebenen f-Register (d. h. den ersten 8K des RAM) und einem Zielauswahlbit, das auswählt, welches mit dem Ergebnis aktualisiert wird. Die W-Register sind speicherabgebildet, sodass der f-Operand jedes W-Register sein kann,
Die andere Form, neu beim PIC24, spezifiziert 3 W-Register-Operanden, von denen 2 einen 3-Bit-Adressierungsmodus ermöglichen:
Der Register-Offset-Adressierungsmodus ist nur für 2-Operanden-Befehle verfügbar. 3-Operanden-Befehle verwenden Ww als zweiten Quelloperanden und verwenden diese Kodierung für eine vorzeichenlose 5-Bit-Immediate-Quelle. Beachten Sie, dass derselbe Ww sowohl zu Wd als auch zu Ws addiert werden kann.
Einige wenige Befehle sind 2 Wörter lang. Das zweite Wort ist ein NOP, das bis zu 16 zusätzliche Immediate-Bits enthält.
PIC32-32-Bit-Mikrocontroller
Im November 2007 führte Microchip die neue PIC32MX-Familie von 32-Bit-Mikrocontrollern ein. Die erste Baureihe basiert auf dem Industriestandard-MIPS32-M4K-Kern. Das Gerät kann mit dem Microchip MPLAB C Compiler für PIC32 MCUs programmiert werden, einer Variante des GCC-Compilers. Die ersten 18 Modelle, die derzeit in Produktion sind (PIC32MX3xx und PIC32MX4xx), sind pin-kompatibel und teilen denselben Peripheriesatz wie die PIC24FxxGA0xx-Familie von (16-Bit-)Geräten, was die Verwendung gemeinsamer Bibliotheken, Software und Hardware-Werkzeuge ermöglicht. Heute sind ab 28 Pins in kleinen QFN-Gehäusen bis hin zu Hochleistungsgeräten mit Ethernet, CAN und USB OTG eine vollständige Produktfamilie von 32-Bit-Mikrocontrollern der mittleren Leistungsklasse verfügbar.
Die PIC32-Architektur bringt eine Reihe neuer Funktionen in das Microchip-Portfolio, darunter:
Die höchste Ausführungsgeschwindigkeit von 80 MIPS (120+ Dhrystone MIPS @ 80 MHz)
Der größte Flash-Speicher: 512 kByte
Ein Befehl pro Taktzyklus-Ausführung
Der erste gecachte Prozessor
Ermöglicht die Ausführung aus dem RAM
Full-Speed-Host-/Dual-Role- und OTG-USB-Fähigkeiten
Vollständige JTAG- und 2-Draht-Programmier- und Debugging-Funktionen
Echtzeit-Trace
Gerätevarianten und Hardware-Funktionen[edit source | editbeta]PIC-Geräte bieten im Allgemeinen:
Sleep-Modus (Energieeinsparung).
Watchdog-Timer.
Verschiedene Kristall- oder RC-Oszillatorkonfigurationen oder ein externer Takt.
Varianten[edit source | editbeta]Innerhalb einer Serie gibt es dennoch viele Gerätevarianten, je nachdem, welche Hardwareressourcen der Chip bietet.
Allgemeine I/O-Pins.
Interne Taktoszillatoren.
8/16/32-Bit-Timer.
Interner EEPROM-Speicher.
Synchrones/Asynchrones serielles Interface USART.
MSSP-Peripherie für I²C- und SPI-Kommunikation.
Capture/Compare- und PWM-Module.
Analog-Digital-Wandler (bis zu ~1,0 MHz).
USB-, Ethernet-, CAN-Interface-Unterstützung.
Externes Speicher-Interface.
Integrierte analoge HF-Frontends (PIC16F639 und rfPIC).
KEELOQ-Rolling-Code-Verschlüsselungs-Peripherie (Kodieren/Dekodieren)
Und viele mehr.
Trends
Die erste Generation von PICs mit EPROM-Speicher wird fast vollständig durch Chips mit Flash-Speicher ersetzt. Ebenso wurde der ursprüngliche 12-Bit-Befehlssatz des PIC1650 und seiner direkten Nachkommen durch 14-Bit- und 16-Bit-Befehlssätze abgelöst. Microchip verkauft immer noch OTP- (One-Time-Programmable) und Windowed- (UV-löschbare) Versionen einiger seiner EPROM-basierten PICs für Legacy-Unterstützung oder Großaufträge. Auf der Microchip-Website sind PICs, die nicht elektrisch löschbar sind, als OTP aufgeführt. UV-löschbare Windowed-Versionen dieser Chips können bestellt werden.
Teilenummern-Suffixe
Das F in einem Namen zeigt im Allgemeinen an, dass der PICmicro Flash-Speicher verwendet und elektrisch gelöscht werden kann. Umgekehrt bedeutet ein C im Allgemeinen, dass er nur durch Bestrahlung des Dies mit UV-Licht gelöscht werden kann (was nur möglich ist, wenn ein Windowed-Gehäuse verwendet wird). Eine Ausnahme von dieser Regel ist der PIC16C84, der EEPROM verwendet und daher elektrisch löschbar ist.
Ein L im Namen zeigt an, dass das Teil bei einer niedrigeren Spannung betrieben wird, oft mit Frequenzbeschränkungen.
Teile, die speziell für den Niederspannungsbetrieb in einem engen Bereich von 3 - 3,6 Volt ausgelegt sind, sind mit einem J in der Teilenummer gekennzeichnet. Diese Teile sind auch einzigartig I/O-tolerant, da sie bis zu 5 V als Eingang akzeptieren.
PIC-Klone
Dritthersteller stellen kompatible Produkte her, z. B. den Parallax SX.
Entwicklungswerkzeuge
Microchip bietet eine kostenlose IDE-Software namens MPLAB an, die einen Assembler, Linker, Software-Simulator und Debugger enthält. Sie verkaufen auch C-Compiler für die PIC18- und dsPIC-Familien, die sich nahtlos in MPLAB integrieren lassen. Kostenlose Studentenversionen der C-Compiler sind ebenfalls mit allen Funktionen erhältlich. Bei den kostenlosen Versionen werden die Optimierungen jedoch nach 60 Tagen deaktiviert.
Mehrere Drittanbieter stellen C-Sprachcompiler für PICs her, von denen viele in MPLAB integriert sind und/oder über eine eigene IDE verfügen. Ein voll ausgestatteter Compiler für die PICBASIC-Sprache zur Programmierung von PIC-Mikrocontrollern ist von meLabs, Inc. erhältlich. Mikroelektronika bietet PIC-Compiler in C, Basic und Pascal an.
Eine grafische Programmiersprache namens Flowcode ist in der Lage, 8- und 16-Bit-PIC-Geräte zu programmieren und PIC-kompatiblen C-Code zu generieren. Sie ist in zahlreichen Versionen von einer kostenlosen Demo bis zu einer vollständigeren professionellen Edition erhältlich.
Der einzige Open-Source-Compiler für die PIC16- und PIC18-Familie ist SDCC. Er verwendet GPutils für Linker- und Assembler-Werkzeuge. Ein Plugin wird benötigt, um sie in MPLAB oder MPLABX zu installieren.
Entwicklungswerkzeuge für die PIC-Familie sind unter der GPL oder anderen freien Software- oder Open-Source-Lizenzen verfügbar.
Geräteprogrammierer
Hauptartikel: PICKit
Geräte, die als "Programmierer" bezeichnet werden, werden traditionell verwendet, um Programmcodes in den Ziel-PIC zu laden. Die meisten PICs, die Microchip derzeit verkauft, verfügen über ICSP- (In-Circuit Serial Programming) und/oder LVP-Fähigkeiten (Low Voltage Programming), die es ermöglichen, den PIC zu programmieren, während er sich in der Zielschaltung befindet. Die ICSP-Programmierung erfolgt über zwei Pins, Takt und Daten, während eine hohe Spannung (12 V) am Vpp/MCLR-Pin anliegt. Die Low-Voltage-Programmierung verzichtet auf die hohe Spannung, reserviert jedoch exklusiv einen I/O-Pin und kann daher deaktiviert werden, um den Pin für andere Zwecke freizugeben (einmal deaktiviert, kann er nur mit High-Voltage-Programmierung wieder aktiviert werden).
Es gibt viele Programmierer für PIC-Mikrocontroller, die von extrem einfachen Designs, die auf ICSP angewiesen sind, um den direkten Download von Code von einem Host-Computer zu ermöglichen, bis hin zu intelligenten Programmierern reichen, die das Gerät bei mehreren Versorgungsspannungen verifizieren können. Viele dieser komplexen Programmierer verwenden selbst einen vorprogrammierten PIC, um die Programmierbefehle an den zu programmierenden PIC zu senden. Der intelligente Programmiertyp wird benötigt, um frühere PIC-Modelle (hauptsächlich EPROM-Typ) zu programmieren, die keine In-Circuit-Programmierung unterstützen.
Viele der höherwertigen Flash-basierten PICs können sich auch selbst programmieren (in ihren eigenen Programmspeicher schreiben). Demobretter sind mit einem werkseitig programmierten Bootloader erhältlich, der zum Laden von Benutzerprogrammen über eine Schnittstelle wie RS-232 oder USB verwendet werden kann, wodurch ein Programmiergerät überflüssig wird. Alternativ gibt es Bootloader-Firmware, die der Benutzer mit ICSP auf den PIC laden kann. Die Vorteile eines Bootloaders gegenüber ICSP sind die wesentlich höheren Programmiergeschwindigkeiten, die sofortige Programmausführung nach der Programmierung und die Möglichkeit, sowohl zu debuggen als auch zu programmieren, wobei dasselbe Kabel verwendet wird.
Programmierer/Debugger sind direkt bei Microchip erhältlich. Programmierer von Drittanbietern reichen von Bauplänen bis hin zu Selbstbau-Kits und vollständig getesteten, einsatzbereiten Geräten. Einige sind einfache Designs, die einen PC für die Low-Level-Programmiersignalisierung benötigen (diese verbinden sich normalerweise mit der seriellen oder parallelen Schnittstelle und bestehen aus einigen wenigen einfachen Komponenten), während andere die Programmierlogik integriert haben (diese verwenden normalerweise eine serielle oder USB-Verbindung, sind normalerweise schneller und werden oft selbst mit PICs zur Steuerung gebaut).
PICKit 2 Klone und Open Source
Der PICKit 2 war ein interessanter PIC-Programmierer von Microchip. Er kann alle PICs programmieren und die meisten PICs debuggen (seit Mai 2009 wird nur die PIC32-Familie für MPLAB-Debugging nicht unterstützt). Seit seinen ersten Veröffentlichungen sind alle Software-Quellcodes (Firmware, PC-Anwendung) und der Hardware-Schaltplan öffentlich zugänglich. Dies macht es für Endbenutzer relativ einfach, den Programmierer für die Verwendung mit einem nicht-Windows-Betriebssystem wie Linux oder Mac OS zu modifizieren. Gleichzeitig schafft es auch viel DIY-Interesse und Klone. Diese Open-Source-Struktur bringt viele Funktionen in die PICKit-2-Community, wie Programmer-to-Go, das UART-Tool und das Logic-Tool, die von PICKit-2-Benutzern beigetragen wurden. Benutzer haben auch Funktionen wie 4-MB-Programmer-to-Go-Fähigkeit, USB-Buck/Boost-Schaltungen, RJ12-Anschlüsse und andere hinzugefügt.
Debugging
Software-Emulation
Kommerzielle und kostenlose Emulatoren sind für die PIC-Familienprozessoren erhältlich.
In-Circuit-Debugging
Spätere PIC-Modelle verfügen über eine ICD-Schnittstelle (In-Circuit Debugging), die in den CPU-Kern integriert ist. ICD-Debugger (MPLAB ICD2 und andere Drittanbieter) können über drei Leitungen mit dieser Schnittstelle kommunizieren. Dieses kostengünstige und einfache Debugging-System hat jedoch seinen Preis: eine begrenzte Anzahl von Breakpoints (1 bei älteren PICs, 3 bei neueren PICs), Verlust einiger I/Os (mit Ausnahme einiger oberflächenmontierter 44-Pin-PICs, die dedizierte Leitungen für das Debugging haben) und Verlust einiger Funktionen des Chips. Für kleine PICs, bei denen der durch diese Methode verursachte I/O-Verlust inakzeptabel wäre, werden spezielle Header hergestellt, die mit PICs bestückt sind, die zusätzliche Pins speziell für das Debugging haben.
In-Circuit-Emulatoren
Microchip bietet drei vollständige In-Circuit-Emulatoren an: den MPLAB ICE2000 (Parallelschnittstelle, ein USB-Konverter ist erhältlich); den neueren MPLAB ICE4000 (USB 2.0-Verbindung); und neuerdings den REAL ICE. Alle diese ICE-Werkzeuge können mit der MPLAB-IDE für vollständiges Quellcode-Debugging von auf dem Ziel laufendem Code verwendet werden.
Der ICE2000 benötigt Emulatormodule, und die Testhardware muss einen Sockel bereitstellen, der entweder ein Emulatormodul oder ein Produktionsgerät aufnehmen kann.
Der REAL ICE verbindet sich direkt mit Produktionsgeräten, die In-Circuit-Emulation über die PGC/PGD-Programmierschnittstelle oder über eine Hochgeschwindigkeitsverbindung unterstützen, die zwei weitere Pins verwendet. Laut Microchip unterstützt er "die meisten" Flash-basierten PIC-, PIC24- und dsPIC-Prozessoren.
Der ICE4000 wird auf der Microchip-Website nicht mehr direkt beworben, und die Kaufseite besagt, dass er für neue Designs nicht empfohlen wird.
Wenn MikaTech ein schlechtes Unternehmen wäre, könnten Sie im Internet über die 28-jährige Geschichte hinweg massenhaft negative Berichte über seinen Service finden
Verschiedene Chiphersteller haben unterschiedliche Teilenummern, aber der innere Kern des Chips kann mit derselben Technologie hergestellt sein. Es wäre nahezu unmöglich, alle Teilenummern aufzulisten, bei denen unsere Technologie anwendbar ist, wie z. B. MYSON, STK, FEELING, ANALOG, FUJITSU, NOVATEK, LG/HYNDAI.
Durch den Fortschritt der Technologie sammeln wir täglich mehr Erfahrungen und entwickeln neue Methoden für das Reverse Engineering verschiedener integrierter Schaltungsteile. Die vollständige Liste der integrierten Schaltungsteilenummern, die in unseren Zuständigkeitsbereich fallen, wird immer größer – bitte kontaktieren Sie uns, um dies herauszufinden.
Die Mikatech Innovative Limited versteht die Bedeutung der Privatsphäre ihrer Kunden. In dem Moment, in dem Sie Mikatech kontaktieren, werden Ihre persönlichen Informationen durch unsere Managementrichtlinien geschützt, die im Laufe unserer jahrelangen Praxis entwickelt wurden. Mikatech verwendet diese Informationen, um seinen Service für Sie zu personalisieren und wird diese Informationen niemals aus irgendeinem Grund an Dritte weitergeben.
Bei jedem Projekt, das wir durchführen, löschen wir alle Daten, Materialien und Codes 60 Tage nach der Lieferung der Dateien – das schützt uns und schützt Ihre Privatsphäre.
Ja, es ist völlig legal. Mikatech erbringt seine Reverse-Engineering-Dienstleistungen nur zu Bildungszwecken. In einigen Ländern oder Regionen kann die Nutzung der oben genannten Dienstleistungen illegal sein – bitte überprüfen Sie Ihre lokalen Gesetze.
Mikatech übernimmt keine Verantwortung in Bezug auf die Nutzung der oben genannten Dienstleistungen, die als illegal angesehen werden könnte.
A. Unser Mail-Server ist vorübergehend ausgefallen, Ihre Nachricht wurde nicht an unser Postfach zugestellt, auch wenn auf dem Bildschirm eine erfolgreiche Sendebestätigung angezeigt wird – bitte kontaktieren Sie uns erneut.
B. Unsere E-Mail wird von Ihrem Mail-Server als Junk-Mail erkannt, sodass unsere Antwort von Ihrem Mail-Server abgelehnt oder in Ihren Junk-Ordner umgeleitet wurde – bitte entfernen Sie unser Konto aus Ihrer Junk-Liste oder überprüfen Sie Ihren Junk-Ordner, oder verwenden Sie ein anderes E-Mail-Konto wie Gmail.
C. Ihre E-Mail wird von unserem Mail-Server als Junk-Mail erkannt, sodass sie in unserem Junk-Ordner gelandet ist – bitte verwenden Sie ein anderes E-Mail-Konto, um uns erneut zu kontaktieren.
Debug-Schnittstellen wie JTAG und SWD sind für die Entwicklung unerlässlich, aber sie sind auch Hintertüren. Der MCU-Lockbit-Lock basiert oft auf der Debug-Authentifizierung. Wenn der Angreifer diese Authentifizierung umgehen kann, kann er Flash und EEPROM direkt auslesen. Das Auslesen eines EEPROM-Prozessors ist ein Standard-Debug-Befehl. Viele MCUs implementieren einen Verriegelungsmechanismus, der den Debug-Zugriff deaktiviert. Diese Verriegelung ist typischerweise ein Fuse-Bit. Einmal durchgebrannt, ist der Debug-Zugriff dauerhaft deaktiviert. Einige MCUs erlauben jedoch eine vorübergehende Entsperrung über ein Passwort. Das Passwort wird in einem geschützten Bereich gespeichert. Der Angreifer kann versuchen, das Passwort mit Brute-Force zu knacken, oder eine Schwachstelle in der Passwortverifizierungsroutine ausnutzen. Der MCU-Lockbit-Lock ist anfällig für Timing-Angriffe auf den Passwortvergleich. Wenn der Vergleich bei Nichtübereinstimmung vorzeitig abbricht, kann der Angreifer Byte für Byte raten. LockBit-Ransomware-Betreiber haben solche Techniken eingesetzt, um MCUs zu entsperren. Sie untersuchen die Debug-Schnittstelle, während sie Kandidaten-Passwörter senden. Die Antwortzeit gibt die Korrektheit jedes Bytes preis. Diese Methode vermeidet Dekapsulation und Code-Wiederherstellung. Sie ist nicht zerstörend. Der Angreifer kann auch Spannungs-Glitchen auf das Debug-Freigabesignal anwenden. Ein Glitch kann den MCU zwingen, den Debug-Modus ohne Authentifizierung zu aktivieren. Dies ist ein häufiger Fault-Injection-Vektor. Sobald der Debug-Modus aktiv ist, kann der Angreifer jede Speicherstelle lesen. Er kann die Inhalte von Kryptospeicher kopieren, indem er Lese-Befehle sendet. Er kann auch den gesamten Flash auslesen. Mikrocontroller-Reverse-Engineering beginnt oft mit der Debug-Schnittstellenanalyse. Der erste Schritt besteht darin, die Debug-Pins zu identifizieren. Diese Pins sind normalerweise mit GPIO gemultiplext. Der Angreifer muss die richtige Pin-Konfiguration einstellen. Einige MCUs haben einen Bootstrap-Lader, der den Debug-Modus nach einer Reset-Sequenz aktiviert. Die Sequenz kann das Ziehen bestimmter Pins auf High oder Low beinhalten. Der Angreifer kann diese Sequenz replizieren. Die Firmware-Extraktion über Debug ist schnell und zuverlässig. Sie liefert ein Binär-Image, das disassembliert werden kann. Der MCU-Lockbit-Lock soll dies verhindern. Aber viele Entwickler lassen die Debug-Schnittstelle in der Produktion offen. Sie gehen davon aus, dass das Lock-Bit ausreicht. Das Lock-Bit kann jedoch durch einen Mass-Lösch-Befehl zurückgesetzt werden. Einige MCUs erlauben Mass-Lösch nur, wenn das Lock gesetzt ist. Wenn das Lock nicht gesetzt ist, ist Mass-Lösch nicht erforderlich. Der Angreifer kann einfach lesen. Bei einigen MCUs wird das Lock-Bit im EEPROM gespeichert. Das Auslesen eines EEPROM-Prozessors könnte den Lock-Status preisgeben. Aber der Angreifer kann einfach versuchen zu lesen. Wenn der Zugriff verweigert wird, versucht er es mit Glitchen. Die Kombination aus Debug und Glitchen ist wirkungsvoll. Dekapsulation und Code-Wiederherstellung sind letzte Auswege. Der MCU-Lockbit-Lock kann auch durch Ausnutzen eines Pufferüberlaufs im Debug-Treiber umgangen werden. Der Treiber läuft auf einer hohen Privilegierungsstufe. Wenn der Angreifer ein übergroßes Paket sendet, kann er die Rücksprungadresse überschreiben. Dies lenkt die Ausführung auf eine Speicher-Dump-Routine um. Der Angreifer führt dann diese Routine aus. Dies ist ein Software-Angriff, kein Hardware-Angriff. Er umgeht die Verriegelung vollständig. LockBit und andere Ransomware-Gruppen haben solche Exploits für beliebte MCU-Familien entwickelt. Sie teilen sie in Untergrund-Foren. Zur Verteidigung müssen MCU-Hersteller ihre Debug-Firmware härten. Sie müssen auch die nach der Authentifizierung verfügbaren Debug-Befehle einschränken. Einige MCUs implementieren ein Challenge-Response-Protokoll. Der Host muss die Kenntnis eines Geheimnisses nachweisen. Dieses Geheimnis ist chipspezifisch. Ohne dieses ist der Debug-Zugriff unmöglich. Das Geheimnis wird in einem One-Time-Programmable (OTP)-Speicher gespeichert. Das Auslesen eines EEPROM-Prozessors kann OTP-Bits nicht abrufen, da sie nicht elektrisch lesbar sind. Sie sind physisch durchgebrannt. Der Angreifer kann jedoch weiterhin versuchen, das Geheimnis über Seitenkanäle zu extrahieren, oder das Protokoll durch Glitchen des Zustandsautomaten umgehen. Der Zustandsautomat, der die Debug-Authentifizierung steuert, ist oft einfach. Ein einziger Glitch kann ihn vom Zustand "gesperrt" in "entsperrt" überführen. Dies ist eine klassische Schwachstelle. Daher implementieren einige MCUs einen dedizierten Sicherheitscoprozessor für die Debug-Authentifizierung. Dieser Coprozessor hat seinen eigenen Lockbit-Lock. Der Coprozessor ist gegen Glitchen gehärtet. Er enthält auch einen Watchdog, der das System zurücksetzt, wenn die Authentifizierung zu lange dauert. Diese Maßnahmen erhöhen die Hürde. Sie beseitigen die Bedrohung jedoch nicht. Der Angreifer kann weiterhin Dekapsulation verwenden, um die OTP-Bits direkt zu lesen, oder Elektronenmikroskopie, um die durchgebrannten Fuses abzubilden. Der MCU-Lockbit-Lock ist also ein mehrschichtiges Problem. Jede Schicht hat ihre eigenen Schwachstellen. Die Debug-Schnittstelle ist die zugänglichste Schicht. Sie ist das erste Ziel vieler Angreifer. Um sie zu sichern, sollten Anbieter den Debug-Modus in der Produktion dauerhaft deaktivieren. Dies ist die einfachste und effektivste Maßnahme. Sie verhindert jedoch Feldaktualisierungen und das Debugging von Feldausfällen. Ein Kompromiss besteht darin, den Debug-Modus nur nach Vorlage eines physischen Tokens zu erlauben. Das Token könnte ein kryptografischer Schlüssel sein, der in einem separaten sicheren Element gespeichert ist. Der MCU verifiziert das Token über einen sicheren Kanal. Dies ist der Ansatz, der in vielen Automobil-MCUs verwendet wird. Das Auslesen eines EEPROM-Prozessors ist nicht erforderlich, da sich der Schlüssel nicht im MCU befindet. Das Auslesen von Flash und EEPROM über Debug wird ohne den Schlüssel unmöglich. Dekapsulation und Code-Wiederherstellung können den Schlüssel nicht extrahieren, da er extern ist. Das Kopieren von Kryptospeicherinhalten bleibt möglich, wenn der MCU selbst Schlüssel speichert. Diese Schlüssel können jedoch mit dem externen Schlüssel verschlüsselt werden. Der Angreifer muss also auch den externen Schlüssel erbeuten. Dies erhöht die Komplexität. Das Mikrocontroller-Reverse-Engineering solcher Systeme ist viel schwieriger. Die Firmware-Extraktion liefert nur verschlüsselte Daten. Der Angreifer muss auch das Secure-Channel-Protokoll reverse-engineeren. Das ist eine gewaltige Aufgabe. Zusammenfassend sind Debug-Schnittstellen eine große Schwachstelle des MCU-Lockbit-Locks. Sie ermöglichen schnelles Auslesen von Flash und EEPROM, Auslesen eines EEPROM-Prozessors und Kopieren von Kryptospeicherinhalten. Ohne ordnungsgemäße Authentifizierung ist die Firmware-Extraktion trivial. Die Branche muss robuste Authentifizierungsmechanismen einführen und die dauerhafte Deaktivierung für Hochsicherheitsprodukte in Betracht ziehen.