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 ? ? ? :oGuglielmo
Sto utilizzando arduino DUE, se non sbaglio non ha EEPROM?
Ah, scusa, m'era sfuggito fosse una DUE ...
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
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 ...
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 ...
thedrifter:
Sto utilizzando una memoria winbond con arduino due
Guglielmo
Ciao a tutti,
mi fate morire con quella DUE , è 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 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
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 ...
Guglielmo