Ist die Programmzeit bei NAND- oder NOR-Flash vollständig unabhängig von Bytewerten?

Ich weiß, dass der Löschwert von NAND- und NOR-Zellen alle 1 ist und der Programmierprozess das Löschen von Bits beinhaltet. Ist die Programmzeit einiger Daten der Länge x immer gleich, unabhängig von der Anzahl der Nullen in diesen Daten? Braucht es zum Beispiel weniger Zeit, 11110000 zu programmieren, als 00000000 zu programmieren?

Antworten (1)

Kurze Antwort :

Es kann eine datenabhängige Dauer geben, insbesondere bei Geräten, die bereits viele Male programmiert und gelöscht wurden.

Keine so kurze Antwort:

Normalerweise erfolgt die Programmierung nicht mit einem einzigen Impuls 1 . Die Anzahl der Impulse hängt davon ab, "wie schnell" die richtigen Daten erreicht werden.

Tatsächlich verfügt der Flash-Chip über eine interne Zustandsmaschine, die überprüft, ob die Zellen mit den richtigen Werten programmiert wurden. Wenn es ein Bit gibt, das nicht auf 0 programmiert wurde, wird ein neuer Impuls erzeugt. Dies wird "einige" Male wiederholt.

Dies ist erforderlich, da neben der Zell-zu-Zell-Dispersion bei vielen Programmier-Löschzyklen eine kleine Ladungsmenge eingefangen wird, insbesondere in der Siliziumnitridschicht, die den ONO-(Oxid-Nitrid-Oxid)-Stapel des Interpoly bildet Dielektrikum, das zwischen dem schwebenden Gate und dem Steuergate liegt. Außerdem können Defekte in den Dielektrika erzeugt werden, was die Retentionszeit verringert. Auch im NAND-Flash müssen fehlerhafte Blöcke identifiziert werden, damit das Gerät weiterhin verwendet werden kann, ohne die Chipfunktionalität zu beeinträchtigen.

Floating-Gate-Speicherzelle

Wenn Sie also mit einem Byte bei 0b1111111 (gelöscht) beginnen und ein 0b00001111 programmieren möchten, muss der Chip überprüfen, ob alle 4 programmierten (gelöschten) Bits im richtigen Bereich liegen. Dies wird parallel durchgeführt, aber es können zusätzliche Impulse an jene Bits gegeben werden, die nicht als "0" gekennzeichnet sind. Natürlich gibt es eine maximale Impulszahl, und wenn die Bits immer noch nicht den korrekten Wert haben, wird typischerweise ein Fehler signalisiert.

Der zeitlich ungünstigste Fall ist, wenn Sie eine 0b00000000 programmieren, da die Wahrscheinlichkeit, dass ein Bit nach dem ersten Impuls nicht auf „0“ steht, größer ist.

Wenn Sie ein 0b11111111 programmieren, gibt es überhaupt keinen Impuls 2 , da die Bits nach dem Löschen bereits diesen Wert haben sollten.

Schließlich wird das Löschen blockweise durchgeführt, aber der intelligente Algorithmus stellt sicher, dass alle Zellen den gleichen "1"-Wert haben. Dies ist nicht trivial, da ein Überlöschen im NOR-Flash schädlich ist: Wenn die Schwellenspannung einer Zelle zu niedrig wird, bleiben Sie bei 1 Bitleitung hängen.


ANMERKUNGEN:

1 Die Programmiermethoden könnten Fowler-Nordheim-Tunneling in NAND-Flash oder Channel Hot Carrier Injection in NOR-Flash sein. Daher kann der Impuls am Gate oder sowohl am Gate als auch am Drain sein. Selbst bei CHC wird dies jedoch als einzelner Programmierimpuls betrachtet (es geschieht "fast gleichzeitig").

2 Tatsächlich könnte die Zustandsmaschine den ersten Impuls erzeugen, aber sie wird mit der Maske ~0b11111111 gesteuert, sodass die Zellen den Impuls nicht empfangen. Die Zustandsmaschine erkennt dann, dass alle Bits bereits den richtigen Wert haben (sie wurden gelöscht und bleiben gelöscht), sodass keine weiteren Impulse erzeugt werden.

Folgefrage: Wie groß darf die kumulierte Differenz sein? Kann es 1 Mikrosekunde sein? 10? Etwas anderes?
Es steht auf dem Datenblatt unter "Single-Byte/Single-Word-Programm" in den Programmier-/Löscheigenschaften. Beim MT28EW128 beträgt die typische Programmzeit beispielsweise 25 us, das Maximum 250 us. Ich denke, der Unterschied (zwischen dem Programmieren von allen 1 - dh nicht programmieren - oder allen 0) wird deutlicher sein, wenn die Anzahl der Programmier- / Löschzyklen groß ist.