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.
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.
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. .
Jasser
trosley
Jasser
trosley
Jasser
trosley
Jasser
Melab
The important difference is that you cannot execute code out of EEPROM
ist 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.trosley