Warum haben die meisten nichtflüchtigen Speicher als Standardzustand eine logische 1?

Ich habe nichtflüchtigen Speicher , wie EEPROM und FLASH-Speicher, in Embedded-Anwendungen verwendet und immer festgestellt, dass ungenutzte Speicherbitstellen (EEPROM/FLASH) 1standardmäßig immer auf gesetzt sind. Warum wird dies anstelle von verwendet 0?

Zum Beispiel speichert eine Adresse, sagen wir die 0. Adresse (erstes Byte des Speichers), wenn sie nicht vom Benutzer beschrieben wird, immer 0xffund nicht 0x00. Warum haben die Leute, die die Speicherchips gebaut haben, es so beibehalten? Ich bin sicher, den Standardspeicherort beizubehalten, da 0xffdies einen Vorteil oder etwas Wichtiges für den Hersteller bieten würde.

Was ist der Grund für diese Struktur in Speicherchips?

Antworten (4)

Ich werde die Programmierung von Flash-Speichern erörtern, aber vieles wird EEPROMs (Electrically Erasable Programmable ROM) ähneln, da Flash-Speicher Mitte der 1980er Jahre von EEPROMs abgeleitet wurden. Wie unten beschrieben, ist aus physikalischer Sicht der Vorgabezustand 1. Aber was noch wichtiger ist, ich werde erklären, warum es einen Standardzustand gibt – Sie können nicht einfach willkürlich zusätzlich zu dem programmieren, was bereits beim letzten Mal programmiert wurde.

NOR-Flash wird fast immer für Programm-Flash gewählt, da die Schnittstelle am besten geeignet ist, um die Daten innerhalb der Speicherkarte des Mikrocontrollers zu platzieren – vollständige Adress- und Datenbusse ahmen RAM nach und ermöglichen wahlfreien Zugriff auf jeden Ort. Daten können Wort für Wort gelesen werden, wobei ein Wort als Datenbreite des Mikrocontrollers definiert ist, typischerweise 8, 16 oder 32 Bit. NAND-Flash hingegen wurde entwickelt, um Festplatten zu ersetzen und arbeitet sequentiell.

Die Programmierung wird jedoch etwas komplizierter. Wie bereits erwähnt, ist der Standardzustand für NOR-Flash und andere nichtflüchtige Speicher wie NAND-Flash, EEPROMs und sogar EPROMs 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, indem 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. Dies kann nur in Blöcken erfolgen, 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 kann einige Zeit dauern – einen guten Teil einer Sekunde.

Das Folgende ist ein Bild einer Flash-Speicherzelle. Flash speichert die Daten, indem Elektronen auf dem Floating Gate entfernt oder platziert werden. Wenn Elektronen am schwebenden Gate vorhanden sind, fließt kein Strom durch den Transistor, was eine 0 anzeigt. Wenn Elektronen vom schwebenden Gate entfernt werden, beginnt der Transistor zu leiten, was eine 1 anzeigt Andernfalls wären aber Wechselrichter auf allen Datenleitungen erforderlich.)

Geben Sie hier die Bildbeschreibung ein

Löschvorgang. Der Standardzustand von Flash-Speicherzellen (eine Single-Level-NOR-Flash-Zelle) ist 1, da schwebende Gates keine negativen Ladungen tragen. Das Löschen einer Flash-Speicherzelle (Rücksetzen auf 1) wird durch Anlegen einer Spannung über Source und Steuergate (Wortleitung) erreicht. Die Spannung kann im Bereich von -9 V bis -12 V liegen. Und legen Sie auch etwa 6 V an die Quelle an. Die Elektronen im Floating Gate werden abgezogen und durch Quantentunneln zur Source übertragen . Mit anderen Worten tunneln Elektronen vom schwebenden Gate zur Source und zum Substrat.

Da beim Löschen hohe Spannungen verwendet werden, erfordert das Löschen in Blöcken weniger Chipfläche. Spannungen können also nur an ganze Reihen von Transistoren gleichzeitig angelegt werden.

