Dateisystem für SD-Karten: FAT / JFFS2 / YAFFS2

Gast #352483
Lesenswert?

Hallo zusammen,

ich frage mich, ob FAT das beste Dateisystem fuer eine SD-Karte ist.

Die meisten, die ein Dateisystem auf einer SD-Karte verwenden, nutzen
wohl FAT. Dazu gibt es ja auch einige Implementationen und
Kompatibilitaet mit den gaengigsten Betriebssystemen sollte auch
gegeben sein.

Jedoch ist FAT fuer Flash-Speicher sehr ineffizient, da die FA-Table
oft neu geschrieben wird. Dadurch altern bestimmte Bereiche der Karte
uebermaessig schnell und es koennen sich Fehler ergeben.

Eine Alternative ist das JFSS2 oder YAFFS2, das die `Abnutzung'
gleichmaessig verteilt.

Meine Frage:
Gibt es da schon Implementationen fuer uC (am liebsten in C, evtl. mit
ein paar ASM-Zeilen fuer Performance) und entsprechende Treiber, um die
Karte dann auch unter Windows (>2k) und Linux (Kernel >= 2.4) lesen und
ggf. schreiben zu koennen?

Zu YAFFS hab ich gesehen, dass es einen WindowsCE Treiber gibt.
(http://www.aleph1.co.uk/taxonomy/term/31/index.html)

Anregungen und Erfahrungen herzliche willkommen!
Gast #352484
Lesenswert?

Nur Randbemerkung: Ganz so schlimm ist das mit dem FAT wiederbeschreiben
nicht. Viele Libraries nutzen ein oder mehr FAT-Buffer. Weiterhin halten
SD-Karten Reservesektoren vor, die transparent eingeblendet werden. Es
gibt sogar spezielle "Industrial SD" die angeblich noch oefter
wiederbeschreibar sind und noch mehr Reservesektoren vorhalten
(angeblich, da zumindest mir keine detaillierteren Informationen zu den
"Industrial"-Karten bereitgestellt wurden).
Gast #352485
Lesenswert?

Hallo Marc,

wie Martin schon anmerkt, läßt sich die Speicherung und Zugriffszeit
auf die FAT Tabellen optimieren, indem man für jeden Sektor die 16/32
Bit großen Einträge im RAM puffert. Dazu braucht man allerdings
zusätzlich 512 Bytes RAM. Wird die FAT Tabelle verändert, geschieht
dies zuerst im RAM, wobei man ein entsprechendes Flag setzen kann. Wird
eine neue FAT Tabelle gelesen, speichert man zuvor die aktuelle FAT
Tabelle im RAM ab und setzt das Flag zurück. Dies erspart die nötige
Speicherung der FATs bei jedem Cluster. Letztendlich fasst man dadurch
bis zu 256 (FAT)/ 128 (FAT32) Schreibzugriffe zusammen, was die
Effektivität um mehr als 99% steigert. (Spiegelung nicht vergessen.)

Problematisch sind bei Speicherkarten eher das Abziehen und Stecken.
Dafür entwickeln einige Hersteller gerade an TFAT (Transacton Save FAT)
herum. Ein weiterer Fehler bei einigen Kartenlesegeräten und Windows ist
die nicht erfolgende Aktualisierung des Directorys, wenn man eine Karte
einfach einsteckt. Das kann man durch Änderung der
Datenträgerbezeichnung erzwingen.

Für WinCe warte ich momentan auf einen FAT32 Treiber.

Tschüß
Gast #352486
Lesenswert?

Hallo Marc,
kein Mensch würde wegen eines 'schnelleren' Alterns auf JFSS oder
YAFFS umsteigen, ausser du möchtest mal eine neue Herausforderung.

Natürlich hat FAT grossen Nachteile hinsichtlich den anderen
FileSysteme bsp. den transaktionssichereren FS wie z.B. TFAT
(eigentlich WinCE, wobei manche davon überhaupt nicht überzeugt sind),
aber es ist halt ein überall bekanntes FS mit vielen Portierungen..

Hinsichtlich dem Altern würde ich dir mal empfehlen den Aufbau einer
SD-Flashkarte oder CompactFlashkarte anzuschauen -- gerade dort sind
die Sektoren die du über die IDE bzw. der SPI (o.ä) siehst nicht der
physikalische Sektor auf dem NAND-bzw. NORFlashs.
Da ist einiges an Firmware dazwischen, die das Verteilen der Zugriffe
und bsp. ein BAD-BlockManagement (NAND) durchführt, so dass das ganze
fast wie ein 'Festplatten'-Ersatz funktioniert.
Da steckt einiges an Know-How dahinter und ist nicht in wenigen Worten
zu beschreiben.
Tatsache ist, daß wie auch beim normalen PC == einfach Netzstecker
ziehen, hier das Entnehmen der Karte ohne vorheriges benachrichten des
OS zu fatalen Auswirkungen führt -- da ist halt FAT nicht das beste FS.
Hier kämen die 'neuen' transaktionssichere FS zum Zuge...

hoffe Dir ein bischen geholfen zu haben

gruss herbert

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren