Ist Flash-Speicher in MCUs einer Festplatte ähnlich?

Ich habe in der Vergangenheit einen Computerarchitekturkurs belegt, der sich auf Desktop-CPUs konzentriert, und ich arbeite derzeit mit eingebetteten Systemen, und ich bin etwas verwirrt darüber, welcher Speicher was entspricht.

Ich versuche, in meinem Kopf ein analoges Bild der Desktop-CPUs zu erstellen, und ich kann nichts finden, von dem ich wirklich überzeugt bin.

Zum Beispiel haben sowohl Mikroprozessoren als auch MCUs RAM-Speicher, was in Ordnung ist. Nach meinem Verständnis ist dies der unmittelbare Speicher, auf den die CPU zugreifen kann. Sie könnten natürlich virtuelle Adressen verwenden und Zugriff auf alle Daten haben, aber tatsächlich müssten Sie sie zuerst in den Cache und in den Speicher verschieben, damit sie für den Zugriff zugänglich sind ZENTRALPROZESSOR.

Bedeutet dies dann, dass der Flash-Speicher in einer MCU der Festplatte eines Computers ähnelt?

Und wenn ja, welche Rolle spielt ein EEPROM?

Vielen Dank für Ihre Hilfe.

Antworten (4)

Es gibt zwei Arten von Flash-Speichern: NOR-Flash und NAND-Flash. NOR-Flash verfügt wie normales RAM über eine parallele Schnittstelle für Adresse und Daten und wird typischerweise als Teil des Speicherplatzes des Mikrocontrollers verwendet.

Sie können also typischerweise Code aus NOR-Flash heraus ausführen. NOR-Flash ist normalerweise im Mikrocontroller-Chip enthalten, und tatsächlich speichern so praktisch alle Mikrocontroller ihren Code; oder es kann extern sein und den Speicherplatz des Mikrocontrollers erweitern. Dies erfordert jedoch einen externen Adress- und Datenbus, der viele zusätzliche Pins auf dem Mikrocontroller benötigt – oft ersetzt er Pins, die für I/O-Ports verwendet werden.

NAND-Flash hingegen befindet sich fast immer außerhalb des Mikrocontrollers und ähnelt eher einem Flash-Laufwerk, das Sie an einen USB-Anschluss eines PCs oder Laptops anschließen würden (obwohl dies der Fall wäre, wenn NAND-Flash direkt an den Mikrocontroller angeschlossen wäre). keine Notwendigkeit für die USB-Schnittstelle).

Das Wichtigste an beiden Arten von Flash-Speichern ist, dass das Lesen viel schneller ist als das Schreiben. Sie können es also nicht als Erweiterung des Arbeitsspeichers verwenden. Das Lesen erfolgt einfach durch direkten Zugriff auf den Speicher. Daten können Wort für Wort gelesen werden, wobei ein Wort als Datenbreite des Mikrocontrollers definiert ist, typischerweise 8, 16 oder 32 Bit.

Die Programmierung wird jedoch etwas komplizierter. Der Standardzustand für NOR-Flash und andere nichtflüchtige Speicher wie NAND-Flash, EEPROMs (Electrically Erasable Programmable ROM) und sogar EPROMs (Erasable Programmable ROM) ist eine logische 1. Sie können keine 1 in diese Geräte programmieren, Sie können nur 0 programmieren . Wenn Sie also beispielsweise ein Byte haben, das 0x0123 enthält, und Sie es in 0x3210 ändern möchten, können Sie dies nicht direkt tun, als würden Sie ein Byte im RAM überschreiben.

Stattdessen müssen Bits im Speicher gelöscht werden, was sie in den bereits erwähnten Standardzustand 1 versetzt. Das geht nur in Blöcken, nicht in Worten. Auf dem Microchip PIC32, mit dem ich in letzter Zeit am meisten gearbeitet habe, beträgt die minimale Blockgröße, die gelöscht werden kann, 4096 Bytes. Wenn Sie also nur ein Wort (32 Bit) ändern wollten, müssten Sie die 4 KB des Speichers lesen, den Block löschen und dann die 4 KB des Speichers zurück in den Flash schreiben, aber den neuen 32-Bit-Wert nach Bedarf enthalten.

Dieses Löschen nimmt viel Zeit in Anspruch – einige Dutzend oder sogar Hunderte von Millisekunden. Daher ist es nicht für Lese-/Schreibspeicher wie RAM verwendbar. Das Löschen schreibt Einsen in alle Bits im Block. Nachdem der Block gelöscht wurde, kann darauf geschrieben werden. Beim Schreiben können nur Nullen in den Flash geschrieben werden, Einsen werden ignoriert, da der Block bereits auf Einsen gelöscht wurde. Ein Bit wurde zu 0 geändert, Sie können es nicht zurück zu 1 ändern, ohne den Löschvorgang durchzuführen.

