Flash und EEPROM

Atmega16 Datenblatt sagt, dass es hat

a) 16 KByte selbstprogrammierbarer In-System-Flash-Programmspeicher und b) 512 Byte EEPROM.

Kann ein Mikrocontroller zwei getrennte ROMs haben, die durch EEPROM-Technologie und Flash-Technologie programmiert werden können?

Oder ist meine Schlussfolgerung (wie oben angegeben) aus dem Datenblatt falsch?

Ich weiß, dass unser Programm im Flash-Speicher gespeichert ist, warum braucht dann jemand EEPROM? Was nützt es, wenn wir Flash-Speicher für das Programm haben?

Kann jemand auch erklären, was der Begriff "In-System Self-Programmable" ist?

Was ich weiß: Flash-Technologie kann das Programm in Datenblöcken schreiben, während EEPROM Daten Byte für Byte schreiben kann.

Antworten (2)

Heutzutage wird Flash-Speicher verwendet, um Programmcode zu speichern, und EEPROM (Electrically Erasable Read-only Memory) wird verwendet, um dauerhafte Daten zu speichern. Vor etwa 30 Jahren, bevor Flash auf den Markt kam, wurden EEPROMs verwendet, um Programmcode zu speichern.

Eigentlich kam zuerst ROM (Read-Only Memory), dann PROM (Programmable ROM, once only), EPROM (PROM Erasable with UV light), EEPROM und schließlich Flash. ROMs werden immer noch für Anwendungen mit sehr hohem Volumen und niedrigen Kosten verwendet (z. B. sprechende Grußkarten).

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 im Flash zu speichern. (Daten werden in Flash gespeichert, wenn Sie beispielsweise das Schlüsselwort „const“ in einer Datendeklaration verwenden oder eine Zeichenfolge definieren, aber das wird im Hintergrund vom Compiler und Linker behandelt.)

Der EEPROM-Bereich kann verwendet werden, um Konfigurations- oder andere Daten zu speichern, die über Neustarts hinweg verfügbar sein sollen, einschließlich wenn der Mikrocontroller die Stromversorgung verloren hat und dann wieder eingeschaltet wird. Funktional kann man sich das EEPROM als sehr kleine Festplatte oder SD-Karte vorstellen.

Auf Mikrocontrollern ohne EEPROM ist es möglich, persistente Daten im Flash-Speicher zu speichern, aber dies wird schwierig, da Mikrocontroller nicht wirklich dafür ausgelegt sind und Sie eine spezielle Stelle finden müssen, die den Programmcode nicht stört, und diese beiseite legen mit dem linker. Außerdem können Sie, wie unten erwähnt, das EEPROM normalerweise um ein Vielfaches mehr aktualisieren als den Flash.

Wenn Sie Daten in Flash programmieren, bedeutet dies nicht, dass Sie auf die Daten als Variablen in Ihrem C-Programm zugreifen können, da es keine Möglichkeit gibt, dem Compiler mitzuteilen, wo sich diese Variablen in Ihrem Code befinden (dh Sie können keine const Variable in diesen Bereich des Flash.) Sie müssen also über den speziellen Satz von Registern gelesen werden, die zum Schreiben verwendet werden. Beachten Sie, dass diese Einschränkung auch für die Daten im EEPROM gilt und in dieser Hinsicht keinen Vorteil hat.

Um entweder Flash oder EEPROM zu programmieren, muss zuerst ein Speicherblock gelöscht werden. Dann wird programmiert. Bei Flash wird normalerweise auch blockweise geschrieben. Bei EEPROMs kann dies je nach Mikrocontroller block- oder byteweise erfolgen.

Sowohl für Flash- als auch für EEPROMs gibt es eine maximale Anzahl von Aktualisierungen, bevor der Speicher erschöpft ist. Diese Zahl ist im Datenblatt als garantierter Mindestwert angegeben. Sie ist bei EEPROMs in der Regel viel höher als bei Flash-Speichern. Bei Flash habe ich Zahlen von bis zu 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 öfter löschen können als Flash.

"In-System selbstprogrammierbar" bedeutet einfach, dass der Mikrocontroller seinen eigenen Flash aktualisieren kann, während er läuft. Die Funktion wird normalerweise verwendet, um Code im Feld zu aktualisieren. Der Trick besteht darin, dass Sie etwas 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.

