Memoria flash: l'intera pagina deve essere cancellata prima di scrivere solo pochi byte?


16

Una domanda facile, spero! Non trovo risposte definitive ...

Sto scrivendo i driver per un chip di memoria flash SST25VF064C . Comunica tramite SPI.

Come tutta la memoria flash (di cui sono a conoscenza), deve essere cancellata (tutti i bit = 1) prima di poter essere scritta (bit = 0). Per questo chip, l'area più piccola che può essere cancellata è 4kB.

La sua memoria è divisa in pagine a 256 byte. Con un'istruzione, posso scrivere ovunque da un byte a 256 byte in una pagina specificata. Non devo iniziare da un limite di pagina: la prima posizione da programmare può essere ovunque all'interno di una pagina.

La regola generale è assicurarsi che la pagina venga cancellata prima di scriverla. Ma posso scrivere in una pagina precedentemente scritta, se evito le aree già scritte? Ad esempio, supponiamo che io memorizzi i dati in byte 0-127. Posso successivamente scrivere altri 128 byte nella stessa pagina, se inizio dal byte 128?

Risposte:


13

Sì, dopo ogni cancellazione, è possibile utilizzare un numero qualsiasi di operazioni separate per scrivere i dati (cambiando i bit da 1 a 0) prima della successiva operazione di cancellazione.

È anche possibile riscrivere una posizione precedentemente scritta, purché si cancellino solo più bit. Questo può essere utile per mantenere cose come le bitmap di allocazione.


Eccellente grazie! Questo era proprio quello che stavo cercando.
bitsmack,

Si noti che ad alcuni chip non piace che si scriva un byte precedente dopo uno dall'esame di varie schede tecniche, tuttavia questo sembra variare tra i dispositivi.
Valità,

1
@Valità: puoi fornire un esempio di questo?
Dave Tweed

3
Le MCU LPC21xx e LPC23xx di @DaveTweed NXP hanno un byte di checksum per ogni 16 byte di memoria; è necessario scrivere tutti e 16 i byte contemporaneamente perché il checksum è scritto in quell'operazione. Se vieni più tardi e provi a scrivere zeri nella stessa "linea", gli zeri vengono scritti, ma anche un nuovo checksum è scritto sopra il precedente; è probabile che abbia alcuni 1 in cui il precedente aveva 0, quindi il checksum diventa non valido. Non ricordo se l'MCU ti consente di leggere una riga con un checksum non valido. Comunque, questo sarebbe un esempio di "variare tra i dispositivi".
Guillermo Prandi,

1
"qualsiasi numero di operazioni separate da scrivere ... la prossima operazione di cancellazione." Si noti che alcune parti, in particolare le memorie flash incorporate nelle MCU, indicheranno un numero massimo di scritture prima che sia necessaria una cancellazione. Presumibilmente la violazione di questo limite rischierà di corrompere altre aree della memoria, quindi è importante fare attenzione a tali limiti.
Aj

5

posso scrivere in una pagina precedentemente scritta, se evito le aree già scritte?

Se capisco p. 16 del foglio dati in modo corretto, sta dicendo: Con questo particolare chip, non è necessario scrivere in una pagina precedentemente scritta, anche se si evitano le aree già scritte.

dettagli

Il datasheet del chip di memoria flash SST25VF064C a pag. 16 dice "L'istruzione del programma di pagina programma fino a 256 byte di dati nella memoria. L'indirizzo di pagina selezionato deve essere nello stato cancellato (FFH) prima di avviare l'operazione di programma di pagina."

Presumo quindi che "L'intera pagina selezionata deve essere nello stato cancellato (ogni byte nella pagina FFh) prima di avviare un'operazione di programma pagina". SST o Microchip hanno rilasciato documentazione per chiarire questa frase esasperatamente ambigua?

