Bir ATmega'nın flash belleğine> 10000 kez yazarsanız ne olur?

Her 5 dakikada bir kod yüklüyorum ve nispeten yoğun deneme yanılma gelişimi yaptığımı ve bu alışkanlığın yolun aşağısında sorunlara neden olabileceğini, özellikle de özel bir tahtada (Arduino olmayan) çalışıyorsam fark ettim. çip kolayca değiştirilemez.

Ne olacak?

avrdude 'in yazılı flaşı doğruladığını fark ettim. Yani basitçe hataları fark etmeye başlayacak ve muhtemelen başarısız olmadan yazamayacak mı?

Yoksa bazen işe yarayacak, bazen değil mi?

Example of heavy use: A custom PCB where easy replacement of the MCU is not possible. 10,000 writes would equal 100 days, each 8 hours of development, with flash write every 5 minutes.

Sık sık flaş yazmaya yol açan birkaç alışkanlığım var: Koduma referanslar, küçük optimizasyonların test hızı iyileştirmeleri, program boyutu optimizasyonları vb.

Şimdi hemen test etmek yerine kendimi çok sık yanıp sönmekten ve testten önce daha fazla kod revizyonu yapmaktan alıkoymaya çalışıyorum.

In conclusion: Yes, it's unlikely, and arguably, if you're working full-time on a board, less intensively, for, say, a year, you can probably afford to buy another board when the first one starts failing the flash-verification.

5
Aslında tanımsız davranış olacaktır. Temelde her şey olabilir ve bundan kaçınılmalıdır.
katma yazar dotnetengineer, kaynak
Bazı programcılar kurulları veya IDE'ler aslında bunu gerçekten yapıyor. Ancak, çoğu zaman mikro, 10.000'den fazla kez yeniden programlanmaz.
katma yazar dotnetengineer, kaynak
Veri sayfaları muhafazakar olma eğilimindedir ve verdikleri sayılar genellikle geniş bir sıcaklık aralığında geçerlidir. Oda sıcaklığı koşullarında, 10K döngü sınırının çok ötesine gidebilirsiniz. Atmel, 10K'nın ötesinde bir söz vermediği için% 100 kesin olamazsınız.
katma yazar Sprogz, kaynak
Bildiğim kadarıyla avrdude her bir baytı kontrol ediyor. Ne zaman başarısız olacağını bileceksin. Bazıları EEPROM ile testler yaptı, ancak Flash ile bir test bilmiyorum. Eski ATmega8 flaş (10k) ve EEPROM (100k) için aynı sayılara sahip, ancak yeni yongalar daha iyi. Sanırım birçok yazı yazdıktan sonra başarısız olmaya başlıyor.
katma yazar Standback, kaynak
@Jot, sonucun flaşın bozulup bozulmayacağından emin değilim, avrdude yavaş yavaş başarısız olursa ve tekrar denemek zorunda kalırsa veya flaş sadece doğru şekilde yazılmayacaksa; her zaman yanlış bir okuma verir.
katma yazar jmm, kaynak
Belirlemeye çalıştığım şey, nasıl başarısız olacağı.
katma yazar jmm, kaynak
@ Paul, Aşırı durumlarda, flaş yazma sayımını ayrı ayrı takip etmek uygun olur mu? Başarısızlık modu öngörülebilir bir şekilde davranmayacağından? Örneğin. flaş yazmada tekrarlanan hata
katma yazar jmm, kaynak

5 cevap

Ne olacak?

parite kontrolünden geçemez. yani kod yüklemek mümkün olmazdı.

Bununla birlikte, dayanıklılık nedeniyle hiçbir zaman flash tabanlı mcu arızası yaşamadım. Bu hatırlayabildiğim kadarıyla sayısız mcus.

size bir tasarım tavan boşluğu duygusu vermek için, birkaç saat boyunca @ eeprom'dan bir resim üzerinde eeprom'dan bir okuma/yazma, bir hata olmadan okudum ve yazdım. Bu eeprom dayanıklılıkta 1M olarak derecelendirilmiştir.

Bu yüzden bazı garip parçalar elde etmediğiniz veya uzun bir süre boyunca tekrar tekrar yazamadığınız sürece, flaş arızası pratik bir sorun değildir.

2
katma

This Wikipedia article about Flash memory discusses failure mechanisms including references to relevant papers. One point that surprised me was "Read Disturbance" of adjacent cells after a large number (>100,000) of reads from one cell since last erase, causing the adjacent cell(s) to read back erroneously. There's probably more there and in the referenced articles than you ever wanted to know about Flash failure mechanisms.

Ancak...

Test başına 5 dak., 10000 test, günün her saati 35 gün veya günde 8 saat/gün 100+ gün sürerek bu test hızını koruyacaktır. Demek istediğim şu ki, 10 bin döngüye ulaşma ihtimaliniz yok. Ancak, alana çok kullanılmış bir yonga koymakla ilgileniyorsanız (ve ben de bazı durumlarda olabilir), 1 numaralı soket kartı sizin için uygun olur.

