Auswahl und Einsatz der richtigen Flash-Speichertechnologie für IoT-Programmspeicheranwendungen

Von Bill Giovino

Zur Verfügung gestellt von Nordamerikanische Fachredakteure von DigiKey

Da IoT-Knoten leistungsfähiger geworden sind, können die Verarbeitungsanforderungen auf ein Niveau ansteigen, das ein vollständiges eingebettetes Betriebssystem (OS) wie Linux erfordert, um die Komplexität aller laufenden Aufgaben ordnungsgemäß zu verwalten. Solche Betriebssysteme auf einer microSDHC-Flashkarte zu speichern ist zwar praktisch, doch sind die meisten microSDHC-Flashkarten nur für die Speicherung von Daten und nicht für den Code von Betriebssystemen ausgelegt. Einige Anbieter haben jedoch inzwischen innovative Lösungen gefunden.

Dieser Artikel beschreibt die Funktion eingebetteter Betriebssysteme und warum es oft sinnvoll ist, Betriebssysteme und Anwendungscode in IoT-Knoten auf einer microSDHC-Flashkarte zu speichern. Anschließend wird der Alterungsprozess von Flashkarten erläutert und wie sich dieser Prozess auf die Betriebssysteme auswirken kann. Weiterhin wird beschrieben, wie Designer neuartige Flash-Speicher einsetzen können, um solche Alterungsphänomene zu verhindern und effiziente und zuverlässige IoT-Knoten zu implementieren.

Der Sinn von eingebetteten Betriebssystemen

Je umfassender bei bestimmten IoT-Anwendungen die Vorverarbeitung am entfernten IoT-Knoten ist, desto weniger Daten muss der IoT-Knoten zurück an den zentralen Hub senden. Dadurch wird im Netzwerk Bandbreite für andere Aufgaben frei. Die komplexe Vorverarbeitung wird von einem vorgetesteten Embedded-Betriebssystem unterstützt, das viele einzelne Aufgaben effizient handhabt und Multitasking auf vorhersagbare (deterministische) Weise ausführt. Natürlich werden dadurch zusätzliche Anforderungen an den Mikrocontroller gestellt: Höhere Taktgeschwindigkeiten und – noch wichtiger – mehr Programmspeicher sind erforderlich.

Ein eingebettetes kommerzielles oder Open-Source-Standardbetriebssystem bietet auch den Vorteil eines soliden, vorgetesteten Codes, der nur selten aktualisiert werden muss. Zum Beispiel werden die verfügbaren Embedded-Betriebssysteme von Linux nur vierteljährlich bzw. mit Notfall-Sicherheitspatches aktualisiert. Ein eingebettetes Betriebssystem mit dem erforderlichen Anwendungscode kann 8 GB oder mehr erfordern. Da das Betriebssystem nur selten aktualisiert wird, kann es sinnvoller sein, es auf einer microSDHC-Flashkarte unterzubringen, die dann von einem Techniker manuell (physisch) aktualisiert wird. In einem solchen System kann auch der Speicher bei Bedarf bequem erweitert werden. Zum Beispiel kann eine vorhandene 4-GB-Flash-Karte beim nächsten Besuch des Technikers einfach durch eine Karte mit 8 GB oder mehr ersetzt werden (Abbildung 1).

Abbildung der microSDHC-Speicherkarte S-140u der Klasse 10 von Swissbit

Abbildung 1: Die microSDHC-Speicherkarte S-140u der Klasse 10 von Swissbit, die Geschwindigkeiten von bis zu 104 MB/s unterstützt – schnell genug für den effizienten Programmspeicherzugriff. (Bildquelle: Swissbit)

Das Speichern von Gigabytes eines eingebetteten Betriebssystems auf einer microSDHC-NAND-Flashkarte, die physisch aktualisiert wird, hat mehrere Vorteile gegenüber einem Flash-Speicher, der über ein drahtloses Netzwerk aktualisiert wird. Beim Aktualisieren eines eingebetteten Betriebssystems von 4 GB oder mehr wird in einem drahtlosen Netzwerk – je nach verwendetem Arbitrierungsschema – die Bandbreite für operative Kommunikation mehr oder weniger eingeschränkt. Die Aktualisierung über ein Netzwerk erfordert auch eine microSDHC-Karte mit doppelter Kapazität, da genug Speicherplatz sowohl für das Betriebssystem als auch für das eingehende Update vorhanden sein muss.