Zum Schreiben kann eine NOR-Flash-Zelle programmiert oder durch das folgende Verfahren auf 0 gesetzt werden. Beim Schreiben wird eine hohe Spannung von etwa 12 V an das Steuergate (Wortleitung) angelegt. Wenn an die Bitleitung (Drain-Anschluss) eine hohe Spannung von etwa 7 V angelegt wird, wird eine 0 in der Zelle gespeichert. Der Kanal ist nun eingeschaltet, sodass Elektronen von der Source zum Drain fließen können. Der Source-Drain-Strom ist ausreichend hoch, um einige hochenergetische Elektronen dazu zu bringen, durch die Isolierschicht auf das schwebende Gate zu springen, und zwar über einen Prozess, der als Heißelektroneninjektion bezeichnet wird.

Zum Lesen wird eine Spannung von etwa 5 V an das Steuergate und etwa 1 V an das Drain angelegt. Der Zustand der Speicherzelle wird durch den zwischen Drain und Source fließenden Strom unterschieden.

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.

Es ist also nicht so wichtig, ob die Designer den Standardzustand auf 1 oder 0 festgelegt haben (sie haben den Wert gewählt, der die einfachste Implementierung ermöglicht); Wichtig ist, dass man zuerst einen Flash-Block löschen muss (was einige Zeit in Anspruch nimmt) und dann den gesamten Block neu programmieren muss (selbst wenn nur ein einziges Wort geändert wird (was eine beträchtliche Menge an RAM erfordert).

Dieses Blocklöschen des Geräts geht auf die ersten EPROMs (Erasable Programmable ROM) 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).

Dies ist ein großartiger Überblick darüber, wie auf nichtflüchtige Speicher zugegriffen wird, aber es geht nicht wirklich darauf ein, WARUM der gelöschte Zustand "1" und nicht "0" ist.
@akohlsmith Ich habe diese Informationen hinzugefügt, um vollständiger zu sein. Aber das eigentliche Problem ist nicht, ob die Standardzelle eine 1 oder eine 0 ist; Dies könnte umgekehrt werden, indem einfach Inverter an jede Datenleitung angeschlossen werden. Das eigentliche Problem ist, warum es überhaupt einen Standardzustand gibt; dh Sie können eine 0 statt einer 1 schreiben - letzteres erfordert das Löschen in Blöcken.
Ich bin anderer Meinung, die Frage schien ziemlich spezifisch zu sein, warum der gelöschte Zustand "festgelegt" und nicht "klar" ist - trotzdem liebe ich Ihre Antwort und +1 von mir (nicht, dass ich irgendjemand wäre, nur ein zufälliger Internet-Fremder, der mag Ihre Antwort)
@akohlsmith Ich stimme Ihnen zu, dass festgelegte Zustände per Konvention normalerweise 1 sind, und tatsächlich funktionieren die einzelnen Zellen so. Es würde etwas zusätzliche Hardware (nicht viel) erfordern, um es umzukehren, und es war nicht nötig, dies zu tun: 1 als Standard war in Ordnung.
Dies ist eine großartige Antwort. Aber ich denke, es ist einfacher zu verstehen, wenn Sie sagen: Sie können keine Einsen in diese Geräte programmieren, Sie können nur Nullen programmieren. Wenn Sie 1er programmieren möchten, müssen Sie die Geräte löschen und den gesamten Block auf den Standardzustand 1 zurücksetzen und dann nach Bedarf 0er programmieren. . Um zum Beispiel auf zu programmieren 0101, 1010müssen Sie in dieser Reihenfolge vorgehen: 0101->(Löschen)-> 1111->(0er programmieren)-> 1010. Oder im Wesentlichen bedeutet dies, dass das Schreiben von 1 und das Schreiben von 0 mit unterschiedlicher Granularität erfolgen .

In modernen Flash-Speichern kenne ich keinen Grund, Einsen über Nullen als Standard zu wählen. Das Lesen erfolgt über Differenzstrom-Leseverstärker, sodass Sie im Prinzip den Ausgang von beiden Seiten nehmen können. (Die ersten EEPROMs hatten möglicherweise einfachere Leseschaltungen - ich bin mir nicht sicher.)

Es gibt einen guten Grund, keine zusätzlichen Inverter hinzuzufügen – dies würde die Ausbreitungsverzögerung vom Speicher zur CPU erhöhen. Bei Mikrocontrollern hat der Flash-to-CPU-Datenpfad einen enormen Einfluss auf die Gesamtsystemleistung, da er bestimmt, wie lange es dauert, neue Befehle abzurufen.