1
katma
Benim ilk düşüncem, bu işlevlerden herhangi birinin sistem dışından ayarlanıp ayarlanamayacağı? Olmazsa, alanda başarısızlığın maliyeti ile birini önlemek için gerekli adımların maliyeti nedir? Başarısızlık bazı aksama sürelerine mal olur mu? Global bir servis çağrısı? Bir müşteri ilişkisi? Bir hastayı mı öldürmek? Bazı senaryolar, bunlardan kaçınmak için büyük bir peşin yatırım bile basitçe haklı. Ouch - kaya ve sert yer hakkında konuş ...
katma yazar caryden, kaynak
Aslında. Endişelendiğim şey esas olarak özel bir PCB üzerinde aktif bir şekilde geliştirilmesi ile ilgili, ATmega2560'ın el ile değiştirilemeyecek kadar eğlenceli olması gerekmeyecek bir ATmega2560 ile (100 pin + pinlerin görülmesi zor kısa devre riski). Veya alternatif olarak, birkaç tahta satın alın.
katma yazar jmm, kaynak
Çok sayıda yazmanın nedeni otomasyon, algılama vb. İçin çeşitli işlevleri ince ayarlamamdır - belki de bazıları EEPROM'a seri vb. Yoluyla yazılarak hafifletilebilir. sadece yeniden inşa etmekten/kırmaktan;
katma yazar jmm, kaynak

Üretici AFAIK’a göre, yazma çevrimi sayısının garantili olduğunu söylüyor. Genellikle yonga biraz daha dayanabilir (üreticinin garantiyi korumak için güvenli olması için), ayrı yongalar rastgele olarak çok daha fazla dayanabilir.

Ayrıca, başarısızlık iki tür soruna yol açabilir - birincisi bir yönden daha iyidir - sadece okuma başarısız olduktan sonra okuma "bir şey" (genellikle yazılı değerin bir kısmını oluşturur, ancak bazı bitler her zaman aynı 0/1'e ayarlanır). İkincisi, aşınmanın yazıyı güvenilmez hale getirmesidir - onu yazarsın, okursun, tamamdır, ancak bir süre sonra (günler/aylar gibi) içerik değiştirilir ve tekrar okursanız, "bir şey alırsınız" "önceki durumda olduğu gibi.

"Normal kullanıma" gitmeden önce yongayı değiştirebildiğinizden ve yeni bir tane koyduğunuzdan emin olmanız daha iyi olur - bir soket kullanın/yeni tahta oluşturun/eski lehim yonga ve lehim yapın. Aşınan çipi daha fazla test/geliştirme için kullanın, ancak üretim için sadece birkaç tekrarlama çevrimi olan yeni bir tane kullanın. Ayrıca yazılım emülatörleri, gelişiminizi çok hızlandırabilir ve kart üzerindeki yongayı yeniden doldurma ihtiyacını/sayısını azaltabilir.

0
katma

Sorunuza doğrudan bir cevap olmasa da, sorununuz için bir cevap olabilir (yoğun deneme yanılma yapmanız gerekebilir).

Muhtemelen donanımınızı (değişikliklerinizi) değil çoğunlukla programınızı (değişiklikler) test ediyorsunuz. Zaten donanımınızı (breadboard) her 5 dakikada bir değiştirdiğinizi varsaymıyorum.

Programın oldukça karmaşık olması durumunda, muhtemelen belirli bir çevrimdışı test programı yazmak ve onu bir Arduino yerine bir bilgisayarda çalıştırmak en iyisi olacaktır. Muhtemelen kullandığınız bazı sınıfları/kütüphaneleri saplamanız gerekir, ancak bu size çok zaman kazandırabilir. Ayrıca, daha iyi bir IDE ve daha birçok hata ayıklama imkanından da faydalanabilirsiniz. Çevrimdışı test programındaki testlerden geçtikten sonra, Arduino'da deneyin.

Bu şekilde, programı Arduino'ya günde sadece birkaç kez yüklemeniz gerekir.

0
katma
Bu iyi bir cevap, çünkü 10k denemesi çok fazla ve altta yatan sorunu düzeltmek daha iyi. Belki de ayarlanması gereken gecikmeler kullanılır (millis kullanmak yerine). Belki birden fazla Arduino kartı kullanılabilir veya birden fazla görevle Arduino Due kullanılabilir. Çalışma kodunu oluşturmak için yalnızca rastgele bir üreticinin bu kadar çok deneme gerektireceğini düşünüyorum.
katma yazar Standback, kaynak
Tecrübelerime göre, bu bir cevaptan çok bir yorum olarak daha iyi olurdu.
katma yazar jmm, kaynak
Daha önemli olanın ne olduğuna bağlı olduğunu düşünüyorum: sorunun cevabı ya da sorunun çözümü.
katma yazar Pat, kaynak

Her bir kartı ayrı ayrı ayarlamak zorunda kalmayacağınızı farz edersek, yalnızca testinizi/alanını 'sahaya' ayarladığınız panoyu göndermeyin. alan kullanımı

0
katma
10k yazma çevrimi olsa da çoktur.
katma yazar dotnetengineer, kaynak