Lettura EEPROM è influente nel conteggio di durata?

Salve a tutti.. e buone festività Natalizie.
Ho un piccolo dubbio che spero mi chiarirete.
In pratica per quanto concerne la EEPROM interna di Arduino UNO (ma credo valga anche per quelle esterne) si definisce la durata della stessa a circa 100.000 cicli di lettura/scrittura. E questo mi è chiaro.
Ma in questo conteggio entra solo la "scrittura" su EEPROM o anche la "lettura"??
Nel senso che: se un mio sketch scrive in EEPROM (ad esempio) una volta al mese, ma legge quel settore di EEPROM una volta al giorno. Portando ai limiti questi cicli.. la EEPROM durerà 100.000 mesi oppure 100.000 giorni??
In pratica i cicli di lettura della EEPROM influiscono sulla sua durata??

Grazie
Giuseppe

Io ricordo che solo la scrittura influisce sulla durata, inoltre vale per la cella scritta centomilavolte, quindi le altre celle non scritte sono ancora sfruttabili. Quando una cella è consumata la scrittura non ha effetto è la cella conserva il valore che aveva, in sostanza fallisce la scrittura.

Ciao.

Grazie Maurotec, quindi ciò che in realtà influisce è solo la scrittura su ogni singola cella.
Perfetto.

... le 100'000 sono le scritture garantite (e non massime, normalmete le EEPROM durano molto di più, ma quelle sono comnque le garantite) della singola cella. Letture ne puoi fare quante te ne pare.

Guglielmo

Incominciamo al datasheet: https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf

In prima pagina é scritto:
Write/erase cycles: 10,000 flash/100,000 EEPROM
Prima di una scrittura deve essere fatto un erase.

Le condizioni di numero di scrittura garantiti sono: un mantenimento del dato per 100 / 200 anni alla temperatura massima di esercizio. Il numero di cancellazioni/scritture non viene misurato ma assicurato per charatterizzazione ( non so cosa significhi per preciso: This parameter is not tested but ensured by characterization ).

Per ulteriori chiarimenti vedi AN1019 : https://ww1.microchip.com/downloads/en/Appnotes/01019A.pdf

Come vedi da questo documento il numero massimo di scritture dipende anche dalla temperatura di esercizio e dalla tensione di eserciziop. Oltre questo anche dalla temperatura di stoccaggio.


Il floating gate viene caricato di elettroni tramite una tensioni alta che il EEPROM genera internamente. per cancellare vengono tolto le cariche. Quel gate tiene il MOSFET secondo cariche presenti o no tiene il MOSFET in condzione oppure isolato.

La cancellazione produce dei elettroni intrappolati nel isolante (ossido) tra gate e substrato che alla fine dopo tanti cicli di cancellazione rimangono cosí tante caricate che il floating gate tiene il MOSFET cosí in conduzione che non c'é differenza tra on e off.
È anche possibile che delle cariche scappano dal floating gate e cosí si scarica e perde l' informazione.

La differenza tra EEPROM e FLASH é il mecanismo di portare le cariche sul floating gate.

Ciao Uwe

Grazie a tutti per le precissime risposte.
Resta comunque saggio utilizzare l'istruzione "update", laddove possibile, per aggiornare un dato in una singola cella solo quando è necessario. In pratica limitando i cicli di scrittura/cancellazione si prolunga di molto la vita della EEPROM.

comunque puoi sempre spalmare la "questione" su tutti i record disponibili,

es se proprio devi scrivere e riscrivere alcune memorie puoi spostarle
se usi le memorie da 1 a 10 dopo tot tempo puoi usare le memorie da 101 a 110
tutto automaticamente via software

Io uso sempre EEPROM.update, ma sto anche attento a scrivere solo quello che serve e quando serve! Per esempio, sicuramente è una precauzione eccessiva, ma quando devo salvare automaticamente un'impostazione fatta ruotando un encoder lo faccio circa 5 secondi dopo che la rotazione è terminata, cioè dopo che ho deciso esattamente che valore devo impostare. Non lo faccio a ogni "clic" dell'encoder!

Si "elrospo"...è una soluzione praticabile credo con un marcatore del num. di scritture che raggiunto un "x" cicli sposta gli indirizzi delle celle da scrivere ...e così via. Essendo le mie "scritture", o meglio update, delle celle tutt'altro che frequenti probabilmente cambierà la tecnologia prima che si blocchino :grin:. Comunque è la soluzione migliore la tua.

"DATman"..si si userò update anche io anche perché non sempre cambiano tutti i valori che devo memorizzare. :wink:.

Vi svelo in pratica cosa sto realizzando..anche se nel mio primo post "in assoluto" (secondo dopo la presentazione)..lo avevo accennato. Nulla di complesso ma utile per alcuni miei utilizzi.
Un Timer su 4 canali, che possono agire in modo del tutto asincrono o se si vuole sincrono "a cascata" (il termine corretto non saprei quale sia). I cicli delle sequenze possono essere "infiniti" o "definiti". Il tutto visualizzabile su un display LCD 20x4 (più in là forse userò un OLED..per il maggior numero di dati visualizzabili contemporaneamente). Nella EEPROM verranno memorizzati i tempi di On/Off di ogni relè, il numero di cicli da effettuare, lo stato di partenza di ogni relè e il sincronismo o meno delle sequenze. Ho messo anche un tasto per spegnere la retroilluminazione del display quando non necessaria (inutile tenerlo acceso per cicli di funzionamento lunghi).
Chicca finale ..la programmazione di questo Timer avviene tramite bluetooth con Smartphone e una App che sto realizzando con App Inventor. :sweat_smile:.
Diciamo che in un mesetto che ho acquistato Arduino (a me sconosciuto ..nei dettagli.. prima) mi ritengo soddisfatto per i progressi fatti. Soprattutto perché son partito dallo studio del codice di un "Blink non bloccante con tempi diversi"...poi pian piano ho sviluppato un listato di circa 1000 righe :sweat_smile:. È sicuramente una programmazione "wild" (la chiamo io) o meglio acerba e poco elegante..ma funziona al momento.. e il debug è stato, ed è molto, istruttivo. Tanto lo devo alle letture su questo Forum (cercando di non porre domande su argomenti già trattati) e ai video didattici di Paolo Aliverti su YouTube.
Mi son reso conto che Arduino è davvero un sistema che ha pochi limiti se non la tua fantasia e volontà di imparare (divertirti e crescere ..secondo me).
Grazie a tutti voi.

Sì: quando fai delle impostazioni, scrivi sulla EEPROM al momento della conferma finale: un Bip e il valore viene salvato su EEPROM.

Yes.. proprio cosi. Senza impazzire con i pulsantini e programmazione varia. :slight_smile: