microcontroller icersindeki eeprom hakkinda soru

Başlatan Karamel, 29 Ağustos 2014, 15:24:46

Karamel

merhaba. hayatimda ilk kez pic mcu ile casima firsati elde ettim. pic18f2525 in icersinde 1024 byte eeprom var. merak ettigim konu su. hayati bir byte i eeproma yazdigimizi dusunelim. eeproma ne kadar guvenebiliriz? mcu takilirsa, elektrikler gidip gelirse, sebeke gerilimi bozulursa vs seyler eeprom icersindeki verimiz bozulabilirmi? eger bozulabilirse bu durumu en guvenli hale nasil getirebiliriz?

ornek programimiz soyle olsun.
unsigned char i=0;

i = Eeprom_Oku(0);                          // 0. adresi oku, i ye at
if(i == 0xFF) Eeproma_Yaz(0,'A');     // eger mcu ilk kez programlanmissa 0. adrese A karakterini yaz.


bu kod mcu yu programladiktan sonra ilk kez calistiginda eepromun 0. adresine A karakterini yazar. sonrada yazma yapmaz. bu yuzden eeprom verimiz yazma hatasi ile bozulmaz. bu durumdan sonrasini inceleyelim.


birde sanirim piclerde armlardaki gibi yazilimsal olarak hafizalara yazma veya okuma izni verilebiliyormu?



quarko

EEPROM zaten mcu kilitlense bile, elektrik kesilse bile dataların kaybolmaması için yazıldığı yerdir. Şebeke gerilimindeki oynamalar ise etki etmez. Ama aşırı gürültülü ortamlarda, mcu nun emc dayanımına göre eeprom daki datalar bozulabilir. Aksi taktirde, eepromdaki veri yıllarca bozulmadan kalabilir.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

Tagli

Bu tür önemli verilerde, EEPROM yazma işlemi bittikten sonra veriyi okuyarak doğru yazıldığından emin olmak gerekir. Ayrıca, veri birden fazla yere yazılarak bozulma ihtimali azaltılabilir.
Gökçe Tağlıoğlu

Karamel

Alıntı yapılan: quarko - 29 Ağustos 2014, 15:35:36
EEPROM zaten mcu kilitlense bile, elektrik kesilse bile dataların kaybolmaması için yazıldığı yerdir. Şebeke gerilimindeki oynamalar ise etki etmez. Ama aşırı gürültülü ortamlarda, mcu nun emc dayanımına göre eeprom daki datalar bozulabilir. Aksi taktirde, eepromdaki veri yıllarca bozulmadan kalabilir.

hocam yukarida verdigim kod ile calisan pic mcu nun beslemesini birkac kez hizlicana koparip yeniden bagladigimda eeprom icerigi bozuluyor.

tagli hocam dediginiz yukaridaki ornek icin mantikli olabilir. yazma anindaki sorunlarinda ustesinden gelebilir. fakat icersinde ne oldugunu bilmedigimiz ve sonrada degistirdigimiz bir veriyi enerji kesilip yeniden verildiginde nasil anlayacagiz? yani eeprom a 'b' yazdik. eneji gitti geldi. icerdsi 'c' oldu. bunu nasil anlayacagiz? yukaridaki ornekte mcu ilkkez programlanmissa eeprom icersindeki verinin FF oldugunu onceden biliyoruz.

Maxim

eeprom için 2 önemli detay var

1-yazmadan sonra 15ms falan beklemek lazım
2-eeproma yazmanın bir sınırı var.
18F2525 için 1.000.000 kere silme/yazma datasheete göre

magnetron

eepromdaki datanın silinmesi veya değişmesi
mikroişlemcinin system crash olması yüzünden

aynı windowsdaki mavi ekran olayı gibi

bunu önlemek için

POR ve BOR resetli ve watchdoglu bir mikroişlemci seçmeli

POR : power on reset
BOR : brown out reset yani besleme voltajı belli sınırların dışına çıkarsa uC yi resetlenir

Tagli

Yazma işlemi sadece bir sefer yapılıyor anladığım kadarıyla. EEPROM verisinin bozulması, yazma işlemi sırasında beslemenin kesilmesi sebebiyle olur bence. EEPROM'da mevcut bir byte'ın beslemenin gidip gelmesi ile bozulması çok sıradışı bir durum.

Alıntı Yapyazmadan sonra 15ms falan beklemek lazım
Aslında tam olarak beklemek zorunda değiliz. İşlemci bu sırada başka bir iş yapabilir, yazma işlemi arka planda devam eder. Elbette başka bir byte yazacaksak, öncekinin yazılmasını beklemek zorundayız. Ayrıca, bu süre içinde beslemenin kesilmesi, verinin bozulmasına sebep olabilir. EEPROM yazma süresi modele göre farklılık gösterebilir. İşin doğrusu, yazma bitini kontrol etmek veya EEPROM kesmesi kullanmaktır. Ezberden 15 ms beklemeyi yanlış buluyorum.
Gökçe Tağlıoğlu

