Forum: Mikrocontroller und Digitale Elektronik Filesystem für AVR Implementation (mit SD Karte)


von Simon K. (simon) Benutzerseite


Lesenswert?

Heyho.

Ich woltle demnächst sowas ähnliches wie ein NAS (Network attached
Storage) mit einem AVR basteln. Das Augenmerk soll natürlich nicht auf
die Leistung gehen, sondern eher so auf die Langeweile, die man damit
verdrängt ;)

Als Massenspeichermedium wollte ich eine kleine SD Karte einsetzen. Da
dieser Massenspeicher aber nur von dem Mikrocontroller im NAS
angesprochen werden muss, ist das Dateisystem, was ich verwende, frei
wählbar.

Nun meine Frage, was meint ihr, ist ein schnelles Filesystem, was aber
auf der anderen Seite nicht eine übertriebene Implementation nach sich
zieht?

-beim FAT FS muss ständig in der FAT geschaut werden wo weitere Daten
liegen. Auch die Erstellung von Dateien ist nicht so einfach, da freie
Cluster gesucht werden müssen usw..
-beim ReiserFS müssen diese B*Bäume nach dem Schreiben neu balanced
werden. Das zu implementieren ist ja auch nicht gerade einfach.
-Selbstgebautes Dateisystem?
-was völlig anders...

Ich hoffe auf eure Ratschläge ;)

von Michael U. (Gast)


Lesenswert?

Hallo,

schau Dir doch mal spaßeshalber das gute alte Amiga-FastFileSystem an.
Ich hatte das mal auf einer MMC-Card eines MP3 Player benutzt, die
Struktur war für einen AVR sehr günstig.
Unter Linux könnte man die Karte dann sogar lesen/schreiben, allerdings
ist es wohl aus den neueren Kernels rausgeflogen.

Gruß aus Berlin
Michael

von Simon K. (simon) Benutzerseite


Lesenswert?

Ok, ich werde mir das mal anschauen.

Weitere Tipps sind willkommen ;)

von Hagen (Gast)


Lesenswert?

Ganz vereinfachtes FAT das nur ein einzigste Datei öffnen kann. Diese
Datei wird extern zb. auf dem PC angelegt und hat dann zb. eine Größe
von 100Mb oä. In dieser Datei baust du dann dein eigenes Filesystem
rein.

Gruß Hagen

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Nimm doch einfach FAT, dafür gibt's schon haufenweise Code.

von Rolf Magnus (Gast)


Lesenswert?

Hier wären ein paar Beispiele:
http://de.wikipedia.org/wiki/Filesystem#Beispiele_f.C3.BCr_Dateisysteme

Vielleicht ist auch das interessant:
http://en.wikipedia.org/wiki/YAFFS
Es ist speziell für Flash-Speicher gemacht.

von Simon K. (simon) Benutzerseite


Lesenswert?

@Rolf:

Ah! Dieses YAFFS sieht doch auf den ersten Blick schon sehr gut aus.
Danke für deine Links

von Simon K. (simon) Benutzerseite


Lesenswert?

Da bin ich wieder. Hab mir einiges zu dem Thema durchgelesen. Dieses
YAFFS sieht in der Tat ganz gut aus.
Allerdings gibts da einen Punkt, den ich nicht verstehe:

Pro Page(512 Byte üblicherweise) soll es eine 16 Byte Spare-Page geben.
Diese benutzt der SD-Controller um keinen Speicherplatz bei defekten
Sektoren zu erleiden. Er nutzt dann einfach ein paar bits aus der Spare
Page statt die aus der originalen Page.

YAFFS(*) jedoch macht sich diese Spare Page zu nutze.
"...File data is stored in fixed size "chunks" consistent with the
size of a page (ie. 512 bytes). Each page is marked with a file id and
chunk number. These tags are stored in the "spare data" region of the
flash. The chunk number is determined by dividing the file position by
the chunk size....."

Nur, wenn ich YAFFS jetzt implementieren will, muss ich irgndwie an
diese Spare-Page über die übliche Schnittstelle herankommen.
->Aber wie?

In Datenblättern findet man nichts über diese Spare-Pages, außer dass
sie zu dem oben genannten Zweck verwendet werden.

Weiß hier jemand Rat?
Ich wäre sehr dankbar!



(*) http://www.aleph1.co.uk/node/37

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

YAFFS ist anscheinend nur für nackte Flash-Chips gedacht. MMC/SD-Karten
machen all diese Tricks zur Erkennung von Fehlern usw. bereits selbst.
Du kannst im Zweifelsfall davon ausgehen dass sie dabei auf FAT
optimiert sind, da das das mit Abstand am häufigsten verwendete
Dateisystem ist. Ich bezweifle deshalb dass du durch ein anderes FS
irgendwas gewinnst, geschweige denn dass der Gewinn in vernünftigem
Verhältnis zum Aufwand steht.

von Hagen (Gast)


Lesenswert?

Die gleiche Frage hatte ich mir beim Durchlesen bei Wikipedia auch
gestellt. SD Karten machen die Fehlererkennung intern und ohne Einfluss
von Aussen.

Meine Idee wäre es mehre Sektoren der SD Karte dafür zu benutzen.
Angenommen:

512 Bytes/Sektor
die ersten 2 Sektoren der Karte als Header
dann eine Quasi-FAT mit 16 Bytes pro Daten-Sektor, macht 16*32 = 512,
ergo für 32 Sektoren kannst du im FAT Sektor Daten speichern.

Statt also die 16 Bytes in jedem 512 Bytes Sektor zu speichern und
damit ja auch 16 Bytes weniger an Daten zu haben, baust du einfach eine
FAT. Indizierung ist ganz einfach da ja sequientiell zu jedem
Datensektor in dieser FAT 16 Bytes gespeichert werden.

Gruß Hagen

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.