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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.