Kabil ATICI

İşlemci içi EEPROM'larda register kontrolu ile meşguliyet kontrolü yapılıyor zaten.
ambar7

Karamel

Alıntı yapılan: magnetron - 29 Ağustos 2014, 16:31:31
eepromdaki datanın silinmesi veya değişmesi
mikroişlemcinin system crash olması yüzünden

aynı windowsdaki mavi ekran olayı gibi

bunu önlemek için

POR ve BOR resetli ve watchdoglu bir mikroişlemci seçmeli

POR : power on reset
BOR : brown out reset yani besleme voltajı belli sınırların dışına çıkarsa uC yi resetlenir

hocam dediklerinizi yaptim. bu configuration lari yapmadan once 10 besleme problemi denemesinin 3. sunde eeprom ucuyordu. simdi ise 9. sunda ucuyor. yani yine eepromun icersi degisiyor. bu arada bu bozulmalar normal sartlar altinda olmuyor. dedigim gibi. sistemin enerjisini hizlica kapat aç kapat aç yapiyorum. sanki beslemede problem varmis senaryosu yaratiyorum.


tagli hocam. bir kere duzgunce calistiktan sonra birdaha yazma olmadigindan yazma aninda enerjinin kesilmesi yukaridaki kodlarla mumkun degil.

Maxim

@tagli
doğru söylüyorsun en güzeli eeprom kesmesi

magnetron

ben 8051 le harici eeprom 'lu PLC yapmıştım

geçen gün eski bir müşterimden PLC' sinin 1997' den beri çalıştığını duydum

8051 in kendi POR BOR watchdog olmadığı için DS1232 entegresi kullanmıştım

ama son 2- 3 senedir STM32 kullandığım PLC'lerde harici EEProm silinmesi daha sık oluyor

mesela 1.5 - 2 senede bir gibi

eğer harici eeprom kullanırsan bunun hafızasının bir bölümünde  write protect olan bir alanı var
bu sayede silinmesini engellersin


Karamel

hocam stm lerin kendi flashini kullanmak varken neden harici eeprom kullaniyorsunuz ki?

Kabil ATICI

Harici eeprom kullanmanın avantajı eeprom dip ve soketli ise, diyelim ki kullandığınız kart arızalandı ve eeprom üzerinde ayarlar var. Kart değiştirdiğiniz zaman, ayarları baştan yapmaya çalışmak yerine eepromu değiştiriyorsunuz, yeni kart aynen hizmette. Daha da olmada eeprom kopyasını al ve istediğin kadar kopyala.
ambar7

tekosis

biraz riskli ama başka bir ihtimal yok ise şu şekilde bir şey yapılabilir. önemli veri aynı anda 10 farklı hafızada depolanır. veri hafızadan çekilirken baytlar arasında uyumsuzluk varsa on hafızadaki verilerden en fazla aynı olanı doğru kabul edilir ve bu şekilde devam edilebilir. sanki anlatabildim. :)
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

Karamel

hocam ucarsa eepromun bir kismi gidiyordu komple.


simdi yeni birsey yaptim ve sanirim bu sorunu cozdum. suana kadar belki 100 kere besleme ile oynadim bozulma yok! eskiden besleme 3-4 kez gel git yapinca eeprom icersindeki veriler bozuluyordu.

1. olarak piclerde power up timer diye birsey varmis. bu ilk enerji verildiginde saymaya baslayan, sayim bittikten sonra mcu nun bazi kisimlarina yetki veren bir timer. mesela bu timer dolmadan mcunun eeprom modulu calismaz. bunu on yapmaliyiz.

2. bor reset. bu reset sistemi ile mcunun besleme gerilimi dustugunde mcu yine bazi kisimlarini kapatiyor ve resetleniyor. sonra yine power up timer ile calisip yine bazi kisimlarini aktif ediyor. mesela eeprom gibi. bunuda on yapmaliyiz.

son olarak eeproma_yaz fonksiyonumda eeproma yazmadan once EECON1.WREN e yetki verdim. yani logic 1 yaptim. yazma islemlerinden sonra WREN i 0 yaptim. yani yazma islemlerinden sonra eepromu protect ediyorum.

bunlari yapinca sorun ortadan kalkti gibi. yada 20-30 kat azaldi bilemiyorum. suan icin daha bozulmadi. sorun halen devam ederse buraya yazacagim ama simdilik bu ayarlarla eeprom sorunu yasanmiyor gibi.