Seperti yang Anda nyatakan, EEPROM internal memiliki masa pakai 100.000 siklus tulis. Ini bukan dugaan - proporsi ATmega328 yang sangat signifikan akan mencapai angka ini tanpa masalah. Saya telah menguji tiga prosesor sebelumnya, dan semuanya mencapai 150.000 siklus tanpa masalah.
Penting untuk mencatat mode kegagalan EEPROM. Sebagian besar proyek "perusak EEPROM" berulang kali membaca / menulis hingga data tidak ditulis sama sekali. Sebelum titik ini, EEPROM akan tetap rusak. Ini akan dimanifestasikan oleh data yang tidak disimpan untuk periode yang wajar. Tidak bijaksana untuk mengandalkan lebih dari 100.000 siklus tulis untuk alasan ini.
EEPROM berbeda dengan RAM pada ATmega. Menulis itu tidak sederhana atau cepat, tetapi dibungkus dengan perpustakaan Arduino yang ramah , menyembunyikan kerumitan ini dari pengguna.
Tingkat tipuan pertama adalah perpustakaan EEPROM , yang sangat sederhana], hanya memanggil dua fungsi lain untuk membaca dan menulis. Ini panggilan eeprom_write_byte, ditemukan di sini .
Fungsi ini menggunakan perakitan inline, jadi mungkin tidak mudah dipahami. Ada komentar yang mudah dimengerti:
Atur mode pemrograman: hapus dan tulis
Ini mengisyaratkan salah satu kerumitan dalam berurusan dengan EEPROM - untuk menulisnya, pertama-tama Anda harus menghapusnya. Ini berarti bahwa jika Anda memanggil EEPROM.write (), ia akan melakukan siklus penulisan terlepas dari nilai yang Anda tulis.
Ini berarti bahwa berulang kali menulis 0xFF kemungkinan akan memiliki efek yang sama seperti menulis 0xFF, 0x00,0xFF, 0x00 dll.
Ada beberapa cara untuk mengatasinya - Anda dapat mencoba menelepon EEPROM.read () sebelum EEPROM.write () untuk melihat apakah nilainya sudah sama, tetapi ini membutuhkan waktu tambahan.
Ada teknik lain untuk menghindari pemakaian EEPROM yang berlebihan, tetapi penggunaannya tergantung pada aplikasi Anda.
Saya pernah menjalankan percobaan pada EEPROM eksternal dengan 1 juta siklus nilai maksimum. Butuh sekitar 6 juta siklus untuk menjadi sangat korup, dan sebelum itu telah berkembang menjadi jumlah korupsi yang sporadis.
Ketika Anda mengatakan Anda tidak mengubah nilainya, saya berasumsi Anda menulis data yang sama ke alamat beberapa kali. Ini hampir pasti akan menekankan kehidupan, meskipun mungkin tidak akan menekankan sel-sel di sekitarnya.
sumber
http://hackaday.com/2011/05/16/destroying-an-arduinos-eeprom/
sumber
Solusi ajaib - jika Anda tidak ingin kode apa kata Cybergibbons tentang membaca sebelum menulis, adalah fungsi EEPROM.update (). Itu persis seperti itu:
EEPROM.update (alamat, nilai);
hanya akan menulis dan menekankan memori jika nilainya berbeda dari yang sudah disimpan.
sumber