Ich kann keine verlässlichen Informationen darüber finden. Ich habe nicht die vollständige Spezifikation der SD/MMC-Kartenhardware.
Ist es wahr? Meine High-Level-Anwendung muss sich bei der Arbeit mit diesen Karten nicht mit Wear Leveling befassen?
BEARBEITEN
Könnte jemand bestätigen, dass Wear Leveling durch die SD-Spezifikation garantiert wird? Ich möchte sicher sein, denn es sieht so aus, als würden die meisten Anbieter dies tun, aber die Spezifikation erfordert es nicht.
Ich arbeite für ein Unternehmen, das früher Mitglied der SD Association war, wir sind mit der 2.0 (SDHC)-Spezifikation vertraut. Die SD-Kartenspezifikation hat KEINEN Eintrag für Wear Leveling. Das hängt vollständig vom SD-Hersteller ab, der dies handhabt, wenn er dies wünscht. Wir haben gesehen, dass einige dies wahrscheinlich tun, während andere dies sehr wahrscheinlich nicht tun (Vorsicht vor den supergünstigen gefälschten SD-Karten). SDXC hat das vielleicht geändert, um Wear Leveling einzuschließen, aber da bin ich mir nicht sicher. Leider ist die einzige Möglichkeit, dies wirklich zu zeigen, die offizielle Spezifikation in die Finger zu bekommen. Sie können es höchstwahrscheinlich online finden, aber die SD Association möchte wirklich, dass Sie dafür bezahlen.
Als Nebenbemerkung: Wenn Sie eine 2-GB-Karte nehmen und sie immer wieder von Anfang bis Ende beschreiben, werden im Durchschnitt etwa 10 TB benötigt, bevor die Karte tot und nicht mehr beschreibbar ist. Außerdem lassen SD-Karten Sie nicht wissen, wenn Daten schlecht sind, dh sie geben keinen I/O-Fehler zurück, wie es eine PC-Festplatte tun wird. Dies ist möglicherweise kein Problem für eingebettete Designs, da 10 TB eine Menge Daten sind, aber es könnte für jemanden ein Faktor sein.
Es ist wahr! MicroSD-Karten enthalten einen NAND-Flash-Chip, der mit einem (ARM)-Mikrocontroller verbunden ist, der in schwarzem Kunststoff eingekapselt ist. http://www.bunniestudios.com/blog/?p=898 erklärt.
Am Ende des Folgeposts http://www.bunniestudios.com/blog/?p=918 postuliert Bunnie, dass die Integration des Controllers wahrscheinlich weniger kostet, als den Flash im Voraus zu testen.
Zitat aus dem Produkthandbuch für SD-Karten von SanDisk: "1.9 Wear Leveling. Wear Leveling ist ein wesentlicher Bestandteil der Erase-Pooling-Funktionalität der SD-Karte, die NAND-Speicher verwendet." Das Ganze können Sie im Datenblatt einer Karte der Marke SanDisk nachlesen .
Ja, SD/MMC-Karten haben Controller, die Wear Leveling durchführen. Wenn sie es nicht täten, könnten Sie einen innerhalb weniger Minuten mit den falschen Schreibmustern zerstören.
Das ist tatsächlich ein Problem für einige eingebettete Projekte. Es gibt (anscheinend) absolut keine Möglichkeit zu wissen, welche Sektoren zu irgendeinem Zeitpunkt abgenutzt sein könnten, sodass ein Aus- und Einschalten zur falschen Zeit Daten überall auf der Karte zerstören kann, egal wo Sie schreiben. (frag nicht woher ich das weiß :))
SD-Karten müssen mit einem System verwendet werden, das ein sauberes Herunterfahren des Systems garantiert (oder zumindest das Abschließen von Schreibvorgängen zulässt), oder es kommt (letztlich) zu Datenverlust.
BEARBEITEN
Das Problem ist, dass der Wear-Leveling-Prozess vollständig verborgen ist. JEDER Sektor auf der Festplatte könnte jederzeit verschoben (ausgetauscht werden, während die Seite geschrieben wird), und wenn der Strom mitten in diesem Prozess ausfallen würde, könnte dieser zufällige Sektor beschädigt werden.
Obwohl es einigermaßen sichere Möglichkeiten gibt, diesen Schritt zu implementieren, ist er in keiner Spezifikation enthalten, sodass Sie nicht darauf vertrauen können, dass die Karte dies tut. Sie könnten eine Karte testen, sie zum Laufen bringen, dann könnte der Hersteller die Implementierung ändern, ohne die Teilenummer zu ändern, und Sie sind am Arsch.
Nach Tests macht der Controller meiner SD-Karten dies überhaupt NICHT auf sichere Weise.
Ich kann mir eine "hochzuverlässige" SD-Karte ansehen, die speziell für Stromausfalltoleranz beworben wurde ... aber dann müssen Sie dem Hersteller vertrauen, dass er das richtig macht, und ich tue es nicht. Ich möchte wirklich die direkte Kontrolle über das Löschen von Seiten haben. Ich versuche immer noch, das herauszufinden.
Jede Art von SD-Karte, die irgendeine Art von herkömmlichem NAND-Flash-Speicher verwendet, muss irgendeine Art von Sektorvirtualisierung verwenden, da kein herkömmliches NAND-Flash-Gerät das Löschen einzelner 512-Byte-Sektoren unterstützen kann und kein herkömmliches NAND-Flash-Gerät von signifikanter Größe würde in der Lage sein, eine Leistung zu erbringen, die in einer Größenordnung liegt, die sogar geringfügig akzeptabel ist, wenn jeder Versuch, einen Sektor zu schreiben, erfordert, dass das Gerät alle Sektoren im Löschblock dieses Sektors (sogar in den RAM) kopiert, dann den Block löscht und schreibt alle Sektoren zurück. Die meisten Sektorvirtualisierungstechniken sind von Natur aus etwas verschleißausgleichend. Ich würde erwarten, dass das größte Problem der Abweichung zwischen Qualitätsgeräten und Imitaten das Ausmaß ist, in dem ein Gerät aktiv versucht, die Nivellierung zwischen den Blöcken auszugleichen. im Gegensatz zur einfachen Verwendung einer pseudozufälligen Blockzuweisung und der Hoffnung, dass dies zu akzeptabel nahezu einheitlichen Ergebnissen führt. In der Praxis würde ich erwarten, dass selbst eine zufällige/auf das Beste hoffende Zuweisung in den meisten Fällen angemessen wäre.
Sandisk hat ein Whitepaper , das die Wear-Leveling-Logik in seinen Karten erklärt und Schätzungen über die Lebensdauer der Karte unter einer Reihe von Szenarien gibt. Zusammenfassung: Wenn Sie nicht ununterbrochen auf die Karte hämmern, wird sie Jahrzehnte dauern.
Es ist interessant festzustellen, dass trotzdem viele Geräte SD- und microSD-Karten beschädigen, insbesondere solche mit hoher Dichte, wenn der Akku schwach ist oder das Telefon abstürzt / herunterfährt / etc. Ich vermute, dass das Problem in einer unzureichenden Regulierung der Spannungsversorgung liegt, da dies bei einigen Karten (hust Ad t /hust) bekanntlich zu dem Phänomen einer nicht lesbaren Karte bei bestimmten externen Lesegeräten führt, aber bei der von einigen gelieferten Micro-Variante problemlos funktioniert Computergeschäfte.
Ich bin gerade dabei, eine Karte mit diesem Fehler wiederherzustellen, seltsamerweise sind die meisten Daten wiederherstellbar, aber einige Sektoren nicht, obwohl sich dies bei jedem Versuch ändert. Könnte das Wear Leveling selbst schuld sein? (Ja, mehrere Lesegeräte ausprobiert, gleicher Fehler!)
Hatte auch einige Erfolge beim "Nuking" von Zombiekarten, dh solchen, die ein Format nicht vervollständigen oder schreibgeschützt sind. Funktioniert nur zu einem kleinen Prozentsatz, aber sie sind viel empfindlicher als die meisten "offiziellen" Richtlinien für die Wirkung.
Eine so behandelte Testkarte hielt volle vier Monate, bevor sie erneut versagte, wenn das Gerät, mit dem sie eine verrauschte Spannung lieferte, nicht gewesen wäre, hätte die Lebensdauer länger sein können.
Chetan Bhargava