NAND-Flash bringt Vorteile für Embedded-IoT-Anwendungen und fordert Entwickler

Autor / Redakteur: Dave Hughes* / Franz Graser

Auswechselbare Speichermedien können zu Datenunsicherheiten führen, von unzuverlässigen Kontakten und Vibrationsproblemen ganz zu schweigen. Für Embedded-IoT-Anwendungen sind Speicher wie etwa NAND-Flash meist die bessere Wahl, jedoch gilt es hier eine Reihe komplexer Design-Aspekte zu beachten.

Anbieter zum Thema

Traditioneller Wasserzähler: Designer von digitalen, mit dem Internet verbundenen Zählerinstrumenten sollten auf NAND-Flash-Speicher setzen. Das hat Konsequenzen für die Wahl des Dateisystems.
Traditioneller Wasserzähler: Designer von digitalen, mit dem Internet verbundenen Zählerinstrumenten sollten auf NAND-Flash-Speicher setzen. Das hat Konsequenzen für die Wahl des Dateisystems.
(Bild: gemeinfrei/Pixabay / CC0 )

NAND-Flash ist die zentrale Technologie in einer Vielzahl von Speichern von SSDs über SD-Cards bis zu eMMCs, in denen eine große Speicherdichte und ein hohes Performance-Niveau gefordert werden. Kennzeichnend für NAND-Flash sind die niedrigen Kosten pro Bit, die kurzen Lösch- und Schreibzeiten und der auf den Datenbus gemultiplexte Adressbus, wodurch die Elektronik weniger komplex wird.

Bildergalerie

NAND-Flash-Speicher sind in Blöcke unterteilt, die wiederum in physische Seiten gegliedert sind. Jede Seite enthält einen Bereich für die Daten und einen Reservebereich, der für NAND-Managementdaten genutzt wird. Es wird immer mehr üblich, dass NAND-Flash-Speicher aus mehreren Ebenen bestehen, die sich unabhängig adressieren und parallel programmieren oder löschen lassen. Bild 1 (in der Bildergalerie) zeigt einen traditionellen, in einen Mikrocontroller eingebauten NAND-Flash-Controller.

Design-Herausforderungen bei NAND-Flash-Speichern

Beim Einsatz von NAND-Flash-Speichern ergeben sich mehrere Herausforderungen. Die verschiedenen Arten von NAND-Bausteinen weisen unterschiedliche Fehlercharakteristika auf, beispielsweise was die Zahl der defekten Blöcke, die Bad-Block-Marker und die ECC-Anforderungen (Error Correction Code) angeht. Die ECC-Anforderungen müssen deshalb an die NAND-Controller-Schnittstelle des jeweiligen Mikrocontrollers angepasst werden. Darüber hinaus erfordert NAND-Flash komplexe Managementfunktionen wie das Bad-Block-Management und das Wear-Leveling.

Error Correction Code (ECC): Die im ungünstigsten Fall auftretende Verschleißrate wird durch den Flash-Hersteller definiert. Mit ECCs wird dabei sichergestellt, dass die Daten beim Einsatz unter Einhaltung der Chipspezifikationen stets konsistent sind. Die Stärke (d. h. die Zahl der Bits) des benötigten ECC richtet sich nach der Worst-Case-Bitfehlerrate.

Bad-Block-Management: Schon wenn ein Flash-Speicher neu ist, kann er Blöcke enthalten, die fehleranfällig oder nicht nutzbar sind. Während des Betriebs können Daten in einwandfreien Blöcken später verfälscht werden – sei es durch das Abfließen von Ladung oder durch Störungen infolge von Schreibvorgänge in benachbarten Teilen des Chips. Spezielle Software verwaltet die defekten Blöcke und verzeichnet nicht nutzbare Bereiche, um ein Verfälschen der Daten zu verhindern.

Wear-Leveling: Flash-Zellen haben eine begrenzte Lebensdauer. Das heißt, sie können nicht unbegrenzt häufig gelöscht und neu programmiert werden, bevor sie unzuverlässig werden. So genannte Wear-Leveling-Algorithmen erhöhen die Lebensdauer des Chips insgesamt, indem sie die Daten so zwischen den physischen Blöcken verlagern, dass die Zellen möglichst gleich abgenutzt werden. Diese Algorithmen lassen sich auf die Performance-Anforderungen abstimmen.

Flash Translation Layer (FTL) als Lösung für das Wear-Leveling-Problem: Wegen der Notwendigkeit zur Umbelegung defekter Blöcke kommt es in den meisten Anwendungen nicht in Frage, einen NAND-Baustein wie eine lineare Anordnung von Speicherzellen zu behandeln. Notwendig ist deshalb eine logische Umsetzung der physischen Blöcke, wofür ein softwarebasierter Flash Translation Layer (FTL) eingesetzt wird. Der FTL präsentiert eine Anordnung logischer Sektoren, die die Komplexität des darunter befindlichen physischen Bausteins verbirgt, sodass er vom Designsystem wie jeder andere Medientreiber behandelt werden kann.

In Anwendungen, in denen Flash-Speicher sehr oft gelöscht und neu beschrieben werden, nimmt sich der FTL auch des Wear-Leveling-Problems an, um die Lebensdauer des Produkts zu erhöhen. Man unterscheidet zwischen dem dynamischen und dem statischen Wear-Leveling. Beim dynamischen Wear-Leveling wählt das System für den nächsten Schreibvorgang den bisher am wenigsten genutzten Block aus. Diese Methode ist relativ wenig wirkungsvoll, da sie keine Datenblöcke berücksichtigt, deren Inhalt unverändert bleibt.

Beim statischen Wear-Leveling dagegen werden zu wenig genutzte Blöcke getauscht, um die Abnutzung gleichmäßig auf den gesamten Baustein zu verteilen. Das statische Wear-Leveling bedarf allerdings einer sorgfältigen Abstimmung um sicherzustellen, dass das Tauschen der Blöcke nicht unnötig zur Abnutzung des Bausteins beiträgt. Man erreicht dies üblicherweise durch die Festlegung sinnvoller Grenzwerte für das Tauschen von Blöcken. Ein Vergleich zwischen dem dynamischen und dem statischen Wear-Leveling ist in Tabelle 1 in der Bildergalerie aufgeführt.

(ID:44833278)