Wie „erinnert“ sich ein Mikrocontroller an ein Programm?

Oct 12 2020

Das ist etwas, das mich seit meinem Abschluss wirklich nervt. Wir haben PIC16f877a-Mikrocontroller im Unterricht programmiert, sind aber nie auf die Funktionsweise eingegangen, sondern nur auf die Funktionsweise. Nehmen wir also an, ich schreibe ein Programm, das LEDS in einer bestimmten Reihenfolge blinken lässt, und sende dieses Programm über diesen speziellen Adapter an die richtigen Pins an den Mikrocontroller. Was wissen Sie, die LEDs beginnen wie angewiesen zu blinken. Jetzt trenne ich die Stromversorgung und entferne den PIC vom Steckbrett. Ich setze den PIC wieder an die richtige Stelle, schließe die Stromversorgung an und die LEDs blinken immer noch wie zuvor programmiert, ohne sie neu programmieren zu müssen. Wie passiert das? Wie "erinnert" sich dieser Mikrocontroller im Wesentlichen an das, was ich ihm gesagt habe?

Antworten

35 DaveTweed Oct 12 2020 at 01:05

Der PIC enthält eine Art nichtflüchtigen Speicher namens " Flash EEPROM ". Wenn Sie "Ihr Programm an den Mikrocontroller senden", programmiert der spezielle Adapter Ihren Code tatsächlich in diesen Speicher. Der physikalische Speicher ist eine spezielle Art von Transistor mit einem schwebenden Gate, das eine Ladung mehr oder weniger unbegrenzt speichern kann, selbst wenn keine Leistung angelegt wird. In den meisten Geräten ist "geladen" = 0, "keine Ladung" = 1.

Immer wenn der PIC zurückgesetzt oder eingeschaltet wird, beginnt er mit der Ausführung Ihres Codes und ruft ihn direkt aus diesem Speicher ab.

Auf dem PIC ist dieser Speicher in denselben Chip integriert, der die CPU und den Rest der Logik (Peripheriegeräte usw.) enthält. Dieselbe Art von Speicher wird verwendet, um das BIOS in Ihrem Desktop- / Laptop-PC zu halten, aber es ist ein separater Chip von der CPU. Die ersten Bildschirme, die Sie beim Einschalten Ihres PCs sehen, stammen aus dem BIOS, das dann Ihr Betriebssystem von der Festplatte oder SSD lädt und ausführt.

10 PeterGreen Oct 12 2020 at 12:49

Es gibt einige Teile, die die Magie der Programmierung eines Mikrocontrollers zum Funktionieren bringen.

Ihre Entwicklungs-Toolchain (Compiler, Assembler, Linker usw.) übersetzt Ihr Programm vom Quellcode in eine Reihe von Maschinenanweisungen, die auf dem Mikrocontroller gespeichert werden.

Der Mikrocontroller speichert das Programm normalerweise im Flash-Speicher (UV-löschbare und einmalig programmierbare Mikrocontroller sind ebenfalls vorhanden). Dies ist ein spezieller Speichertyp, der Daten auch bei ausgeschaltetem Gerät speichert. Diese beruhen auf einer Struktur, die als "Floating Gate Mosfet" bekannt ist. Im Wesentlichen hat jeder Mosfet in der Speicheranordnung einen winzigen Kondensator in Reihe mit seinem Gate, und die Ladung an diesem Kondensator ändert das Verhalten des Transistors.

Das schwimmende Tor ist von Isoliermaterial umgeben und daher kann unter normalen Bedingungen keine Ladung in das schwimmende Tor eintreten oder es verlassen. Dies ermöglicht es dem Floating Gate, die Ladung und damit Informationen auch dann beizubehalten, wenn die Schaltung ausgeschaltet ist.

Wenn jedoch ausreichend hohe Spannungen angelegt werden, können Elektronen die Isolierschicht durchqueren. Dies ermöglicht das Hinzufügen oder Entfernen von Ladung zum schwimmenden Gate. Im Allgemeinen kann der Mechanismus zum Laden der Gatter (bekannt als "Programmieren") auf Einzelbitbasis durchgeführt werden, aber das Verfahren zum Entfernen einer Ladung (bekannt als "Löschen") kann jeweils nur für einen ganzen Speicherblock durchgeführt werden.