Zudem reduziert die Aktualisierung des Flash-Codes über Funk auch die Batterielaufzeit – wegen der Funkaktivität und der höheren Spannungen und Leistungsanforderungen, die für das Schreiben auf dem Flash erforderlich sind.

Ein eingebettetes Betriebssystem, das von einem Flash-Speicher ausgeführt wird, stellt auch andere Anforderungen an die Flash-Speicherzellen als die reine Datenspeicherung. Die meisten kommerziellen microSDHC-Flashkarten sind nur für die Datenspeicherung ausgelegt. Sie werden häufig als Multimedia-Speicher für mobile Geräte eingesetzt. Während Bitfehler in einer Video-, Bild- oder Audiodatei für den Endnutzer in der Regel unbemerkt bleiben, kann ein einzelner Bitfehler in einer wichtigen eingebetteten Betriebssystem-Datei zu einem Totalausfall des Systems führen.

Zudem haben Flash-Speicher nur eine begrenzte Lebensdauer. Jeder Schreibvorgang auf einem Flash-Speicherarray lässt das Array altern. In den Spezifikationen von Halbleiter-Flash-Speichern ist deshalb eine begrenzte Anzahl von Lösch- und Schreibzyklen angegeben. Wenn sich die Flash-Zelle dem angegebenen Grenzwert nähert, fällt sie mit immer größer werdender Wahrscheinlichkeit aus und nimmt keinen neuen Programmierzustand mehr an.

Eine übliche Methode zur Verlängerung der Lebensdauer von Flash-Arrays wird als Verschleißnivellierung (Wear Leveling) bezeichnet. Anstatt immer den gleichen Flash-Speicherort zu beschreiben, werden dabei die Schreibvorgänge gleichmäßig über das gesamte Halbleiter-Flash-Speicherarray verteilt. Dies sorgt für eine gleichmäßige Verteilung der Schreibvorgänge über die Flash-Speichermatrix. Während der Mikrocontroller immer eine einzelne Stelle im physischen Speicher beschreibt, kann der Flash-Controller per Verschleißnivellierung an verschiedenen Stellen des Flash-Speicher-Arrays denselben Speicherort abbilden.

Wie Lesestörungsfehler auftreten

Auf Betriebssystemdateien wird viel häufiger zugegriffen als auf Datendateien, und Bitfehler in Betriebssystemdateien können fatale Auswirkungen haben. Manche zentralen Betriebssystemdateien werden ständig gelesen, was zu Bitfehlern im Flash-Array führen kann.

Der Flash-Speicher ist in Blöcken angeordnet, und jeder Block enthält eine bestimmte Anzahl von Seiten. Die Blöcke sind die kleinsten Teile des Speichers, die gelöscht werden können, während die Seiten die kleinsten Teile des Speichers sind, die gelesen oder programmiert werden können. Ein üblicher Flash-Block hat eine Größe von 256 kByte und kann 64 Seiten mit je 4 kByte enthalten. Jede Seite enthält zusätzlich 64 Byte, die für Fehlerkorrekturcode (ECC), Löschzählungen und die Übersetzung von logischen in physische Daten verwendet werden.

Während eines Flash-Lesevorgangs einer Seite mit Daten wird eine kleine Lesespannung an den gesamten Block angelegt, zu dem die Seite gehört, selbst wenn nur ein Byte von der Seite gelesen werden muss. Aufgrund der Flash-Zellentechnologie wird auch eine geringere Spannung in die umgebenden Seiten im Block induziert. Bei diesem Vorgang können Elektronen in die Zellisolationsschichten injiziert werden, ähnlich der Programmierung einer Zelle. Dieser Vorgang wird daher als „weiche Programmierung“ bezeichnet. Das wiederholte Anlegen der kleinen Lesespannung an denselben Block kann schließlich auch eine Programmierstörung der nicht gelesenen Flash-Seiten verursachen. Im Laufe der Zeit kann dies dazu führen, dass der Status der benachbarten Zellen auf einen anderen Wert geändert wird.

