Conforme você declara, a EEPROM interna tem uma vida útil de 100.000 ciclos de gravação. Isso não é um palpite - uma proporção muito significativa do ATmega328 alcançará esse número sem problemas. Eu testei três processadores antes e todos atingiram 150.000 ciclos sem problemas.
É importante observar o modo de falha da EEPROM. A maioria dos projetos de "destruidor de EEPROM" repetidamente lê / grava até que os dados não sejam gravados. Antes deste ponto, a EEPROM ainda estará danificada. Isso se manifestaria se os dados não fossem retidos por um período razoável. Não é aconselhável contar com mais de 100.000 ciclos de gravação por esse motivo.
A EEPROM é diferente da RAM em um ATmega. Escrever para ele não é simples ou rápido, mas está envolvido em uma biblioteca amigável do Arduino , ocultando essa complexidade do usuário.
O primeiro nível de indireção é a biblioteca EEPROM , que é trivialmente simples], apenas chamando duas outras funções para leitura e gravação. Isso chama eeprom_write_byte, encontrado aqui .
Essa função usa montagem embutida, portanto, pode não ser facilmente entendida. Há um comentário que é facilmente compreendido:
Definir o modo de programação: apagar e escrever
Isso sugere uma das complexidades de lidar com a EEPROM - para escrever para ela, você precisa primeiro apagá-la. Isso significa que, se você chamar EEPROM.write (), ele executará um ciclo de gravação, independentemente do valor que estiver gravando.
Isso significa que escrever repetidamente 0xFF provavelmente terá o mesmo efeito que escrever 0xFF, 0x00,0xFF, 0x00 etc.
Existem maneiras de contornar isso - você pode tentar chamar EEPROM.read () antes de EEPROM.write () para ver se o valor já é o mesmo, mas isso leva mais tempo.
Existem outras técnicas para evitar desgaste excessivo da EEPROM, mas o uso delas depende da sua aplicação.
Certa vez, fiz um experimento em uma EEPROM externa com 1 milhão de ciclos nominais máximos. Demorou cerca de 6 milhões de ciclos para se tornar majoritariamente corrompido e antes disso havia progredido com quantidades esporádicas de corrupção.
Quando você diz que não altera o valor, suponho que você esteja gravando os mesmos dados em um endereço várias vezes. Isso quase certamente estressaria a vida, embora provavelmente não estressasse as células circundantes.
fonte
http://hackaday.com/2011/05/16/destroying-an-arduinos-eeprom/
fonte
A solução mágica - se você não quiser codificar o que o Cybergibbons disse sobre a leitura antes de escrever, é a função EEPROM.update (). Faz exatamente isso:
EEPROM.update (endereço, valor);
só gravará e estressará a memória se o valor for diferente daquele já armazenado.
fonte