EEPROM'un gerçek ömrü nedir?


21

ATMEL, bir EEPROM hücresinin hücre ömrünün yaklaşık 100.000 yazma döngüsü / hücresi olduğunu söyledi. Bu aslında EEPROM'un vahşi doğada gösterdiği performans mı?

Bir hücrenin değerini değiştirmezsem, bu ömrünü uzatır mı? Ben değer yazarsanız Örneğin, 0xFFtekrar tekrar aynı hücreye, bu herhangi bir farklı yazı etmektir 0x00, 0xFF, 0x00vb

Yanıtlar:


19

Sizin de belirttiğiniz gibi, dahili EEPROM'un ömrü 100.000 yazma döngüsüne sahiptir. Bu bir tahmin değil - ATmega328'in çok önemli bir kısmı bu sayıya sorunsuzca ulaşacak. Daha önce üç işlemciyi test ettim ve hepsi sorunsuz bir şekilde 150.000 çevrime ulaştı.

EEPROM'un arıza modunu not etmek önemlidir. Çoğu "EEPROM destroyer" projesi, veriler hiç yazılmayana kadar tekrar tekrar okur / yazar. Bu noktadan önce, EEPROM hala zarar görecektir. Bu, makul bir süre boyunca saklanmayan verilerle kendini gösterir. Bu nedenle 100.000'den fazla yazma döngüsüne güvenmek akıllıca değildir.

EEPROM, ATmega'daki RAM'den farklıdır. Yazmak basit ya da hızlı değil, ancak bu karmaşıklığı kullanıcıdan gizleyerek arkadaşça bir Arduino kütüphanesinde yer alıyor .

İlk yönlendirme seviyesi, son derece basit olan EEPROM kütüphanesidir , sadece okuma ve yazma için iki işlev daha çağırıyor. Bu, burada bulunan eeprom_write_byte'yi çağırır .

Bu işlev satır içi derleme kullanır, bu nedenle kolayca anlaşılamayabilir. Kolayca anlaşılan bir yorum var:

Programlama modunu ayarla: sil ve yaz

Bu, EEPROM ile başa çıkmanın karmaşıklıklarından birine işaret eder - ona yazmak için önce onu silmeniz gerekir. Bu, EEPROM.write () öğesini çağırırsanız, yazdığınız değerden bağımsız olarak bir yazma döngüsü gerçekleştireceği anlamına gelir.

Bu, art arda 0xFF yazmanın 0xFF, 0x00,0xFF, 0x00 vb. Yazma ile aynı etkiye sahip olacağı anlamına gelir.

Bu sorunu çözmenin yolları var - değerin zaten aynı olup olmadığını görmek için EEPROM.write () 'den önce EEPROM.read () öğesini çağırmayı deneyebilirsiniz, ancak bu işlem ek zaman alır.

Aşırı EEPROM aşınmasını önlemek için başka teknikler de var, ancak kullanımları uygulamanıza bağlı.


3
EEPROM için aşınma dengeleyici: electronics.stackexchange.com/questions/60342/…
jippie

9

Bir keresinde, 1 milyon maksimum puan çevrimi olan bir dış EEPROM üzerinde bir deney yaptım. Büyük ölçüde bozulmuş hale gelmesi yaklaşık 6 milyon devir aldı ve bundan önce sporadik yolsuzluklar yaşanmıştı.

Değeri değiştirmediğinizi söylediğinizde, aynı verileri bir adrese birden çok kez yazdığınızı farz ediyorum. Bu neredeyse kesinlikle hayatı zorlar, ancak çevresindeki hücreleri de zorlamaz.


2

http://hackaday.com/2011/05/16/destroying-an-arduinos-eeprom/

Arduino bir duvar siğiline bağlandı ve “birkaç ay boyunca bir kanepenin arkasına oturdu”. EEPROM, 47 gün ve 1.230.163 döngüden sonra ilk yazma hatası olduğunu gördü. Bu, atmel veri sayfasındaki spesifikasyondan daha iyi, ancak benzer deneylerin sonuçlarına benzer bir büyüklük sırasıdır.


Bu çok yüksek görünüyor. Daha önce 150k ila 200k duymuştum, ama asla bu olmadı: o
asheeshr

5
Sorun, bunun tüm arıza modlarını tespit etmemesidir. EEPROM zarar gördüğünde, ne olacağı veriyi tutacağı sürenin süresi yavaş yavaş azalır. 100.000 devirde, Atmel 20 yıl veri saklama garantisi veriyor. Bunun ötesinde, veri saklama azalır. 1,2 m'lik çevrimlere ulaşıldığında ve bir hata gördüğünüzde, bu ani bir hatadır. 1,230,160 döngüde hemen bir hata olmayabilir, ancak veriler sadece günlerce saklanmış olabilir.
Cybergibbons

0

Sihirli çözüm - Cybergibbons'ın yazmadan önce okuma hakkında söylediklerini kodlamak istemiyorsanız, EEPROM.update () işlevidir. Bu tam olarak yapar:

EEPROM.update (adres, değer);

belleği ancak değer önceden kaydedilenden farklıysa yazacak ve vurgulayacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.