NAND Flash - Von der NAND-Zelle zur Solid State Disk
Ausgeklügeltes Management macht aus Flash-Zellen zuverlässige Solid-State-Disks
Festplatten mit rotierenden, magnetisierbaren Scheiben und servopositionierbaren Schreib-/Leseköpfen sind in Sachen Speicherdichte und Preis kaum zu schlagen und die Entwicklung geht kontinuierlich weiter. Die elektromechanische Natur dieser Hard-Disk-Drives (HDDs) aber ist auch ihre größte Schwäche – Erschütterungen, Vibrationen oder starke Temperaturschwankungen können zu temporären oder dauerhaften Schäden einschließlich schmerzhafter Datenverluste führen. Besonders anspruchsvolle Anwendungen also, beispielsweise im Bereich Avionik, Militär oder Medizintechnik, brauchen andere Technologien, Festkörperspeicher etwa in Form von Flash-Anordnungen mit geeigneten Controllern und verpackt in handelsüblichen Formfaktoren und Schnittstellen.
Die NAND-Flash-Technologie
„Flash“ bezeichnet einen nicht-flüchtigen Festkörperspeicher, Daten gehen also nach dem Abschalten der Versorgungsspannung nicht verloren. NAND und NOR sind dabei 2 fundamentale Architekturen, die in elektronischen Systemen eingesetzt werden. Beide Typen wurden bereits 1984 erfunden und 1989 durch die Firmen Toshiba und Samsung kommerziell eingeführt.
NAND-Flash bietet wesentlich schnellere Lösch- und Schreibzeiten als NOR-Flash (bis zu Faktor 10) und auch die deutlich höhere Standzeit. Zudem sind die benötigten Chipflächen kleiner, d.h. die Speicherdichte höher und damit weisen sie geringere Kosten per Bit auf. NAND-Flash wird auf Block-Basis angesprochen und kann daher das teurere NOR-Flash nicht vollständig ersetzen, das einen beliebigen Byte-Zugriff erlaubt. So lässt sich ausschließlich mit NOR-Flash das Execute-In-Place (XIP) realisieren, d.h. ein Mikroprozessor kann damit Programmcode direkt im Flash ausführen ohne erst den Code in seinen Arbeitsspeicher zu laden. Allerdings brauchen NOR-Speicher auch zusätzliche Chipressourcen, um diesen wahlfreien Zugriff zu ermöglichen.
Der Zugriff auf Flash-Speicher ist recht ähnlich im Vergleich zu dem anderer blockorientierter Speichermedien wie etwa Festplatten oder optischen Medien und daher eignen sie sich auch sehr gut für Massenspeicher wie Speicherkarten, Solid State Disks (SSDs) und USB-Sticks.
Derzeit gibt es 2 unterschiedliche NAND-Flash-Technologien, nämlich SLC (Single-Level Cell) und MLC (Multi-Level Cell) für unterschiedliche Anwendungsbereiche.
Die NAND-Flash Zelle
Die NAND-Flash Speicherzelle ist im wesentlichen ein Floating-Gate-Transistor mit der im Gate gespeicherten Ladung als Maß für eine logische „1“ oder „0“. Die Technologie verwendet Tunnel-Injektion zum Schreiben/Programmieren und Tunnel-Freigabe zum Löschen einer Zelle:
- Das Schreiben führt zur Kumulation negativer Ladungsträger im Floating-Gate und damit zu einer logischen „0“ der Zelle.
- Löschen der Zelle wiederum entfernt die negativen Ladungsträger und führt entsprechend zu einer logischen „1“.
Um den Speicherinhalt einer Zelle von „0“ auf „1“ zu setzen, muss die Zelle also gelöscht werden. Das allerdings funktioniert nicht auf individueller Ebene, denn aufgrund der NAND-Architektur mit gemeinsamen Bit-Steuerleitungen über mehrere Speichertransistoren können nur gesamte Blöcke gelöscht werden.
Die NAND-Flash Architektur
NAND-Flash speichert die Informationen in einer Anordnung von Floating-Gate-Transistoren vulgo Speicherzellen, kombiniert zu Bit- und Wort-Zeilen. Von dieser seriellen Zellenarchitektur leitet sich auch der Begriff NAND ab: NAND, also Not AND ist die bool'sche Logikverknüpfung, mit der die Informationen aus dieser Zelle gelesen werden.
Jeder einzelne Single-Level-Cell (SLC) speichert dabei genau 1 Bit, jede Multi-Level-Cell mehrere Bits an Daten.
Das Bild links zeigt die Architektur eines 8 Gbit SLC 50 nm Flash-Speichers, wo 16.896 Zellen auf derselben Bit-Zeile angeordnet sind, um damit eine 4 kByte Seite zu bilden. Ein Lösch-Block wiederum beinhaltet 64 dieser Seiten, jede mit ihrer eigenen Wort-Zeile.
Blöcke und Seiten löschen
Eine Seite (=Page) ist die kleinste Einheit eines Flash-Speichers, die Schreiboperationen unterstützt und Speicherzellen auf einer gemeinsamen Wortzeile (= word line) organisiert.
Ein Lösch-Block ist der kleinste Bereich eines Flash-Speichers, der mit einer einfachen Operation gelöscht werden kann. Die Größe einer Seite und eines Lösch-Blockes unterscheiden sich dabei i.d.R. je nach Hersteller und Technologiegeneration.
- 50 nm 8 GBit SLC Flash hat eine Seitengröße von 4 kByte und eine Größe des Löschblocks von 256 kByte.
- 50 nm 16 GBit MLC Flash hat ebenfalls 4 kByte als Seitengröße, der Löschblock ist aber 512 kByte.
Die Größe einer Page von 4 kByte entspricht dabei 4.096 echten Speicherzellen sowie zusätzlichen 128 Bytes für Steuer- und Datensicherungs-Informationen (ECC).
SLC und MLC im Vergleich
Multi-Level-Cell (MLC) und Single-Level-Cell (SLC) NAND haben unterschiedliche Eigenschaften und bedienen unterschiedliche Anwendungen, auf der einen Seite niedrigste Kosten je Bit, auf der anderen Seite höhere Performance und Zuverlässigkeit. Bei MLC NAND-Flash können in jeder Zelle mehrere Bits an Information gespeichert werden, verglichen mit dem einen Bit beim SLC-Typ. Daher bietet MLC NAND größere Kapazitäten, höhere Speicherdichten und ist aufgrund ihrer nur durchschnittlichen Zuverlässigkeit aber vergleichsweise niedrigen Kosten für Geräte der Consumer-Industrie geeignet, Mobiltelefone etwa, Digitalkameras oder USB-Speichersticks.
SLC-NAND bietet die höheren Schreibgeschwindigkeiten, niedrigere Fehlerraten und größere Schreibhäufigkeit, was sie für Anwendungen empfiehlt, bei denen es auf Zuverlässigkeit, Performance und maximale Lebensdauer ankommt.
Sowohl SLC- als auch MLC-Flash verwenden das gleiche Spannungsfenster, bei MLC ist dieses Fenster aber in mehrere kleinere Spannungsbereiche für die gepackten Speicherzellen aufgeteilt, was zu einer eingeschränkten Erkennungssicherheit führt:
- Elektronen in benachbarten Ebenen können durch elektrische Störungen beeinträchtigt werden und von einer Ebene zur nächsten geschoben werden und verursachen auf diese Weise eine höhere Bitfehlerrate.
- Sowohl das Schreiben als auch Lesen einer Zelle dauert wesentlich länger (etwa 40-50%), da die Ladevorgänge zu den korrekten Spannungswerten einen sehr akkuraten Prozess mit mehreren Iterationen benötigt.
- Damit steigt aber auch der Stromverbrauch
- Die Schreibhäufigkeit sinkt aufgrund der zusätzlichen Belastung durch umfangreicher Schreib-/Leseversuche.
Datenblätter geben für ein 50 nm MLC NAND 10.000 Schreib-/Lesezyklen und deutlich weniger (1.500 – 5.000 Zyklen) für die nächste 3x nm Generation). SLC dagegen schafft 100.000 Schreib-/Lesezyklen für aktuelle und künftige Generationen.
Einige Hersteller haben kürzlich sog. „Enterprise Grade“ SLC- und MLC-Flash eingeführt. Damit wird die Zahl der Programmier-/Löschzyklen auf 300.000 bei SLC und auf 30.000 bei MLC gesteigert. Diese höheren Zahlen werden allerdings durch weniger aggressives Speicher- und Lösch-Timing erzielt (die Speicher sind also langsamer) sowie durch Reduzierung der spezifizierten Datenerhaltungszeit.
Eigenarten der Flash-Speicher
NAND-Flash „leidet“ an Zuverlässigkeit, mangelnder Schreibhäufigkeit und Problemen beim Datenerhalt, was ein komplexes Management erfordert. Wegen der mit jeder neuen Flash-Generation steigenden Speicherdichte treten diese Probleme immer stärker zutage und erfordern immer ausgeklügeltere NAND-Flash-Controller und Systemlösungen. NAND Flash zeigt folgende, systembedingte Beschränkungen:
- Notwendigkeit des Löschens vor dem Schreiben
- Abnutzungserscheinungen mit der Folge einer beschränkten Lebensdauer
- Datenfehler, die durch Störungen beim Schreiben oder Lesen auftreten.
- Fehler bei der Datenerhaltung Management von fehlerhaften Blöcken (= bad blocks) ex Herstellung und im Betrieb
Löschen vor Schreiben
Das Löschen eines Blockes bedeutet, alle Bits im Block auf „1“ zu setzen. Umgekehrt bedeutet das Schreiben also das Setzen einer Zelle auf „0“. Einmal gesetzt, kann die Zelle nicht auf dem gleichen (individuellen) Weg auf „1“ zurückgesetzt werden, das geht wiederum nur über das Löschen des gesamten Blocks, indem sich die Zelle befindet.
Zur Minimierung der Anzahl von Block-Löschungen und damit Maximierung der Lebensdauer sind gute Block-Management-Verfahren notwendig, mit denen sich unnötige Löschzyklen vermeiden lassen.
Schreib- / Lesestörung vulgo Bit Flips
NAND-Flash ist leider etwas anfällig für sog. Bit-Flips, das sind ungewollte Änderung von Zellinhalten durch Zugriffsoperationen benachbarter Zellen. MLC ist davon naturgemäß stärker betroffen als SLC.
Unterschieden werden dabei Lese- und Schreibstörungen, die bei unterschiedlichen Operationen im Flash-Speicher auftreten und jeweils Zellen betreffen, die nicht angesprochen sind. Die Störungen üben einen Spannungsstress auf diese Zellen aus, der zum Kippen der logischen Information führen kann.
Die „Bit-Kipper“ lassen sich über die integrierten ECC-Verfahren entdecken und korrigieren, bevor die Daten an den Host ausgegeben werden. Diese müssen aber zunehmend leistungsfähiger werden, weil mit kleiner werdenden Geometrien die Häufigkeit solcher Fehler zunimmt.
Fehler beim Datenerhalt
Der Datenerhalt (= data retention) definiert, wie lange einmal geschriebene Daten in einem Speicher gültig sind. Programmierte NAND-Flash-Zellen müssen eine stabile Spannung aufrechterhalten, um die Daten zu sichern, und zwar definitionsgemäß für mindestens 10 Jahre.
Kriechladungen aus dem floating Gate, genannt Ladungsdrift, ändern ganz langsam den Spannungswert einer geladenen Zelle und können zu Fehlinterpretationen des gespeicherten logischen Wertes führen.
Die Datenerhaltungs-Zeit ist umgekehrt proportional zur Anzahl erfolgter Schreib-/Lesezyklen, d.h. dass Speicherblöcke mit einer großen Zahl von Löschungen „auf dem Buckel“ eine geringere Datenerhaltungszeit haben als frische Blöcke.
Bei MLC ist die Datenerhaltungszeit um Größenordnungen geringer als bei SLC. Um akzeptable Bit Fehlerrate zu erzielen, sind daher geeignete ECC-Mechanismen zu implementieren, die in der Lage sind, solche Probleme zu beheben.
Bad Blocks
Es gibt grundsätzlich 2 Arten von „Bad Blocks“ (BB) in einem NAND-Flash-Baustein:
- Bad Blocks bei Auslieferung, sog. Initiale BBs: Um die Ausbeute in der Fertigung zu erhöhen und keine „fast perfekten“ Speicher-ICs wegwerfen zu müssen, dürfen SLC-Speicher bis zu 2% und MLC-Speicher bis zu 5% initiale BBs aufweisen.
- Akkumulierte BBs: Aufgrund verschiedener Alterungsprozesse wie Defekte in Isolationsschichten oder „eingefangene“ Elektronen treten zunehmend BBs während der Lebensdauer auf.
Daher ist ein Management dieser Bad Blocks beider Typen notwendig, um einen sicheren Betrieb gewährleisten zu können.
Beschränkte Zahl von Schreibzyklen
NAND-Flash Speicher hat nur eine begrenzte Anzahl von Schreib/Löschzyklen, was durch 2 Gründe verursacht wird:
- Elektronen „verfangen“ sich mitunter in der dünnen Oxydschicht, die das Floating Gate isoliert.
- Durch Injektion von „heißen“ Ladungsträgern (= hot carrier injection) wird die Oxydschicht angegriffen.
Sobald der Schaden der Oxydschicht ein bestimmtes Ausmaß überschreitet, wird es für Elektronen zunehmend schwierig, zwischen P-Substrat und dem Floating-Gate zu wandern, siehe Bild 5.
Der Löschblock, der die Oxydschicht umgibt, kann dann nicht mehr sauber mit den Standard-Schwellspannungen gelöscht werden und muss daher in den Pool schlechter Blöcke verschoben werden.
Die Anzahl der Schreib/Lösch-Zyklen (W/E), die die Hersteller von NAND-Flash Hersteller für ihre Bauelemente spezifizieren, bietet einen Hinweis für die Abnutzung der Oxydschicht. Aktuelle SLC NAND-Flash Bausteine garantieren 100.000 W/E-Zyklen je Block. MLC-Flash dagegen bietet nur 1.500-5.000 W/E-Zyklen in der 3x nm Technologie.
Diese Zahlen bedeuten nicht, dass der Löschblock funktionsuntüchtig wird, sobald diese Schwelle erreicht ist, allerdings sind sie ein Hinweis darauf, dass die Zellen gealtert sind und nun erste Anzeichen von „Wear-Out“ zeigen.
Flash-Management
Wirkungsvolle Flash-Management Techniken müssen Mechanismen beinhalten, um den beschriebenen Limitierungen des NAND-Flash zu begegnen, sprich nach außen unsichtbar zu machen. Typischerweise wird das als Kombination aus Hard- und Softwaremaßnahmen realisiert. Die 5 wichtigsten Faktoren bzw. Maßnahmen, mit denen sich ein Optimum an Zuverlässigkeit, Performance und Lebensdauer erzielen lassen, sind in der Tabelle aufgelistet.
Beim Vergleich unterschiedlicher Solid State Drive Lösungen ist auf das Design des Flash-Controllers, auf die verwendeten Algorithmen und auf die eigentlichen Flash-Speicher als die 3 wichtigsten Kriterien geachtet werden.
Abnutzungsausgleich
Das sog. „Wear Leveling“ (= Abnutzungsausgleich) sichert die gleichmäßige Verteilung von Löschzyklen über alle Blöcke des NAND-Flash-Speichers, stellt also sicher, dass alle Blöcke innerhalb des Bausteins etwa gleich häufig beschrieben und gelöscht werden
Um das Verfahren zu verstehen ist es notwendig, die beiden unterschiedlichen Adressierungsarten von System und Flash zu verstehen.
Das Betriebssystem verwendet Logical-Block-Adressing (LBA), um Daten auf ein Laufwerk zu speichern oder von dort zu lesen. Ein Flash-Controller dagegen verwendet physikalische Adressen, um Daten zu lesen oder schreiben.
Der Controller muss also Logical-Block-Adressen auf unterschiedliche physikalische Adressen des Flash-Speichers mappen. Diese Zuordnungen werden in einer Mapping-Tabelle gespeichert.
Schreibfaktor
Der Schreibfaktor (= write amplification) gibt das Verhältnis zwischen der Zahl zu schreibender Daten des Flash-Controllers zu der Zahl zu schreibender Daten des Host-Controllers an. Üblicherweise ist diese Zahl größer 1, weil aufgrund der Granularität des Flash-Speichers mehr Flash-Zellen geschrieben werden müssen, als es eigentlich numerisch notwendig wäre. Je höher der Schreibfaktor, umso schneller gehen dem Flash-Controller verfügbare Blöcke aus.
Auf der anderen Seite ist es aber möglich, mit pfiffigen Verfahren einen Schreibfaktor von unter 1 zu erzielen, z.B. durch Datenspiegelung oder Deduplizierungstechniken.
Fehlererkennung und -beseitigung
Eine der Schlüsselfaktoren zur Verbesserung der Flash-Zuverlässigkeit und Erhöhung der Schreibzyklen besteht in der Implementierung von Fehlererkennungs- und Korrekturmechanismen. Die 3 populärsten Verfahren in diesem Zusammenhang sind Reed-Solomon, Hamming und BCH (Bose, Ray-Chaudhuri, Hocquenghem), die jeweils spezifische Vor- und Nachteile aufweisen.
Die Wahl des Algorithmus bestimmt, welche Zahl an Fehlern erkannt und korrigiert werden kann, unabhängig davon aber muss das Fehlermanagement folgende Funktionen erfüllen:
- Jedes Mal, wenn Daten auf den Flash-Speicher geschrieben werden, laufen sie durch die ECC-Engine des Controllers, der damit eine eindeutige Signatur erzeugt.
- Daten und die ECC-Signatur werden beide auf dem Flash gespeichert, die Daten im Page-Bereich, die Signatur im Spare-Bereich.
- Fordert der Host diese Daten an, werden sie zunächst mitsamt ECC-Signatur in den Controller geladen und eine neue Signatur generiert.
- Nun wird die neue Signatur mit der bestehenden verglichen.
Sind beide Signaturen gleich also keine Fehler aufgetreten, dann werden die Daten werden an den Host weitergegeben. Sind sie unterschiedlich, werden sie zunächst korrigiert und dann ausgegeben. Manche Flash-Controller schreiben die korrigierten Daten zurück in den Flash-Speicher, um die Zuverlässigkeit zu erhöhen.
Für eine Speicher-Page mit 4 kByte werden beim Schreiben typischerweise 8 ECC-Signaturen erstellt, also eine Signatur auf 512 Byte Daten.
Die Implementierung von ECC-Verfahren erhöht die Gesamt-Zuverlässigkeit eines Flash-Bausteins, da Lese-, Schreib- und Datenerhaltungsfehler erkannt und korrigiert werden. Weniger bekannt ist die Tatsache, dass eine leistungsfähige ECC-Engine der wichtigste Faktor zur Erhöhung der Lebensdauer eines Speichers ist. Je besser diese nämlich Fehler korrigieren kann, desto länger können Blöcke aktiv bleiben (auch wenn zunehmend Fehler auftreten) und müssen nicht auf's Altenteil geschickt werden. Auf diese Weise kann also mehr Lebensdauer aus einem Flash-Speicher gequetscht werden.
SMART Modular’s XceedIOPS SATA Laufwerke beinhalten eine ECC-Engine basierend auf einem Reed-Solomon-Algorithmus, der in der Lage ist, bis zu 12 9-Bit Symbole zu erkennen und korrigieren.
Das Management fehlerhafter Speicherblöcke
Um die Fertigungsausbeute zu erhöhen und Kosten zu senken werden NAND-Bausteine auch dann ausgeliefert, wenn sie eine geringe Zahl defekter Speicherblöcke aufweisen, natürlich mit entsprechender Kennzeichnung. Der erste physikalische Block (Block 0) allerdings ist dabei stets lesbar und frei von Fehlern. Während der Lebensdauer des Speichers entstehen zusätzliche Bad Blocks, die als solche gekennzeichnet werden und in den Pool unbrauchbare Speicherblöcke wandern.
Der Controller unterhält zu diesem Zweck eine Adress-Block-Tabelle mit den initialen und akkumulierten Blöcken und stellt darüber sicher, dass diese nicht in Schreib-/Lesezugriffen verwendet werden. Das stellt nicht nur Datenintegrität sicher, sondern beschleunigt auch die Abläufe, weil nicht bei jedem Zugriff die Funktionstüchtigkeit eines Blockes geprüft werden muss.
Für SLC-F garantieren die Chip-Hersteller, dass über die Lebensdauer von 100.000 Schreib-/Lesezyklen nicht mehr als 2% der Speicherblöcke zu Bad Blocks mutieren.
Anzahl möglicher Schreibzyklen
Spendiert man also dem Flash-Speicher einen leistungsfähigen Controller mit starkem „Wear-Leveling“ und Fehler-Korrektur, dann lässt sich die Lebensdauer eine Flash-Laufwerks weit über die spezifizierten 100.000 Schreib-/Löschzyklen hinaus verlängern, die für den SLC-Herstellern spezifiziert sind. Generell hängt die erzielbare Lebensdauer von folgenden Einflußgrössen ab:
- Anzahl Schreib-/Lesezyklen
- Kapazität des Laufwerks
- Schreibgeschwindigkeit
- Drive Duty Cycle
- Verhältnis Lesen zu Schreiben
- Schreibfaktor (Write Amplification)
Eingebettete Speicher für Industrieanwendungen
Smart Modular bietet neben seinem umfangreichen Portfolio an SSDs auch eingebettete Flash-basierte Speicherprodukte mit Qualifizierung für industrielle Umgebungsbedingungen für unterschiedlichste Anwendungen z.B,. als embedded USB (eUSB), embedded SATA (iSATA und uSATA) sowie miniIDE Formfaktor mit SATA-, USB-, PCIe- und PATA-Schnittstellen. Hier eine kurze Übersicht des Portfolios ohne Anspruch auf Vollständigkeit.
Xceed iSATA
Entwickelt für Baugruppen mit geringem Platzangebot als eingebettete Solid-State-Disk. Die SMART Xceed iSATA verfügt über eine 3 Gbit/s schnelle SATA-Schnittstelle und verwendet Single-Level.Cell (SLC) Flash-Technologie, um besonders zuverlässige und kleine Speicherlaufwerke für festen Einbau zu realisieren.
Single-Chip Disk Drives (SCDDs)
XceedLite uSATA
Klein, robust und sehr schnell – das eingebettete SATA Modul XceedLite uSATA ist ein SSD auf Basis von SLC-Flash mit niedriger Stromaufnahme und hohem Datendurchsatz. Die kontinuierliche Lese-/Schreib-Performance liegt bei 86 MByte/s bzw. 55 MByte/s, das Modul wird mit Kapazitäten von 2 GByte bis 16 GByte angeboten.
Embedded USB (eUSB)
Eingebettetes Flash gibt es auch mit USB-Interface. Die Smart Modular eUSB Flash-Drives sind kompatibel mit USB 2.0 (Hi-Speed) und bieten eine kontinuierliche Lesegeschwindigkeit von 36 Mbyte/s sowie 23 Mbyte/s beim Schreiben bei Suchzeiten von typisch 500 µs. Anders als klassische Hard-Disks mit rotierenden Medien verbrauchen sie im Ruhezustand (kein Zugriff) extrem wenig Strom.
XceedIOPS PCIe
Bietet industrieweit führende Transferleistung bei wahlfreiem Zugriff, 140.000 IOPS (8x schneller als 4Gb Fiber Channel und 5x schneller als 3 Gbit/s SATA) mit Kapazitäten bis 400 Gbyte.
Das Board ist mit 2, 4 oder 8 Speicher-Nodes bestückbar, die jeweils 24 Gbyte oder 50 Gbyte adressierbare Kapazität haben.

















