Forum: Mikrocontroller und Digitale Elektronik Dateisystem für SD-Karten: FAT / JFFS2 / YAFFS2


von Marc (Gast)


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!

von Martin Thomas (Gast)


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).

von Michael Jungnickl (Gast)


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üß

von herbert (Gast)


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

von embLin (Gast)


Lesenswert?

Ist JFFS2 überhaupt möglich auf Block devices wie MMC/SD ? Oder ginge 
das nur mit NAND/NOR ... ?

Beispielsweise ein anderes Format das ubifs eben nicht auf den MMC/SDs 
funktioniert.

von Rudolph (Gast)


Lesenswert?

embLin schrieb:
> Ist JFFS2 überhaupt möglich auf Block devices wie MMC/SD ?

Mal davon ab, dass der Thread von 2006 ist.
Eine Festplatte ist auch in Blöcken organisiert.

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.