Nella mia esperienza, il produttore di tutti i chip flash MLC e di alcuni chip flash SLC più recenti richiede che una volta che una pagina sia stata scritta, la pagina debba essere cancellata prima che quella pagina venga scritta di nuovo, anche se si desidera cambiare solo 1 bit in un 0 bit. (Questa è chiamata la "regola di write-once" in questo articolo YAFFS .)

Nella mia esperienza, tutti i chip flash più vecchi ti consentono di cambiare qualsiasi 1 bit in uno 0 bit senza un ciclo di cancellazione, anche se quel bit è in una pagina o anche un byte che ha già programmato altri bit a zero - a la pagina del flash può essere programmata più volte tra le cancellazioni. (Questo si chiama "scrittura multipla" nell'articolo YAFFS).

La scheda tecnica del produttore è una promessa condizionale che il produttore fa a te. Finché si seguono tutte le raccomandazioni del foglio dati, il produttore promette che il chip funzionerà come specificato. Sospetto che se si programma una pagina precedentemente scritta, evitando le aree già scritte, ci sono buone probabilità che una lettura immediata possa fornire i dati che ci si aspetta: i byte appena scritti sono i valori che hai appena scritto, e gli altri byte sono probabilmente invariati. Tuttavia, poiché ciò non segue le raccomandazioni del foglio dati, non è più possibile fare affidamento su tutte le promesse contenute nel foglio dati. Ho sentito voci secondo cui tale attività non sanzionata causa il tempo di conservazione dei dati e la resistenza, a causa di disturbi del programma, programmazione eccessiva, trappola di carica, effetti simili al martello di fila DRAM , ecc.

"Lo schema di utilizzo della memoria influenza il tasso di errore del bit. Programmazione di pagine parziali, programmazione di pagine non sequenziali all'interno del blocco, lettura eccessiva per blocco senza cancellazione nonché numero non uguale di operazioni di lettura all'interno di un singolo blocco aumento del numero della lettura disturbare gli errori ". - Michal Jedrak. "Memoria flash NAND nei sistemi integrati".

"Il disturbo del programma si verifica quando un bit viene programmato involontariamente da uno" 1 "a uno" 0 "durante un evento di programmazione della pagina. Questo errore di bit può verificarsi sulla pagina in fase di programmazione o su un'altra pagina del blocco. Condizioni di tensione di polarizzazione in il blocco durante la programmazione della pagina può causare il tunneling di una piccola quantità di corrente nelle celle di memoria vicine. Ripetuti tentativi di programmazione parziale della pagina continueranno ad aggravare questa condizione. " - Douglas Sheldon e Michael Freie. "Test di disturbo nei ricordi flash" . p. 8, 9.

"Il disturbo del programma si verifica quando un bit viene programmato involontariamente (da 1 a 0) durante un'operazione di programmazione ... Questa condizione viene aggravata dalla programmazione casuale nel blocco e dall'applicazione di più scritture parziali alle pagine." "Mitigazione del fallimento del flash NAND di Yaffs"


0

È molto probabile che il software di programmazione in uso stia già scrivendo i 256 byte "richiesti". "Appare" come se ti stesse dando la possibilità di scrivere da uno a 256 byte, ma ho il sospetto che ciò che sta facendo sia OR-ing dei byte desiderati con una "maschera" di 256 "FF". Se questo è corretto, allora puoi "tranquillamente" scrivere qualsiasi byte una volta , senza dover cancellare l'intero byte 4K. Se un checksum viene scritto al di fuori del tuo controllo, molto probabilmente verrà creato un checksum non valido quando scrivi un altro byte in un segmento precedentemente scritto. Le implicazioni di ciò dipendono dal chip.

Se il tuo software di programmazione non esegue "OR-ing", puoi farlo da solo. Cancella un segmento di 256 byte, scrivi i byte nella posizione corretta, o OPPURE con una maschera di FF a 256 byte e scrivi il segmento nella pagina desiderata.

Se uno dei due metodi funziona con un determinato chip, può essere facilmente determinato da te. Scrivi ai primi 128 byte, scrivi ai secondi 128 byte, verifica che i primi 128 byte NON siano "incasinati"!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.