Wenn Sie Ihren Programmieradapter anschließen und die Software anweisen, den Mikrocontroller zu programmieren, wird der Mikrocontroller in einen speziellen "Programmiermodus" versetzt. Die Details hierzu variieren zwischen verschiedenen Mikrocontrollern, aber bei Ihrem PIC16f877a erfolgt dies normalerweise durch Anlegen von 13 V an die Vpp / MCLR-Leitung. Bei älteren Flash-Chips liefert Vpp tatsächlich die für die Programmierung erforderliche Leistung, bei Ihrem PIC handelt es sich jedoch nur um eine Signalleitung mit den Spannungen, die zum Programmieren des intern erzeugten Flash-Arrays erforderlich sind. Im Programmiermodus hört der Prozessor auf, normale Anweisungen auszuführen, und reagiert stattdessen auf spezielle Befehle, die über die Programmierschnittstelle gesendet werden. Auf PICs ist dies eine synchrone serielle Schnittstelle mit einer unidirektionalen Taktleitung PGC und einer bidirektionalen Datenleitung PGD.

Im Programmiermodus sendet die Programmiersoftware eine Reihe von seriellen Befehlen über den Programmieradapter, um Ihr Programm in Flash zu schreiben. Es sind zwei verschiedene Ansätze möglich. In einem Ansatz werden "Löschen und Programmieren" -Befehle verwendet, um jeweils einen Block zu löschen und neu zu programmieren. Bei dem anderen Ansatz wird der gesamte Chip mit einem "Bulk Erase" -Befehl gelöscht, dann können "Program only" -Befehle zum Programmieren der neuen Daten verwendet werden. In beiden Fällen müssen die Daten vor dem Ausgeben eines Befehls "Löschen und Programmieren" oder "Nur Programmieren" zuerst in Staging-Register geladen werden. Sie finden die blutigen Details inhttp://ww1.microchip.com/downloads/en/devicedoc/39589b.pdf

7 DKNguyen Oct 12 2020 at 01:22

Das Wichtigste zuerst ... verstehen Sie, wie ein einmalig programmierbarer Schmelzspeicher funktioniert? Wenn ich eine Milliarde kleiner Drähte hätte und jeder, den ich wähle, entweder mit + V für ein logisches HI (EINS) oder mit GND für ein logisches LO (NULL) zu verbinden, verstehen Sie, wie das ein Programm aus Einsen und Nullen in sich speichert ? Sie könnten ein Voltmeter nehmen und für jeden Draht messen, ob er an + V oder GND angeschlossen ist, um herauszufinden, ob das Bit an dieser Stelle ein HI oder LO ist. Ein Mikrocontroller macht das Gleiche.

Alles andere ist eine ausgefallene, flexiblere Version dieses Konzepts: Wie funktioniert ROM?

Dies führt tendenziell zu der Frage: "Wie nimmt ein Mikrocontroller das Programm von Einsen und Nullen und macht Dinge damit ? Was passiert auf Hardwareebene, wenn wir einen Code eingeben?

6 RuskBox Oct 12 2020 at 01:08

Der Programmcode wird im ROM-Speicher des Mikrocontrollers gespeichert (in diesem Fall Flash). Gespeicherte Daten in einem solchen Speicher bleiben nach dem Ausschalten erhalten. Ihr Mikrocontroller verfügt über 14 KB Flash-Speicher. Der Code befindet sich nach der Programmierung.

Dieser Speicher basiert auf MOSFET-Strukturen, die Daten nach dem Trennen der Stromversorgung speichern. Für weitere Informationen zur Funktionsweise des Flash-Speichers empfehle ich Ihnen, den Wiki-Artikel zu lesen .

5 GrahamStevenson Oct 12 2020 at 01:31

Je nach Jahrgang des Mikrocontrollers ist er entweder mit einem UV-löschbaren EPROM in einer Keramikverpackung mit Glasfenster, einem einmal programmierbaren EPROM in einer Kunststoffverpackung (für die Produktion) oder einem Flash-Speicher (typisch für die meisten aktuellen Geräte) ausgestattet. Einige können sogar mit maskenprogrammiertem ROM für eine hohe Stückzahl gekauft werden.

Einige Programmierer unterstützen verschiedene Mikrocontroller, oder der Gerätehersteller verfügt möglicherweise über einen dedizierten EVB oder was auch immer. Bei einigen Chips wird auch die serielle Programmierung über SPI, USB, serielle Schnittstelle (Old School) oder parallele Schnittstelle unterstützt.

Ich mag die "In-Circuit-Programmierung" selbst lieber.