Forum: Mikrocontroller und Digitale Elektronik Wear-Leveling-Library für Flash-Speicher


von Mike (Gast)


Lesenswert?

Ein Datenlogger speichert Daten auf einem seriellen 256 Mbit 
Flash-Baustein (W25Q256). Das Ganze soll über USB auslesbar sein, 
deshalb wurde FAT16 als Filesystem verwendet, genutzt wird FATFs von 
ElmChan. Am USB verhält sich das Gerät als normaler Massenspeicher.
Das Ganze funktioniert auch, allerdings beschreibt FAT den Speicher sehr 
ungleichmäßig. Die File Allocation Table wird sehr häufig beschrieben, 
so dass zu befürchten ist, dass die zugehörigen Sektoren schnell 
verschleißen und ausfallen.
Ein Wear-Leveling muss also her. Dieses würde ich zwischen Dateisystem 
und Flash-Treiber schalten. Bei Microchip gibt es dazu eine application 
note:
https://www.microchip.com/en-us/application-notes/an32194

Leider weiss ich nicht, wo ich die dort erwähnte Library finden kann. 
Die Suche nach "ftl" liefert nur unbrauchbare Ergebnisse.

Kennt jemand eine freie Bibliothek, die ich nutzen kann?

Selbst programmieren wäre auf den ersten Blick natürlich auch möglich, 
man müsste eine Tabelle anlegen, die die logischen und physischen 
Addressen aufeinander abbildet. dazu noch Zähler für die Anzahl der 
Schreibvorgänge. Das Problem ist, dass diese Tabellen ja auch im Flash 
abgelegt werden müssen, um sich beim Abschalten nicht zu verflüchtigen. 
Damit kämen auch wieder viele Schreibvorgänge auf die gleiche 
Speicheradresse zustande.

von avr (Gast)


Lesenswert?

littlefs und für USB nimmt man sinnvollerweise ein MTP-Device.

von Falk B. (falk)


Lesenswert?

Nimm eine Micro-SD-Card. Einfacher, schneller und billiger geht es 
nicht.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Falk B. schrieb:
> Nimm eine Micro-SD-Card. Einfacher, schneller und billiger geht es
> nicht.

Für Einzelstücke und Kleinserien stimme ich dem durchaus zu, wobei es 
aber ganz beträchtliche Qualitätsunterschiede zwischen verschiedenen 
microSD-Kartentypen und -Herstellern gibt. "Jeder" weiß, dass billige 
Karten etwa so zuverlässig sind wie billige USB-Speicherschniepel.

Für wirklich hochwertige microSD-Karten, vorzugsweise noch als SLC- oder 
zumindesten MLC-Flash, zahlt man auch schnell 30-200 Euro. Die würde ich 
auf Grund der massiven Fälschungsgefahr auch nicht bei "irgendeinem" 
Online-Shop kaufen, sondern nur bei einem der offiziellen Distributoren 
oder gar dem Hersteller selbst. Ich kann Swissbit empfehlen, erhältlich 
z.B. bei Mouser oder direkt.

Den anderen Weg, nämlich hostseitig MTP statt FAT anzubieten, halte ich 
generell auch für sehr sinnvoll, da hierdurch keine physische 
Dateisystemstruktur vorausgesetzt wird. Oder gibt es schon Bibliotheken, 
die hostseitig FAT emulieren, aber intern auf beliebigen (virtuellen) 
Dateizugriffsfunktionen basieren?

von Olaf (Gast)


Lesenswert?

Es gibt doch auch noch aufloetbare ICs welche wie MicroSD
angesprochen werden. Die sollten doch dann auch WL enthalten?

Olaf

von Falk B. (falk)


Lesenswert?

Olaf schrieb:
> Es gibt doch auch noch aufloetbare ICs welche wie MicroSD
> angesprochen werden.

eMMC.

https://de.wikipedia.org/wiki/Multimedia_Card#Embedded_MultiMedia_Card

> Die sollten doch dann auch WL enthalten?

Vermutlich.

von Stefan F. (Gast)


Lesenswert?

Nachdem in meinem Fotoapparat mehrmals Speicherkarten ausfielen, hatte 
ich mal deutlich tiefer ins Portemonnaie gegriffen und eine gute Karte 
von Sony gekauft, mit 10 Jahren Garantie auf die Daten. Die Karte hat 
etwa 5x soviel gekostet wie normale. Damit hatte ich dann keine Probleme 
mehr.

von Mike (Gast)


Lesenswert?

Olaf schrieb:
> Es gibt doch auch noch aufloetbare ICs welche wie MicroSD
> angesprochen werden. Die sollten doch dann auch WL enthalten?
>
> Olaf

Mit SD-Karten als Datenspeicher habe ich schon gearbeitet, leider auch 
mit schlechten Erfahrungen. Auch wenn die mittlere Datenrate hoch ist, 
genehmigen sie sich manchmal sehr viel Zeit beim Schreiben, die 
Spezifikation erlaubt hier bis zu 250ms. Vermutlich liegt das am 
Wear-Leveling, das gelegentlich größere Datenblöcke umschaufelt. Wenn in 
diesem Moment gerade viele Daten zum Speichern eintrudeln, läuft der 
innere Puffer des µC über. Ich kenne keinen Weg, den Moment des 
Wear-Leveling aktiv zu steuern, z.B. beim Hochfahren oder in einer 
ruhigen Phase.

Außerdem ist in den Karten und auch den eMMC meines Wissens NAND-Flash 
verbaut, das deutlich weniger Schreibvorgänge zulässt als NOR-Flash 
(3-10.000 vs 100.000). Das kann man natürlich durch eine höhere 
Speicherkapazität wieder ausgleichen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.