Newsgroup: it.hobby.elettronica.digitale
Titolo: Utilizzare memorie Flash (non le chiavette USB) con un linux embedded

Sto cercando di districarmi nel mondo delle memorie Flash... a
dispetto della semplicità con cui si usa una chiavetta  USB, il mondo
sommerso delle Flash embedded è molto più complicato.
Ho capito le differenze sostanziali tra memorie NAND e memorie NOR e
sono quindi propenso, per la mia applicazione, ad usare una NAND (devo
fare data storage).
Vorrei interfacciarla con un ARM9 su cui gira un linux e che già
accede ad una Flash NOR (che mi starebbe comunque stretta per i dati)
e ad una SRAM. La scheda non è mia, ma l'ho ereditata.
Le Flash NOR sono semplici da interfacciare con un microprocessore
perchè possono essere collegate direttamente sul bus indirizzi/dati.
Le Flash NAND, invece, mi sembra che debbano essere interfacciate
tramite I/O generici (il bus dati/indirizzi/comandi è per esempio
multiplexato).
Naturalmente accederei tramite il driver mtd (www.linux-
mtd.infradead.org
).
Non riesco a capire il ruolo delle Flash parallele (tipo quelle della
Atmel, AT49...) in questo discorso. Nel datasheet non si capisce se
sono NAND o NOR. Dai tempi di cancellazione sembrerebbero delle NAND,
però dall'interfacciamento (bus dati e indirizzi separati)
sembrerebbero delle NOR.
Saranno gestibili facilmente con il driver mtd sotto linux?

 sembrerebbero delle NOR.
Ho capito che, se non diversamente specificato, le Flash sono di tipo 
NOR, cioè le prime memorie Flash prodotte sul mercato.
Infatti quelle Parallel FLASH della Atmel (ma ce ne sono tante altre) 
sono delle NOR in quanto hanno un accesso di tipo casuale (bus dati e 
indirizzo) ed anche dei tempi di cancellazione molto elevati (nel 
datasheet si parla di un tempo di cancellazione di un settore cha varia 
da un valore tipico di 100ms ad un valore massimo di 2s!!!)

 fare data storage).
Non per farmi i fatti tuoi, ma non ho capito se lo fai soltanto per hobby 
oppure devi fare una qualche applicazione vendibile. Questo perchè la 
quantità da vendere, prima di utilizzare una flash, dovrebbe essere molto 
elevata !
Considera che anche una semplice SD, con interfaccia SPI, è veramente 
semplice da gestire, ha un sacco di memoria e ha anche un sistema 
intelligente di memorizzazione (per far invecchiare le celle di memoria in 
modo omogeneo)....e soprattutto costa pochissimo!
Vedi se ti conviene davvero....
Ciao
CG

 modo omogeneo)....e soprattutto costa pochissimo!
Tutto corretto, anche se l'ultima frase può fare equivocare. La flash NAND
a parità di dimensioni costa ovviamente molto meno di una SD, c'è quasi un
ordine di grandezza. E' per quello che per dei piccoli micro può esistere
il "dilemma" di cui parli: la MMC la puoi interfacciare molto facilmente
via SPI, riducendo i tempi di sviluppo, e se il volume di produzione è
piccolo i costi di sviluppo incidono molto di più.
L'OP invece impiega un ARM9 su cui gira Linux, per cui direi che il
problema della gestione della NAND sia l'ultimo dei suoi problemi. A basso
livello parecchi ARM9 dispongono già di un controller per NAND flash, e
Linux dispone già nel kernel mainline sia del driver MTD che dei filesystem
adatti a questo genere di memorie. In questo caso il lavoro di sviluppo per
supportare le flash è a mio parere simile - se non inferiore - al lavoro
per supportare le MMC/SD. Se poi con la memoria ci devi fare il boot,
allora il discorso è ancora più valido.
-- 
emboliaschizoide.splinder.com

 modo omogeneo)....e soprattutto costa pochissimo!
Hai ragione da vendere ed infatti sono rimasto molto indeciso per molto 
tempo.
Diciamo che non ho molto tempo per sviluppare l'applicazione e diciamo 
che ho già un hw (scheda di sviluppo basata su ARM9) che è pronto (anche 
il software è praticamente pronto) a scrivere su NAND Flash con JFFS2, 
quindi sfruttando il wear leveling che è presente nelle SD.
Di contro, il mio sistema non è ancora pronto per gestire una SD 
mediante SPI: non che non si possa fare, ma dovrei smanettare un bel po' 
con il kernel, cosa che attualmente non ho il tempo di fare.
Forse l'unica cosa fattibile sarebbe l'accesso ad una pen drive USB o ad 
una SD mediante lettore di memory card.
In Linux dovrei vedere questi device come dischi da montare e gestire 
come farei con la JFFS2 e la mia NAND Flash.
A proposito... qualcuno sa dove recuperare un chip di NAND Flash 
(Samsung sarebbe l'ideale) in modo semplice? Sembra che girino solo NOR 
Flash sul mercato.

 Se poi con la memoria ci devi fare il boot, allora il discorso è ancora più valido.
Questo non mi è chiaro...

 mercato.
Non sono pratico di flash, e considera che le applicazioni con necessità di 
memorizzazione "robusta" me le sbrigo sempre con una SD su SPI a 10MHz in 
modalità 0,0 , dove i problemi più difficili sono i traslatori di livello :) 
! Purtroppo non so aiutarti molto per la tua applicazione, il mio commento 
era su un fatto di costi considerando il basso livello ancora da scrivere!
Ciao
CG 

 modalità 0,0 , dove i problemi più difficili sono i traslatori di livello :)
Senti, ma com'è questa storia che lo standard SD non è open (almeno
così leggo su wikipedia)?
Sembra che ci sia solo una versione limitata dello standard a
disposizione gratuita, ma
bisogna pagare qualcosa per lo standard completo e per poter applicare
il logo.

 Questo non mi è chiaro...
Intendo dire che mi sembra che i bootloader (almeno uboot, che è quello con
cui ho più avuto a che fare) tendano a supportare più facilmente i
dispositivi MTD piuttosto che le SD/MMC. Questo ovviamente non è un
problema insormontabile, perché volendo puoi sempre scrivere tu stesso un
driver di supporto per uboot; però chiaramente se l'uboot "vanilla" (oppure
la versione modificata che spesso il costruttore ti mette a disposizione)
supportano già le NAND flash, la tentazione di usare quelle è forte. :)
-- 
emboliaschizoide.splinder.com

 il logo
Quello che so per certo è che lo standard completo non è open, e che per 
utilizzare anche il driverino SPI devi dichiarare che il marchio SD è 
registrato ecc.ecc.ecc. Per la modalità a velocità piena oltre che 
dichiararlo devi pagare, ma non ne so molto! Ho sempre trovato delle 
librerie che funzionavano abbastanza velocemente e mi son basato su quelle
Ciao
CG