2010-07-14 13 views
7

Sto cercando una libreria di archiviazione per la memorizzazione dei dati nella memoria flash in un sistema integrato. Sono sul punto di scrivere uno personalizzato per mancanza di un formato con il giusto mix di funzionalità e semplicità.Formato dati memoria flash

Idealmente sarebbe un formato e una libreria C/C++ con qualcosa di meglio della memorizzazione di strutture non elaborate, ma meno complessa di un file system completo. Ho bisogno di memorizzare più strutture di dati alcune delle quali sono opzionali e possono cambiare formato di volta in volta.

Nice to have sarebbe semplice livellamento dell'usura/schemi di inserimento nel journal e funzionalità di ridondanza/affidabilità dei dati. Il semplice journaling è perché la maggior parte dei chip flash di basso livello con cui sto lavorando sono più felici quando scrivi da un capo all'altro e ricomincia da capo. La ridondanza/affidabilità dei dati potrebbe essere l'uso e il controllo dei bit di parità o completare copie aggiuntive.

Qualche suggerimento?

+0

NAND o NOR flash? Sto indovinando la NAND dal momento che ti preoccupi del livellamento dell'usura? Se è NOR, non devi preoccuparti di nessuno dei tuoi dubbi elencati, almeno per la maggior parte delle situazioni. –

+0

I datasheet non dicono realmente NAND vs NOR. In realtà per il paio di dispositivi con cui sto lavorando, non sono sicuro che sia strettamente necessario il livellamento dell'usura. La scheda tecnica chiede la riscrittura end-to-end ogni x scrive in un settore, in modo che possa effettivamente essere una sorta di operazione interna per la deframmentazione. – Digikata

+0

FAT sembra il più vicino in termini di approccio al file system, quindi per ora è contrassegnato come la risposta. Tuttavia, sto anche guardando UBIFS e sono ancora aperto a scrivere il mio, poiché la solita FAT non è perfetta (nessun livello di usura o CRC ..) – Digikata

risposta

3

Cerca il mio question.

Ho scoperto che fat16 (12) e ELM-Petit FAT File System Module sono suite che soddisfano le mie esigenze. E 'necessario solo per scrivere le procedure di scrittura/lettura del settore.

3

JFFS2 è un candidato ovvio. L'ho usato estensivamente con MIPS e SuperH, ma solo con NAND. Dà grandi risultati nel livellamento dell'usura e nelle prestazioni. No, è un file system in piena regola che non sembra essere quello che descrivi, ma onestamente, non credo che troverai una soluzione unica per quello che vuoi. Ma potrebbe essere la soluzione più semplice: JFFS2 + {SQLite | Protobuf | Berkeley DB}

Spero di sbagliarmi e ne trovi uno. :-)

+0

Ho guardato JFFS2 e non sapevo quanto lavoro fosse in negozio per l'uso senza un RTOS nel sistema embedded. La mia ipotesi è che JFFS2 sia più di quanto io voglia - anche se mi viene in mente di guardare e vedere se è possibile usare SQLite et al. direttamente sul flash senza alcun livello di file system intermedio trattando una sezione del flash come un singolo file. – Digikata

+1

@Digikata Forse, semplicemente usando una struttura dati su disco, sotto forma di un elenco collegato che si scorre attraverso la ricerca dell'ultimo ID di versione. Puoi saltare tutte le FS e altre cose. – Gianni

+0

Sì, quella era la direzione che stavo contemplando per il mio formato personale. – Digikata

2

Come Robert e Mtr posso consigliare il FatFs Generic File System Module. Lo sto usando su un Cortex-M3 con 3 dispositivi logici (USB, scheda SD e flash esterno). Soprattutto il f_mkfs è stato molto utile per ottenere il FileSystem sul Flash esterno. La "sola" cosa che dovevo codificare autonomamente erano le funzioni di I/O del disco di basso livello. Se non hai bisogno di tutte le funzionalità fornite dal modulo FatFs, la riduzione della dimensione del modulo è piuttosto semplice usando il config.h (non ricordo il nome: D).

Edit: ho scelto FAT in quanto può essere utilizzato da Vinci & Linux ...