Die meisten Mikrocontroller verwenden einen sogenannten Programmierer, um den Code zunächst in den Chip zu programmieren. Sobald es programmiert ist, ist es bereit, Code auszuführen. Die meisten Programme ändern den Inhalt des für Code verwendeten Flash-Speichers nicht, obwohl dies normalerweise möglich ist.

Dieses Blocklöschen des Geräts geht auf die ersten EPROMs zurück, die aus EEPROMs hervorgingen. Der Code wurde in Chips (wie der 16KB 27128) programmiert und in Sockel gesteckt. Diese Chips hatten oben ein kleines Fenster, durch das Licht auf den Chip scheinen konnte. Wenn das Programm geändert werden musste, wurden die Chips für etwa 20 Minuten in einen UV-Löscher gelegt, der den gesamten Chip löschte. Dann würde der Chip mit dem neuen Programm programmiert werden.

Einige EEPROMs erfordern das Löschen von Speicherblöcken vor dem Programmieren; andere erlauben das Schreiben eines Bytes auf einmal (der EEPROM-Controller löscht tatsächlich das Byte zuerst und programmiert es).

Die nutzbare Lebensdauer eines nichtflüchtigen Speichers wird in Löschzyklen gemessen. Der Nachteil von NOR ist, dass die Anzahl der Löschzyklen etwa 1/10 der des NAND-Speichers beträgt. Bei vielen Versionen des PIC32 kann der Flash-Speicher nur 1000 Mal aktualisiert werden, viel weniger als die typischen 100.000 Löschzyklen für EEPROMs oder NAND.

Flash ist wie eine Festplatte, weil:

  • Es ist nicht flüchtig, was bedeutet, dass es seinen Inhalt behält, während die Stromversorgung unterbrochen wird.
  • Dort wird das ausführbare Programm gespeichert.
  • Es kann gelöscht und neu programmiert werden.

Flash ist nicht wie eine Festplatte, weil:

  • Die Mikrocontroller-CPU hat typischerweise eine parallele Schnittstelle zum Flash und kann sie wie RAM ansprechen.
  • Die Mikrocontroller-CPU kann typischerweise Code direkt aus dem Flash ausführen, ohne ihn zuerst in den RAM zu laden.
  • Ein Dateisystem wird normalerweise nicht in Flash implementiert (obwohl manchmal ein Dateisystem in Flash implementiert wird ).

Das BIOS-ROM des PCs ist wahrscheinlich eher eine bessere Analogie für den Flash eines Mikrocontrollers als das Festplattenlaufwerk.

EEPROMs sind ebenso wie Flash nichtflüchtig. Heutzutage verwenden Mikrocontroller typischerweise Flash-Speicher zur Programmspeicherung. Auf EEPROMs wird typischerweise seriell zugegriffen, sie sind typischerweise kleiner als Flash und werden oft verwendet, um Konfigurationseinstellungen und dergleichen zu speichern. (Ich sage „normalerweise“, weil dies keine absoluten Regeln sind.)

Es ist ein bisschen lästig, einen eingebetteten Controller wie eine MCU mit einem vollständigen und vollständigen Computer oder sogar nur der Hauptplatine zu vergleichen.

In mancher Hinsicht kann man sagen, dass sich Flash ein bisschen wie eine Festplatte verhält und dass sich RAM wie RAM verhält und dass Register als eine Art Daten-Cache angesehen werden können, aber es gibt einige sehr wichtige Unterschiede.

Beispielsweise haben viele MCUs ein sehr eingeschränktes Startverhalten, das die Ausführung von Befehlen einfach am Anfang des internen Flash-Speichers beginnt. Wenn das allererste Byte zufällige Daten in einer Excel-Datei sind, wäre das schlecht. Einige MCUs können auch in den Flash schreiben, andere nicht. In vielen Designs wird das Flash als echtes ROM verwendet, Sie können es oft programmieren, aber der normale Anwendungscode kann oder will nicht (ein Firmware-Updater würde das natürlich tun, aber das ist ein spezieller Anwendungsfall).In einem PC ist nicht einmal der Prozessor das erste, was zu arbeiten beginnt, sondern das BIOS. Das BIOS ist eine Art MCU, das nach einer Festplatte (oder einem anderen Gerät) sucht, dann nach einem bootfähigen Laufwerk auf dieser Festplatte sucht und dann der CPU mitteilt, von dort aus zu arbeiten. Und führt heutzutage auch eine Menge anderer Funktionen auf Motherboards aus. Danke an brhans: Die CPU fängt zwar sofort an zu arbeiten, lädt aber ihre anfängliche Operation, oder zumindest in den meisten Fällen, aus dem BIOS (E(E))PROM, um selbst herauszufinden, wo sie Sachen im System finden kann. Es sucht dann ein echtes bootfähiges Medium und lädt das Betriebssystem von dort. B. USB-Stick, Festplatte oder CD-ROM.

