Bu soru AVR'nin yeniden programlanmasıyla ilgilidir .
Proje bilgisi:
ATMEGA644P kullanan pille çalışan bir ürünümüz var. Uygulama sürekli uyku modunda çalışır ve yalnızca saniyede bir (RTC) veya iki harici kesme hattından biri tetiklendiğinde uyanır.
Cihaz, UART üzerinden iletişim kuran oldukça basit bir önyükleyiciye sahiptir (RS232 arayüz IC'yi kullanarak). Sadece donanım ISS programcısına gerek kalmaması için ürün yazılımını güncellemek için bir kolaylık yöntemi olarak hizmet eder. (Önyükleyici, sağlama toplamı güvenli telgraflar bekler)
Cihazlar dahili kararma ile devre dışı bırakıldı, güç tüketimini iki katına çıkardığı ve uzun pil ömrü zorunlu olduğu için tasarlandı (sanırım harici bir kararma algılaması kullanılmış olmalı - bir yeniden tasarım çalışıyor).
Sorun:
Birkaç ayda bir cihaz çalışmayı durduruyor, bu cihazlarda hiçbir ürün yazılımı güncellemesi yapılmadı. Bununla birlikte, daha fazla incelemeden sonra, bu cihazların flaş içerikleri bozulmuş gibi görünüyor. Ayrıca, bu cihazların bazılarının pilleri hala iyi, ancak bir tür düşük voltaj durumunu göz ardı etmek istemiyorum.
Bu, orijinal flash içeriklerinin (solda) bozuk içeriklerle (sağda) karşılaştırılmasıdır:
Bazı gözlemler:
- Bozuk bir blok her zaman en az bir flash sayfasından (256 bayt) oluşur ve sayfaya hizalanır. Başka bir deyişle: Tek bir bayt değil, yalnızca tüm sayfalar etkilenir.
- Bozuk içerik çoğu zaman 0xFF değerini okur, ancak başka değerler de içerebilir veya tamamen "rastgele" olabilir.
- Görüntünün sol tarafındaki küçük çubuk, etkilenen tüm alanları gösterir. Bu cihaz için, toplam flaş içeriğinin yaklaşık onda biri.
- Yalnızca tek bir sayfanın etkilendiği bir cihazımız vardı.
Flaş bellek yazılırken düşük voltaj durumunun flaş içeriğini bozabileceği tamamen mantıklıdır. Ancak bu, flaşa duyarlı bazı talimatların yürütülmesi gerektiği anlamına gelir.
Belki kontrolör düşük voltaj nedeniyle rastgele yeniden başlatılır ve önyükleme yükleyici kodu bu süre zarfında tamamen öngörülemez şekilde davranır. Düşük voltajla ilgili başka bir forumdan birisini alıntılamak için:
"Bu sadece flaş yürütülmekte olan rastgele talimatlar değil, aynı zamanda rastgele talimatlar süresi (flaş kodunun doğru bir şekilde okunup yorumlanacağının garantisi yoktur). mekanizmalar."
Soru (lar):
Sizce "düşük voltaj sırasında rastgele davranış ve flaş sayfalarda veri değiştiren bazı talimatların uygulanması" - açıklama doğru mu? Bu durumda, neden bazı yazılım sorunlarının (yığın taşması, geçersiz işaretçiler) bir nedeni olarak bu tür hataları her zaman görmüyoruz.
Bu tür yolsuzluğa neden olabilecek başka fikirleriniz var mı? Bunun nedeni EMI / ESD olabilir mi?