Attesa tempo scrittura flash dopo cancellazione

Ciao,
innanzi tutto una domanda, non sono pratico, se si scrive un byte in una memoria flash, per cambiare questo byte è sempre necessario cancellare la flash? Ho provato a scrivere il dato sopra, ma leggendo ritrovo un valore diverso...
La domanda principale invece è questa: dopo aver cancellato la memoria, ho notato che per riscrivere un valore sopra, devo attendere circa 2 minuti, altrimenti la cella rimane FF; è normale ciò?
Sto utilizzando una memoria winbond con arduino due
Grazie

Quale memoria Flash?

Buongiorno,
parlo di memoria esterna, nello specifico questa:

ok, allora dacci anche lo sketch che usi e lo schema di collegamento.

La memoria garantische una velocitá di scrittura/lettura di 35MB al secondo. perci non dovrebbero esserci tempi di attesa.

Ciao Uwe

Lo sketch è lunghino, sono 2000 righe di programma, vedo di allegarlo...
cmq a riga 798 c'è il comando di cancellazione, mentra a riga 708 i comandi di scrittura.
Per il collegamento, devo fare un disegnino? Non è difficile quello, oltre alimentazione a 3,3V, c'è il clk, D0, D1 e il CS.
Grazie

SERIAL_DUE_DISPLAY5_FLASH.ino (94.1 KB)

Se flash.chipErase(); cancella la FLASH intera con 16kByte ci mette un po.
Perché devi cancella la flash?
Ciao Uwe

Io devo salvare 8 byte per quando arduino viene spento, questi byte sono cambiabili a piacere, è un impostazione di temperatura, ho notato che se scrivo il nuovo valore su una cella già scritta, quando leggo non trovo il valore messo, ma uno a caso, per questo ero arrivato a cancellare la flash...

Ma la cancellazione della flash, ok che porta via tempo, ma 2-3 secondi... Non è possibile più di un minuto...

thedrifter:
Io devo salvare 8 byte per quando arduino viene spento ...

... scusa, ma mi spieghi perché, per 8 bytes, non usi la EEPROM che è nel ATmega ? ? ? :o

Guglielmo

gpb01:
... scusa, ma mi spieghi perché, per 8 bytes, non usi la EEPROM che è nel ATmega ? ? ? :o

Guglielmo

Sto utilizzando arduino DUE, se non sbaglio non ha EEPROM?

Ah, scusa, m'era sfuggito fosse una DUE ... :confused:

Allora, comunque, per così pochi byte, io avrei usato un volgare modulo RTC con il DS1307 (... te lo tirano dietro) che ti mette a disposizione 56 bytes di memoria RAM programabile quante volte vuoi e alimentata dalla batteria di backup, inoltre lo comandi molto semplicemente in I2C :smiley:

Guglielmo

Nessun problema per utilizzare l'RTC, è solo che era già fatto l'hardware e quella winbond era molto + piccola del modulo RTC.
Ma quindi il problema è imputabile alla flash?

thedrifter:
Io devo salvare 8 byte per quando arduino viene spento, questi byte sono cambiabili a piacere, è un impostazione di temperatura, ho notato che se scrivo il nuovo valore su una cella già scritta, quando leggo non trovo il valore messo, ma uno a caso, per questo ero arrivato a cancellare la flash...

Uno a caso?...:o

Fammi capire, prova a fare un esempio specifico (magari con qualche Serial.print scrivi le operazioni ed i valori, e poi posta l'output oltre al codice modificato).

Tu ad esempio scrivi diciamo 0xA5 in una posizione: dopo aver scritto, leggi 0xA5, spero esatto?
Quindi ad un certo punto, sempre come esempio, devi scriverci 0xB0: quando provi a rileggere quel byte leggi realmente un valore "a caso"? Se fai più letture ottieni sempre lo stesso valore o altri "a caso"?
E poi se fai più scritture sullo stesso byte, magari con lo stesso valore, ogni volta che leggi hai un valore differente?

gpb01:
Ah, scusa, m'era sfuggito fosse una DUE ... :confused:

Non Ti é sfuggito; non l' aveva scritto.
Ciao Uwe

Non puoi mettere al posto di una memoria flasch un EEPROM con la stessa piedinatura?

uwefed:
Non Ti é sfuggito; non l' aveva scritto.

... vedo che è sfuggito anche a te Uwe ... :smiley: :smiley: :smiley:

thedrifter:
Sto utilizzando una memoria winbond con arduino due

Guglielmo

Ciao a tutti,
mi fate morire con quella DUE :smiley: , è sfuggito a tutti, un po' perchè poco usata, un po' perchè l'ho scritto in minuscolo e non ci si fa caso...

Rispondo a DOCDOC, è tutto su un display, faccio presto a vedere... Cancello la flash, aspetto 2 minuti, scrivo il valore, tutto ok, lo vado a rileggere è sempre quello scritto (mettiamo decimale 995); cambio il valore a 980, lo vado a scrivere, quando lo rileggo trovo 960, se riscrivo 980, rimane sempre 960; cambio valore, vado a scrivere 970, se rileggo rimane sempre 960.
Escludo errori matematici sulla scrittura, perchè se cancello la flash, qualsiasi valore scrivo, rimane perfettamente...

UWEFED, si, posso cambiare e utilizzare una EEPROM, anche se leggendo non ho capito granchè le differenze; però tutte le volte che scelgo qualcosa, sbaglio sempre :slight_smile: avevo comprato le flash perchè avevo visto su ebay erano molto comuni e vendute in quantità per arduino (e hanno anche discrete dimensioni), e puntualmente ho sbagliato ;D vedrò di cambiare con una EEPROM, sperando il problema sia quello :wink:

thedrifter:
Nessun problema per utilizzare l'RTC, è solo che era già fatto l'hardware e quella winbond era molto + piccola del modulo RTC.

Continuo a suggerirti il più semplice DS1307 ... case DIP8 o SMD più un piccolissimo quarzo a 32.768KHz ... NON dirmi che occupa più spazio di quanto ne stai usando ...


Guglielmo

Si, non è male, posso usare anche una 24CXX, almeno risparmio il quarzo esterno... Vedrò di fare questa modifica.
Comunque nessuno ha usato le flash per capire il problema?
Grazie

thedrifter:
Comunque nessuno ha usato le flash per capire il problema?

NO, in passato ho usato le FRAM (Cypress Semiconductor) e non ho avuto alcun problema ... :slight_smile:

Guglielmo