Die meisten microSDHC-NAND-Flashkarten haben eine Art Fehlerkorrektur zur Behebung von Zellfehlern. Jedoch kann die Anzahl der durch weiche Programmierung verursachten Fehler einen kritischen Wert erreichen, sodass die Fehler nicht mehr korrigiert werden können. In diesem Fall liest der Mikrocontroller einen anderen Wert aus dem Bit, was zu einem Dateifehler führt. Solche Bitfehler werden als Lesestörungsfehler bezeichnet.

Bei microSDHC-NAND-Flashkarten, die für die Datenspeicherung verwendet werden, treten Lesestörungsfehler selten auf. Aufgrund der Schreibvorgänge auf dem Flash-Array werden die Flash-Positionen nach einer Verschleißnivellierung neu programmiert, wodurch jegliche weichen Programmiereffekte beseitigt werden. Ein für ein eingebettetes Betriebssystem verwendetes Flash-Array wird jedoch so selten programmiert, dass Lesestörungsfehler zur Realität werden können.

Single-Level-Cell-(SLC-)Flashkarten sind für eine Million Lesevorgänge und Multi-Level-Cell-(MLC-)Flashkarten für 100.000 Lesevorgänge ausgelegt, bevor ein Lesestörungsfehler auftreten würde. Bei der Daten-Flash-Speicherung werden Lesestörungsfehler als so selten angesehen, dass diese Zahlen oft nicht in den Datenblättern angegeben sind.

RDM zur Vermeidung von Lesestörungsfehlern

Um Lesestörungsfehler zu vermeiden, entwickelte Swissbit eine Funktion, die als Read Disturb Management (RDM) bezeichnet wird. Beim RDM von Swissbit verfolgt der Flashkarten-Controller die Anzahl der Lesevorgänge für jeden einzelnen Flash-Block. Wenn ein Block eine intern definierte Anzahl von Lesevorgängen erreicht, verschiebt der Controller die Daten in einen neuen Block – ähnlich der Verschleißnivellierung, die für Schreibvorgänge verwendet wird. Bei Bedarf korrigiert der Fehlerkorrekturcode (ECC) des SD-Controllers alle beschädigten Daten während des Schreibvorgangs in einen neuen Block.

Die RDM-Funktion wurde in die microSDHC-Flashkarte von Swissbit SFSD8192N1BM1MT-I-QG-221-STD (8 GB S-450u UHS-I, Klasse 10) implementiert. Die S-450u wurde speziell für industrielle Anwendungen mit eingebetteten Betriebssystemen entwickelt und bietet genug Platz für ein Embedded-Linux-Betriebssystem und Anwendungscode für zahlreiche komplexe IoT-Knoten. Im SDR104-Modus unterstützt die S-104u bis zu 104 MB/s Datenzugriff.

Nutzung von microSDHC-Karten zur Ausführung des Programmspeichers

Wie bereits erwähnt, werden microSDHC-Karten normalerweise nur als Datenspeicher verwendet. Daher unterstützen die Peripheriebausteine der meisten Mikrocontroller der Harvard-Architektur nur den Zugriff auf microSDHC-Karten als Datenspeicher. Dadurch sind die verfügbaren Optionen eingeschränkt.

Bei vorhandenen Lösungen wird die microSDHC-Karte gelesen, der Programmspeicher in den RAM geladen und dann aus dem RAM heraus ausgeführt. Der RAM-Chip bedeutet für das Board nicht nur zusätzliche Kosten. Auch die Programmerweiterung ist auf die Kapazität des verfügbaren Onboard-RAMs begrenzt.

MicroSDHC-Karten können im SD- oder SPI-Modus verbunden werden.

