MMC / SD-Kartenschnittstelle - Zugriff auf Informationen zum Verschleißausgleich? (Zähler usw.)

7

Ich nehme nicht an, dass die MMC / SD-Kartenspezifikation etwas zum Abrufen von Informationen zum Löschen von Zählungen auf einer MMC / SD-Karte enthält, oder?

Mein Ziel ist es, mein eingebettetes System dazu zu bringen, das Schreiben in Metadaten wie den letzten Zugriff oder geänderte Zeiten zu vermeiden, Dateien mit mäßiger Größe zuzuweisen, die mit 0xFF sa gefüllt sind, und nur Datensätze darin anzuhängen.

Dies soll das Risiko eines Datenverlusts verringern, da die Stromversorgung jederzeit unterbrochen werden kann.

Die Verschleißausgleichsalgorithmen von MMC / SD-Karten sind jedoch unbekannt und möglicherweise sehr schlecht implementiert. Ich muss sicherstellen, dass die Karten nicht versuchen, Datenblöcke zu löschen, wenn ich nur Daten über 0xFFs schreibe. Wenn also so gut wie jede Art von Löschanzahl (Summe für die Festplatte, pro Block, was auch immer) zum Lesen verfügbar wäre ... wäre das großartig.

Ich bin mir nicht ganz sicher, wo diese Frage lebt ... aber da es sich um Dinge auf SD-Kartenprotokollebene handelt, dachte ich mir vielleicht hier.

BEARBEITEN

Ich glaube, ich werde weitermachen und die Dinge überkomplizieren. Festplattentests haben gezeigt, dass zumindest die SD-Karten, die ich habe, Blöcke löschen, selbst wenn die von Ihnen geschriebenen Daten nicht mit dem Inhalt auf der Festplatte übereinstimmen. Ich speichere bis zu 128 KB Daten in direkt steuerbarem NAND (mit dem ich das Schreibverhalten etwas besser steuern kann) und schreibe dann 128 KB-Blöcke in eine 128 KB-ausgerichtete Datei auf der VFAT-Partition. Das sollte die Exposition so weit wie möglich begrenzen ... aber wow, wie hässlich und kompliziert.

darron
quelle
2
Bei meinem nächsten Datenlogger denke ich darüber nach, alles zweimal redundant auf zwei Speicherkarten zu schreiben. Zuerst eine und dann - nachdem ich sicher bin, dass der erste Schreibvorgang abgeschlossen ist - die gleichen Daten in die andere. Unabhängig davon, wann die Batterien ausfallen, ist im schlimmsten Fall eine Karte beschädigt und alle Daten (außer vielleicht dem letzten Block) sind auf der anderen Karte sicher.
Davidcary

Antworten:

5

Ich weiß nicht, ob bestimmte SD-Karten Informationen zum Abnutzungsgrad enthalten, aber zum größten Teil würde ich vorschlagen, dass Ihr Wunsch, das Löschen von Blöcken mit FFs zu vermeiden, fehl am Platz ist. Selbst wenn ein virtueller Plattenblock nur FFs enthält, enthält er mit ziemlicher Sicherheit andere Adressinformationen und Fehlerkorrekturdaten, die neu geschrieben werden müssen, wenn Änderungen am Block vorgenommen werden, unabhängig von seinem vorherigen Inhalt.

Ich glaube, dass SD-Kartenhersteller ihre eigenen Algorithmen auswählen können, um zu entscheiden, wann Blöcke neu geschrieben werden sollen, auf die seit einiger Zeit nicht mehr zugegriffen wurde, und um die Datenintegrität bei einem Stromausfall sicherzustellen. Folglich kenne ich keine bestimmte Methode, um sicherzustellen, dass eine SD-Karte nicht beschädigt wird, wenn die Stromversorgung während eines Schreibvorgangs ausfällt.

Superkatze
quelle
Ah, großartiger Punkt. Ich habe die ECC-Bits vergessen. Das bringt diese Idee ziemlich durcheinander. Hmm ... Ich denke, diese Frage ist erledigt ... Ich werde das Linux-Board nach zuverlässigen Dateisystemen in dieser Situation fragen.
Darron
@darron: Es ist eine interessante Frage; Ich habe es hochgestimmt (jemand anderes hat es herabgestimmt). Da MMC- und CompactFlash-Karten eine virtuelle Blockzuordnungsschicht auf ein Raw-Flash-Gerät legen, ist es unwahrscheinlich, dass sie dieselben Details zum Verschleißabgleich wie bei SmartMedia aufweisen. Während virtualisierungsbasierte Standards wie SD / MMC besser an sich ändernde Technologien angepasst werden können als "Raw Bits" -Standards wie SmartMedia, bietet es für einige Anwendungen definitiv Vorteile, zu wissen, was tatsächlich vor sich geht.
Supercat
1
@darron: Ich weiß nicht, ob Sie überhaupt mit der Funktionsweise moderner Flash-Laufwerke vertraut sind, aber sie sind im Allgemeinen so konzipiert, dass sie auf Seiten mit 528 Bytes geschrieben werden, während sie nur in viel größeren Blöcken gelöscht werden können (ich denke 32 KB, aber vielleicht 128KB oder noch größer). Wenn eine Anforderung zum Schreiben eines Sektors gestellt wird, findet das Flash-Laufwerk eine leere Seite, falls vorhanden, schreibt den neuen Sektor dort und zeigt irgendwie an, dass die neue Seite die "echte" für diesen Sektor und die alte ist ist obsolet. Wenn die Anzahl der verfügbaren leeren Seiten nahe am Wert eines Blocks liegt (oder zu verschiedenen anderen Zeiten), ...
Supercat
1
@darron: ... das System versucht, einen Block mit den veraltetesten Seiten zu finden, kopiert alle Seiten dieses Blocks auf leere Seiten und löscht dann den gesamten Block. Ein Problem bei diesem Ansatz besteht darin, dass eine Festplatte mit wenigen leeren Seiten, z. B. einer "veralteten" Seite pro Löschblock möglicherweise selbst über viel verfügbaren Speicherplatz verfügt. Für das Schreiben jeder Seite muss jedoch ein Block gelöscht und eine Seite kopiert werden Daten in den neuen Block. Langsam.
Supercat
1
Hmm. Es ist schlimmer als ich dachte ... In No-Fs-Buffer-Tests direkt auf die Festplatte dauerte das Schreiben genau des gleichen Inhalts in einen Block genauso lange wie das Schreiben geänderter Blöcke (~ 10 Sekunden für 1000 64-KB-Datensätze). Ich konnte auch feststellen, dass der Löschblock meiner speziellen SD-Karte sehr wahrscheinlich 64 KB beträgt.
Darron