Ich habe nichtflüchtigen Speicher , wie EEPROM und FLASH-Speicher, in Embedded-Anwendungen verwendet und immer festgestellt, dass ungenutzte Speicherbitstellen (EEPROM/FLASH) 1
standardmäß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 0xff
und nicht 0x00
. Warum haben die Leute, die die Speicherchips gebaut haben, es so beibehalten? Ich bin sicher, den Standardspeicherort beizubehalten, da 0xff
dies einen Vorteil oder etwas Wichtiges für den Hersteller bieten würde.
Was ist der Grund für diese Struktur in Speicherchips?
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.)
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).
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.
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.
Kohlschmied
trosley
Kohlschmied
trosley
smwikipedia
0101
,1010
mü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 .