Für die Schnittstelle zwischen Mikrocontroller und der als Programmspeicher verwendeten S-450u-microSDHC-Karte muss der ausgewählte Mikrocontroller eines der beiden microSDHC-Busprotokolle unterstützen:

  1. Ein SD-Modus-Controller-Peripheriebaustein für SDHC-Karten, der dem Programmspeicher zugeordnet ist (Abbildung 2). Dies kann ein externer Peripheriebaustein oder ein interner Mikrocontroller-Peripheriebaustein sein. Die Schnittstelle besteht aus sechs Signalen: vier Datenbits (DAT[0-3]), einem Taktsignal (CLK) und einem bidirektionalen Befehls-/Antwortsignal (CMD). Die Daten werden in vier Bit gleichzeitig übertragen und bieten somit die schnellste Programmausführungsgeschwindigkeit. Der Hostcontroller oder der Mikrocontroller stellt den Takt für die microSDHC-Karte bereit.
  2. Abbildung der Schnittstelle zu einer microSDHC-Karte im SD-Modus

    Abbildung 2: Die Schnittstelle zu einer microSDHC-Karte im SD-Modus als einfache Sechs-Signal-Schnittstelle für schnellste Speicherzugriffe. (Bildquelle: DigiKey)

  3. Ein konfigurierbares SPI-Interface mit Unterstützung für eXecute In Place (XIP). Es kann Code von der Karte ausführen, indem es auf die microSDHC-Karte im SPI-Modus zugreift. Das System ermöglicht eine schnelle Datenübertragung, die jedoch nicht so schnell ist wie beim SDHC-Kartenmodus. Der XIP-Speicher ordnet den Speicher der Karte dem Programmspeicher des Mikrocontrollers zu und macht den Zugriff auf die microSDHC-Karte für die Host-Firmware transparent.

Eine microSDHC-Karte wird im SD-Kartenmodus hochgefahren. Um den Einzelbit-SPI-Modus zu selektieren, muss das DAT3-Signal in den ersten sechs Takten nach dem Einschalten auf VDD hochgezogen werden, während gleichzeitig ein RESET-Befehl (000000b) an die Karte gesendet wird, indem CMD auf VSS heruntergezogen wird. Danach bleibt die Karte bis zur Abschaltung im SPI-Modus.

Der MAX32652 Arm® Cortex®-M4F Mikrocontroller von Maxim Integrated ist ein energiesparender Mikrocontroller für IoT-Knoten. Er verfügt über ein chipinternes QSPI-XIP-Interface, das bei entsprechender Konfiguration den Code von einer microSDHC-Karte ausführen kann.

Der MAX32652 verfügt außerdem über ein vollständiges SDHC-Interface, das primär für die Datenspeicherung vorgesehen ist.

Es ist wichtig zu beachten, dass diese Schnittstellen zum Mikrocontroller Programmspeicherschnittstellen sein müssen. Unabhängig vom verwendeten Busprotokoll oder der verwendeten Schnittstelle muss der Mikrocontroller einen Flash-Boot-Code auf dem Chip enthalten, um die Schnittstelle zur microSDHC-Karte zu initialisieren.

Sicherheit im Sockel

Der Sockel von microSDHC-Karten für industrielle Anwendungen wird oft vernachlässigt. Bei Anwendungen in rauen Umgebungen können Zinn oder ähnliche Kontaktmaterialien mit der Zeit anlaufen oder ihre Zugfestigkeit verlieren. Goldkontakte kosten zwar mehr, sind aber die Kosten wert, da sie eine robuste Kontaktierung sicherstellen, die ihre Zugfestigkeit über die Zeit beibehält.

Der Universal-Flash-Speicher (UFS) 10101704J6#2A und der microSDHC-Anschluss/Sockel von Amphenol ICC bieten eine solide Verbindung für jede microSDHC-kompatible Karte (Abbildung 3). Diese Buchse verfügt über Anti-Stubbing-Kontakte, die verhindern, dass Speicherkarten beim Einstecken und Ausziehen klemmen.

Bild vom Amphenol-UFS 10101704J6#2A und microSDHC-Kartenanschluss/Sockel

Abbildung 3: Der 10101704J6#2A UFS- und microSDHC-Kartenanschluss/-sockel unterstützt sowohl vorhandene microSDHC-Karten als auch UFS-Karten der nächsten Generation mit Datenübertragungsgeschwindigkeiten von bis zu 6 GB/s. (Bildquelle: Amphenol)