Abgesehen davon, dass Ihre MCU sehr wahrscheinlich eine sehr enge Beziehung zu ihrem internen RAM hat, können Sie im Grunde jedes Byte nach Herzenslust lesen und schreiben (einschließlich der , während die meisten, wenn nicht alle Computer Ausschlusszonen haben würden (verwaltet vom Speicher Controller) oder sogar vollständigen Schutz, wenn Sie ein spezielles Recht benötigen (z. B. das aktuell ausgeführte Betriebssystem), um direkt auf den Speicher zuzugreifen.

Die meisten MCUs haben keinen Befehls-Cache, sie laden nur die Befehle einzeln aus dem Flash und fahren mit dem nächsten Byte/Wort fort, indem sie einfach den Programmzähler erhöhen, aus dem eine CPU einen Teil des Programms (oder manchmal alles) laden würde die Festplatte in den RAM, um schneller darauf zugreifen zu können, und um dann wirklich schnell darauf zugreifen zu können, würden kleinere Bits aus dem RAM in Blöcken in den Befehls-Cache geladen. Wenn ein Computer seine CPU-Anweisungen direkt von der Festplatte laden würde, hätten wir wahrscheinlich erst bei der Einführung von Solid State Drives damit begonnen, irgendein Betriebssystem vom Typ "Windows 95" zu verwenden, weil wir ein solches vollgrafisches Betriebssystem ausführen und immer noch etwas anderes tun von einer ATA133-Festplatte wäre, gelinde gesagt, eine Herausforderung. Ganz zu schweigen von langsameren Typen.

In MCUs kann das EEPROM als dedizierter Datenspeicher angesehen werden. Während in einem PC die Flash- und EEPROM-Funktionen beide von der Festplatte gehostet werden und sowohl Daten als auch Programme speichern, wird in vielen eingebetteten Systemen der Flash (wie bereits erwähnt) nur zum Speichern des Programms und der festen Zahlen verwendet, die die MCU nicht verwendet ändern, sondern nur verwenden oder nachschlagen, während die variablen Daten im EEPROM gespeichert werden.

Natürlich ist das eine Verallgemeinerung, es gibt viele Beispiele, wo einige Daten im Programm-Flash gespeichert sind und trotzdem regelmäßig vom normalen Programm geändert werden, aber in den meisten Fällen ist das keine ganz gute Idee. (Die Schreiblebensdauer von Flash ist beispielsweise geringer als die von EEPROM).

Es gibt zweifellos noch viele weitere Beispiele für Unterschiede, die mir nicht sofort in den Sinn kommen, und möglicherweise habe ich dabei ein paar kleine Fehler gemacht, aber ich hoffe, dass zumindest ein bisschen mehr Klarheit über einige der größeren Unterschiede besteht. Es gibt einige Ähnlichkeiten, aber sie sind mit Sicherheit nicht gleich.

Ähm - soweit mir bekannt ist, ist das BIOS auf einem PC-Motherboard ein (E) EPROM, kein MCU (und die BIOS, die ich in der Vergangenheit neu geflasht habe, waren sicherlich in den 27Cxxx- und ähnlichen Familien). Der Prozessor beginnt seine Ausführung in dem Speicherplatz, in den dieser EEPROM durch die Standardeinstellungen der Memory-Management-Unit im Chipsatz abgebildet wird. An einem BIOS ist keine unabhängige MCU beteiligt.
@brhans Sehen Sie, ich wusste, dass ich Fehler gemacht habe :-) Danke, dass Sie sich eingemischt haben.

TL:DR; Würde sagen, der Flash ist eher die SSD als eine HDD.

Zunächst einmal: Weder Flash noch Eeprom haben bewegliche Teile im Inneren, es gibt also keine Festplatte (HDD), sondern eher eine SSD.

Zurück zum Thema: Der Flash ist außerdem die primäre SSD in Ihrem System, das Boot-Gerät. Denn der Blitz ist der für dessen Steuerung zuständige Teil der MCU, mit dem man z.B. Dinge anzeigen, wie auf einem PC.

Aber mit einem Unterschied: Der Flash kann sich (soweit ich weiß) nicht selbst ändern. Während Sie auf einem PC Daten auch auf Ihrem primären Speichergerät speichern können.

Dafür kommt das EEPROM: Man könnte sagen, es ist entweder der wiederbeschreibbare Teil Ihres normalen Speichergeräts oder Ihres sekundären Geräts.