Heutzutage wird der Flash-Speicher zur Speicherung von Programmcode und der EEPROM (Electrically Erasable Read Only Memory) zur Speicherung persistenter Daten verwendet. Vor etwa 30 Jahren, bevor Flash auf den Markt kam, wurden EEPROMs zum Speichern von Programmcode verwendet.
Tatsächlich kamen zuerst ROM (Nur-Lese-Speicher), dann PROM (programmierbarer ROM, nur einmal), EPROM (mit UV-Licht löschbarer PROM), EEPROM und schließlich Flash. ROMs werden immer noch für sehr volumenstarke und kostengünstige Anwendungen (z. B. sprechende Grußkarten) verwendet.
Der wichtige Unterschied zu aktuellen Mikrocontrollern besteht darin, dass Sie im Allgemeinen keinen Code aus dem EEPROM ausführen können und es für Programme umständlich ist, Daten in Flash zu speichern. (Daten werden in Flash gespeichert, wenn Sie beispielsweise das Schlüsselwort "const" in einer Datendeklaration verwenden oder eine Zeichenfolge definieren, dies wird jedoch vom Compiler und Linker im Hintergrund behandelt.)
Der EEPROM-Bereich kann verwendet werden, um Konfigurationsdaten oder andere Daten zu speichern, die nach einem Neustart verfügbar sein sollen, z. Funktional kann man sich das EEPROM als eine sehr kleine Festplatte oder SD-Karte vorstellen.
Auf Mikrocontrollern ohne EEPROM ist es möglich, persistente Daten im Flash-Speicher zu speichern. Dies wird jedoch schwierig, da Mikrocontroller nicht wirklich dafür entwickelt wurden und Sie einen speziellen Ort suchen müssen, der den Programmcode nicht beeinträchtigt, und diesen beiseite legen mit dem Linker. Wie weiter unten erwähnt, können Sie das EEPROM in der Regel um ein Vielfaches mehr aktualisieren als das Flash.
Wenn Sie Daten in Flash programmieren, bedeutet dies nicht, dass Sie in Ihrem C-Programm als Variablen auf die Daten zugreifen können, da Sie dem Compiler nicht mitteilen können, wo sich diese Variablen in Ihrem Code befinden (dh, Sie können keine Konstante binden variabel auf diesen Bereich des Flashs.) Das Lesen muss also über die speziellen Register erfolgen, mit denen sie geschrieben werden. Beachten Sie, dass diese Einschränkung auch für die Daten im EEPROM gilt, sodass diesbezüglich kein Vorteil besteht.
Um Flash oder EEPROM zu programmieren, muss zuerst ein Speicherblock gelöscht werden. Dann ist es programmiert. Beim Flash wird normalerweise auch blockweise geschrieben. Bei EEPROMs kann dies je nach Mikrocontroller blockweise oder byteweise erfolgen.
Sowohl für Flash- als auch für EEPROMs können Sie sie maximal so oft aktualisieren, bis der Speicher aufgebraucht ist. Diese Nummer ist im Datenblatt als garantierter Mindestwert angegeben. Sie ist bei EEPROMs normalerweise viel höher als bei Flash-Speichern. Bei Flash habe ich Zahlen von nur 1000 gesehen. Bei EEPROMs habe ich Zahlen von bis zu 1.000.000 gesehen.
Ein Vorteil von EEPROMs gegenüber Flash ist, dass Sie sie viel häufiger löschen können als Flash.
"In-System Self-Programmable" bedeutet einfach, dass der Mikrocontroller seinen eigenen Flash aktualisieren kann, während er ausgeführt wird. Diese Funktion wird normalerweise verwendet, um den Code im Feld zu aktualisieren. Der Trick besteht darin, dass Sie Code im System belassen müssen, während das Hauptprogramm aktualisiert wird, das als Bootloader bezeichnet wird. Dieses Schema wird im Arduino-System verwendet, um den Chip zu programmieren.