2010-07-14 2 views
7

Ich bin auf der Suche nach einer Speicherbibliothek zum Speichern von Daten im Flash-Speicher in einem eingebetteten System. Ich bin kurz davor, eine eigene zu schreiben, weil ich kein Format mit der richtigen Mischung aus Funktionen und Einfachheit habe.Flash-Speicher-Datenformat

Idealerweise wäre es eine Format- und C/C++ - Bibliothek mit etwas Besserem als das Speichern von Rohstrukturen, aber weniger komplex als ein vollständiges Dateisystem. Ich muss mehrere Datenstrukturen speichern, von denen einige optional sind und das Format von Zeit zu Zeit ändern können.

Schön zu haben wäre einfach Wear Leveling/Journaling Schemata und Daten Redundanz/Zuverlässigkeit Funktionen. Das einfache Journaling liegt daran, dass die meisten Low-Level-Flash-Chips, mit denen ich arbeite, am glücklichsten sind, wenn Sie von einem Ende zum anderen schreiben und von oben anfangen. Datenredundanz/Zuverlässigkeit könnte die Verwendung und Überprüfung von Paritätsbits oder vollständige zusätzliche Kopien sein.

Irgendwelche Vorschläge?

+0

NAND- oder NOR-Flash verwendet werden kann? Ich rate NAND, weil Sie sich für Wear Leveling interessieren? Wenn es NOR ist, müssen Sie sich zumindest in den meisten Situationen nicht um Ihre aufgeführten Probleme kümmern. –

+0

Die Datenblätter sagen nicht wirklich über NAND vs NOR. Eigentlich bin ich mir nicht sicher, ob es genau das ist, was ich brauche. Das Datenblatt fragt nach Ende-zu-Ende-schreibt alle x schreibt in einen Sektor, so dass möglicherweise tatsächlich über eine Art von internen Operation für die Defragmentierung. – Digikata

+0

FAT sieht in Bezug auf einen Dateisystemansatz am ähnlichsten aus, so dass dies im Moment als die Antwort markiert ist. Allerdings schaue ich auch auf UBIFS und bin immer noch offen für das Schreiben meiner eigenen, da die FAT-Lösung nicht perfekt ist (keine Verschleißstufe oder CRC ..) – Digikata

Antwort

3

JFFS2 ist ein offensichtlicher Kandidat. Ich habe es erweiterbar mit MIPS und SuperH Jungs benutzt, aber nur mit NAND. Es bietet hervorragende Ergebnisse in Bezug auf Wear Leveling und Performance. Nicht, es ist ein ausgewachsenes Dateisystem, das nicht das zu sein scheint, was Sie beschreiben, aber ehrlich gesagt, glaube ich nicht, dass Sie eine einzige Lösung für das finden, was Sie wollen. Aber es könnte die einfachste Lösung sein: JFFS2 + {SQLite | Protobuf | Berkeley DB}

Ich hoffe, dass ich falsch liege und Sie einen finden. :-)

+0

Ich hatte JFFS2 angeschaut und wusste nicht, wie viel Arbeit war für den Einsatz ohne ein RTOS im Embedded-System. Meine Vermutung ist, dass JFFS2 mehr ist, als ich möchte - obwohl es mir einfällt, nachzusehen und zu sehen, ob es sinnvoll ist, SQLite et al. direkt auf dem Flash ohne dazwischenliegende Dateisystemschicht, indem ein Abschnitt des Flashs als einzelne Datei behandelt wird. – Digikata

+1

@Digikata Vielleicht einfach nur eine Datenstruktur auf der Festplatte in Form einer verketteten Liste verwenden, die Sie durchlaufen und nach der letzten Versionskennung suchen. Sie können alle FS und andere Sachen überspringen. – Gianni

+0

Yup, das war die Richtung, die ich erwog, um mein eigenes Format zu rollen. – Digikata

2

Wie Robert und Mtr kann ich die FatFs Generic File System Module empfehlen. Ich verwende es auf einem Cortex-M3 mit 3 logischen Geräten (USB, SD-Karte und externen Flash). Vor allem das f_mkfs war sehr praktisch, um das Dateisystem auf den externen Flash zu bekommen. Die "einzige" Sache, die ich selbst programmieren musste, waren die Low-Level-Disk-I/O-Funktionen. Wenn Sie nicht alle Funktionen benötigen, die das FatFs-Modul bietet, ist es mit der config.h recht einfach, die Modulgröße zu reduzieren (ich kann mich nicht an den Namen erinnern: D).

Edit: Ich habe mich für FAT, wie es von Win & Linux ...