Designer digitaler Schaltungen erwarten oft, dass Null löschen/zurücksetzen/löschen bedeutet. Aber Flash-Transistoren und Leseschaltkreise sind analog. Unter diesem Gesichtspunkt ist es sinnvoller, den leitenden Zustand des Flash-Transistors als logische Eins zu beschreiben. Und es passiert einfach so, dass der Wechsel von einer Eins zu einer Null viel, viel schneller ist als der Wechsel von einer Null zu einer Eins, also wird Eins zum "gelöschten" Zustand, während Null zum "programmierten" Zustand wird.

Kurzfassung: Halbleiterphysiker und Designer analoger Schaltungen kümmern sich nicht um Ihre digitalen Intuitionen. :-)

Ich bin mir nicht sicher, woraus Sie zitieren, aber wenn Sie die Wikipedia-Seite für Flash-Speicher verlassen, scheint dies ein Ergebnis der Hardware hinter dem Flash-Speicher zu sein:

Eine Single-Level-NOR-Flash-Zelle in ihrem Standardzustand ist logisch äquivalent zu einem binären "1"-Wert, da Strom durch den Kanal fließt, wenn eine geeignete Spannung an das Steuergate angelegt wird, so dass die Bitleitungsspannung heruntergezogen wird."

Wenn Sie einen anderen Flash-Typ verwenden würden, z. B. NAND, wäre der Standardzustand 1, da der Ausgang von NAND 1 ist, wenn der Ausgang eines der Transistoren unter seiner hohen/niedrigen Schwellenspannung liegt.

Entschuldigung, wenn ich den Anschluss an Ihre Frage völlig verpasst habe, ich bin auch ziemlich neu in all dem.

Aber angesichts der Tatsache, dass zwischen den Zellen und den Pins eine Schaltung vorhanden ist, die wie die meisten Logikkonstrukte wahrscheinlich von Natur aus eine Reihe von impliziten Inversionen durchführt, warum wird der gelöschte Zustand notwendigerweise als "0" und nicht als "1" verwendet?
Ich verstehe Ihre Frage nicht ganz - wird der ERASE-Status nicht als "1" verwendet? Ich frage diesbezüglich (unter "BETRIEB UND EIGENSCHAFTEN DER EEPROM-SPEICHERZELLE").
Welcher elektrische Zustand der Zelle selbst welchem ​​logischen Zustand der externen Schnittstelle entspricht, erscheint nahezu willkürlich, da es mehrere, wahrscheinlich implizit invertierende Schaltungselemente zwischen den beiden gibt.
@ChrisStratton Ich glaube, Ilee94 sagte, der gelöschte Zustand sei tatsächlich eine 1. Aber es ist eigentlich willkürlich - wenn Sie Wechselrichter an die Datenleitungen anschließen, wäre es so, wie Sie es beschrieben haben. 1 als Grundzustand erfordert einfach etwas weniger Hardware.
Oder etwas mehr Hardware - es hängt wirklich davon ab, ob zwischen der Zelle und dem Ausgang eine ungerade oder gerade Anzahl von implizit invertierenden Schaltungselementen vorhanden ist.

Die ROMs und PROMs von damals mussten manipuliert werden, indem während der Herstellung Metall in die Maskenschicht hinzugefügt oder beim Programmieren weggebrannt wurde, und beide Prozesse hatten bei der Herstellung einen standardmäßig hohen Zustand. Sie standardmäßig auf LOW zu setzen, hätte mehr Transistoren gekostet, den Programmierkomfort oder die Betriebsgeschwindigkeit in gewisser Weise verringert.

Es ist inzwischen zur Konvention geworden, weil es heutzutage möglich wäre, an irgendeiner Stelle im Datenpfad einen Wechselrichter hinzuzufügen.

Die Konvention hat möglicherweise in den Tagen von Diodenlogik-Speicherarrays begonnen, die Dioden hatten, um Datenleitungen herunterzuziehen, wenn sie adressiert wurden, und unbenutzte Speicherwörter hatten keine Dioden anstelle aller Dioden. Die meisten frühen digitalen Logikstandards wurden aktiv auf LOW gezogen und hoch geschwebt, wenn dies nicht der Fall war.