Vielen Dank für Ihre Antwort. Um also Daten in das EEPROM einzugeben, benötige ich einen EEPROM-Programmierer wie in einem USBASP-Programmierer, um das Programm im Flash-Speicher abzulegen? Habe ich Recht, Sir.
@Jasser Nein, du brauchst keinen externen Programmierer. Sie greifen von Ihrem Programm aus auf das EEPROM zu. Es wird eine Reihe von Registern im ATmega geben, die es Ihnen ermöglichen, das EEPROM zu aktualisieren, indem Sie darauf schreiben. Sie müssen diese Register auch verwenden, um aus dem EEPROM auszulesen, da es nicht in der normalen Adresskarte erscheint. Die Informationen zum Löschen, Schreiben und Lesen des EEPROM finden Sie im Datenblatt des Chips.
Da wir aus dem EEPROM im Mikrocontroller schreiben oder lesen können, sollte der Mikrocontroller eine Schaltung haben, um Daten im EEPROM zu speichern, und das sollte dem EEPROM-Programmierer ähnlich sein. Dies führt mich wiederum zu einer anderen Frage, da das EEPROM ungefähr 100.000 Mal geschrieben werden kann und wir danach möglicherweise keine Daten im EEPROM über die Register speichern können. Sind diese Aussagen sinnvoll? @tcrosley
@Jasser Richtig, die Anzahl der Aktualisierungen des EEPROM ist begrenzt. Dies ist in der Regel viel höher (manchmal eine Größenordnung mehr) als die Anzahl der Male, die Sie den Flash aktualisieren können. Ich hätte das in meiner Antwort erwähnen sollen und werde es aktualisieren. Die von Ihnen angegebene Anzahl ist ein vom Chiphersteller garantiertes Minimum; Ich habe einmal einige Tests mit einem Chip durchgeführt, der für 100.000 Schreibvorgänge ausgelegt war, und es ging weit über 500.000, bevor Fehler erkannt wurden.
Auch wenn wir das Programm im Flash-Speicher speichern, wird das umständlich, weil es den Hauptprogrammcode enthält und auch die Daten als Blöcke mit Flash genommen werden, so dass das Abrufen von Daten aus dem Flash schwieriger werden könnte, vergleichbar mit einem separaten Platz, der vollständig zugewiesen ist für Daten dh das EEPROM. Aus diesem Grund werden keine Daten im Flash-Speicher gespeichert. Ist das richtig, Herr?
@Jasser Ja, es ist etwas schwieriger, die Daten im Flash einzurichten. Wie in meinem Update zu meiner Antwort besprochen, können Sie das EEPROM auch viel öfter (normalerweise 10x) als den Flash löschen und neu programmieren.
Vielen Dank für Ihre wertvolle Zeit, mein Herr. Hoffentlich sehen wir uns wieder @tcrosley.
Die Aussage The important difference is that you cannot execute code out of EEPROMist falsch. Module, die Code enthalten, der an Ort und Stelle ausgeführt wird und den ersten Code speichert, der beim Zurücksetzen ausgeführt wird (z. B. BIOS, Boot-Monitor usw.), werden häufig als EEPROM bezeichnet. EEPROM wurde nach Masken-ROM, PROM und EPROM entwickelt, um solchen Code zu speichern.
@Melab Ich bezog mich auf moderne Mikrocontroller, die Flash für ihre Programmspeicherung verwenden und nur eine kleine Menge EEPROM für Daten zur Verfügung haben. Ja, mir ist bewusst, dass frühe Mikroprozessoren EEPROMs zur Programmspeicherung verwendeten, bevor Flash populär wurde, gefolgt von UV-löschbaren EPROMs. Ich habe in den 1980er Jahren viele Jahre mit beiden gearbeitet. Ich werde vielleicht richtig antworten.

Ich werde der hervorragenden Antwort von @tcrosley weitere Informationen hinzufügen.

Der ATmega16 implementiert eine Harvard-Architektur , dh eine Systemtopologie, bei der der Datenspeicher vom Programmspeicher getrennt ist. Zitieren des entsprechenden Absatzes aus dem Atmega16-Datenblatt (Seite 8):

Um Leistung und Parallelität zu maximieren, verwendet der AVR eine Harvard-Architektur – mit getrennten Speichern und Bussen für Programm und Daten. Anweisungen im Programmspeicher werden mit einer einstufigen Pipelineverarbeitung ausgeführt. Während eine Anweisung ausgeführt wird, wird die nächste Anweisung vorab aus dem Programmspeicher geholt. Dieses Konzept ermöglicht die Ausführung von Anweisungen in jedem Taktzyklus. Der Programmspeicher ist ein im System reprogrammierbarer Flash-Speicher.

Die Harvard-Architektur hat den Vorteil, dass es keine Buskonkurrenz zwischen Befehlsabrufzyklen und Datenzugriffszyklen gibt, da Daten und Befehle nicht denselben Bus teilen, wie in Ihrer herkömmlichen PC-Architektur.

Daher wird der Flash-Speicher als Programmspeicher verwendet, während der Datenspeicher zwischen SRAM (für transiente Daten, wie Funktionsaufrufstapel und Heap - wenn Sie beispielsweise in C programmieren) und dem EEPROM (für dauerhafte Speicherung) aufgeteilt ist. .