Dieser Amphenol-Sockel unterstützt auch zukünftige Erweiterungen, da er mit dem neuen UFS-Format (Universal Flash Storage) kompatibel ist, das einen ähnlichen Formfaktor wie microSDHC hat, jedoch eine andere Kontaktfläche aufweist (Abbildung 4). Die UFS-Karte unterstützt die doppelte Geschwindigkeit von microSDHC-Karten mit differenzieller bidirektionaler Datenübertragung.

Bild der microSDHC-Karte (links) und der UFS-Karte (rechts)

Abbildung 4: Eine microSDHC-Karte (links) und die neue UFS-Karte (rechts). Die UFS-Karte unterstützt die doppelte Geschwindigkeit von microSDHC-Karten mit differenzieller bidirektionaler Datenübertragung. (Bildquelle: DigiKey)

Manche vernetzten IoT-Knoten befinden sich möglicherweise an entfernten Standorten, an denen Wi-Fi nicht verfügbar oder nicht praktikabel ist. In solchen Situationen kann die Vernetzung der Datenverbindung über Mobilfunk erfolgen. Dafür ist eine SIM-Karte erforderlich, die ebenfalls gesockelt werden muss.

Eine einfache und platzsparende Lösung ist die Verwendung eines kombinierten Sockels für microSDHC- und SIM-Karten wie dem Dual-SIM- und microSDHC-Kartensockel 1041681620 von Molex (Abbildung 5). Dieser Sockel ist ebenfalls mit Goldkontakten ausgestattet, um auch in rauen Umgebungen eine stabile Verbindung zu gewährleisten. Er verfügt auch über Anti-Stubbing-Kontakte.

Bild des Kombinationssockels von Molex 1041681620 für SIM- und microSDHC-Karte

Abbildung 5: Der Kombinationssockel 1041681620 für SIM-Karte und microSDHC-Karte reduziert den Platzbedarf auf der Leiterplatte deutlich und ist mit Anti-Stubbing-Kontakten ausgestattet, um Fehler beim Einstecken und Herausziehen zu vermeiden. (Bildquelle: Molex)

Zusammenfassung

MicroSDHC-Flashkarten sind in der Regel für die Datenspeicherung verwendet worden. Durch technische Verbesserungen entsprechen sie nun auch den besonderen Anforderungen zur Ausführung des Programmspeichers für eingebettete Betriebssysteme. Dazu gehört auch die Entwicklung schneller Flash-Speicher, die konstante Leseanforderungen unterstützen. Darüber hinaus werden die Mikrocontroller weiterentwickelt, um neue Speicherschnittstellen zu unterstützen, die zuverlässig Code von einer externen microSDHC-Karte ausführen können, während Flash-Fehler reduziert oder eliminiert werden.

DigiKey logo

Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der DigiKey oder offiziellen Politik der DigiKey wider.

Über den Autor

Image of Bill Giovino

Bill Giovino

Bill Giovino ist Elektronikingenieur mit einem BSEE von der Syracuse University und einer der wenigen, die erfolgreich vom Entwicklungsingenieur über den Anwendungsingenieur zum Technologiemarketing wechselten.

Seit über 25 Jahren wirbt Bill für neue Technologien vor technischem und nicht-technischem Publikum für viele Unternehmen, darunter STMicroelectronics, Intel und Maxim Integrated. Während seiner Zeit bei STMicroelectronics trug Bill dazu bei, die frühen Erfolge des Unternehmens in der Mikrocontroller-Industrie voranzutreiben. Bei Infineon inszenierte Bill die ersten Erfolge des Unternehmens im Bereich Mikrocontroller-Design in den USA. Als Marketingberater für sein Unternehmen CPU Technologies hat Bill vielen Unternehmen geholfen, unterbewertete Produkte in Erfolgsgeschichten zu verwandeln.

Bill war zudem ein früher Anwender des Internets der Dinge, einschließlich der Implementierung des ersten vollständigen TCP/IP-Stacks auf einem Mikrocontroller. Die Botschaft von „Verkauf durch Aufklärung“ und die zunehmende Bedeutung einer klaren, gut geschriebenen Kommunikation bei der Vermarktung von Produkten im Internet sind Bills Anliegen. Er ist Moderator der beliebten „Semiconductor Sales & Marketing Group“ auf LinkedIn und spricht fließend B2E.

Über den Verlag

Nordamerikanische Fachredakteure von DigiKey