EEPROM verileri neden bozulur

Başlatan alisumer, 14 Nisan 2024, 01:45:53

alisumer

eproma ilk adresten itibaren 13 byte veri yazıyorum bunun ilk byte ı kayıt sayısı ve sonrası sensör verileri her kayıt sonrası kayıt sayısını bir arttırıp kontrol ediyor ve kayıt sayısı 0xFE oldu ise  eprom verilerini 13 adres kaydırıp eski yerlerini 0xFF ile dolduruyorum kayıt sayısını tekrar 0 yapıp devam ediyorum şimdiye kadar çok düzgün çalıştı hatta arızalansın diye kayıt esnasında enerjiyi bile kestim sadece o anki kaydedilen veriler bozuldu ama kayıt sayısına birşey olmadı ama ne oldu ise kayıt sayısı henüz üçte iken sabah cihazı kapattım akşam açtığımda kayıt sayısı dahil ilk üç adresim 0xFF ile doldurulmuş buldum durduk yere bozuldu ve ilk defa oldu sebebi ne olabilir?ilk iki resim normalde çalışan kayıt ve adres geçişini gösteriyor son resimde ise bozulmuş eprom görülüyor





tekrar programı yükledim gene düzgün çalışıyor eprom dahil hiç sorun yok müşteriye verdiğimde aynı sorun olur diye korkuyorum varmı nedeni hakkında bilgisi olan yada çözümü?
Hep meraktan

ahmet_zxc

bence kayıtlarının nereden başlayıp bittiğini bir yerde tut hatta 2 ayrı yerde..

kayıt silme diye bişey yapma. 0xFF ile doldurmaya silmeye uğraşma. adreslemediğin kaydı silinmiş kabul et.

sonuçta kullandığın malzeme 100 000 yazma ömürlü.. 0xFF yazdığında da ömrünü yiyorsun. ve muhtemelen bir yerde hatalı olarak bunu yazıp gerekli datayı siliyorsun.

ete

Şimdiye kadar eprom bilgilerinin kendi kendine değiştiğini hiç görmedim.
En alttaki resme bakarsanız bütün bilgiler yerinde duruyor yalnızca ilk 3 adres bilgisi $FF haline dönmüş gözüküyor. Bu ip uçlarından yola çıkarak benim tahminim, bu adreslere yanlışlıkla $FF bilgisi yazılmıştır şeklinde. Üstelik bu yazma sonlardaki adreslerden ($F2) başlamış ve $02 de son bulmuş gibi gözüküyor.

Ete

alisumer

hocam kaydın başlangıç adresini ff harici ilk veri diye arattığımdan ilk adrese program içinde 0xff yazılmasın diye sınırlama koydum.her kayıt sonrası bir arttırıyorum ve 0xFB olduğunda adresi değişiyorum .ola ki bu adrese bir hata sonucu FF yazsa bile bir sonraki ilk ff olmayan adres hemen sonraki adres zaten en fazla 1 kayıp öyle hata verirdi 3 adrese ff yazmayı dünden beri uğraşıyorum beceremedim.üstelik bu hatalı yazım herhangi bir kayıt yapmıyorken rutin bir şekilde cihazı kapattıktan sonra tekrar açınca oldu desem ki kayıt esnasında bir elektrik dalgalanması falan oldu o da yok eprom kaydı bir tuş ile yapılıyor aklıma ilk gelen bu 100bin kayıt sayısı byte başına bir ömür mü yoksa  tüm epromun ortalama ömrümü öyle ise ortalama adres başına 400 kayıt ömrü olur belki de ilk üç adres artık ölümün eşiğine gelmiştir 
EEPROM_YAZ:
  		WRITE	ADR1	,EE
  		DECFSZ  SAYI    ,F
  		RETURN
  		MOVFF	ADR2	,ADR1			;İLK ADRESİ GÜNCELLE
  		INCF	KAYIT_SAYISI 	,F	    ;İKİNCİ ADRESTEKİ KAYIT SAYISINI BİR ARRTIR VE GÜNCELLE
  		MOVF	KAYIT_SAYISI	,W
  		XORLW	0XFB
  		BTFSS	STATUS	,Z
  		GOTO	XXX
  												;255 KAYIT SAYISI OLDUYSA
  		GOTO	ADRES_DEGIS
XXX: 											;ADRES DEĞİŞ
  		MOVFF	KAYIT_SAYISI	,EE	
  		WRITE   ADR1,EE				
  		GOTO	DEVAM
Hep meraktan

alisumer

Alıntı yapılan: ete - 14 Nisan 2024, 21:13:57Üstelik bu yazma sonlardaki adreslerden ($F2) başlamış ve $02 de son bulmuş gibi gözüküyor.

Ete
burada kastettiğiniz epromun son adrresine kadar yazdın sonra adres değiştirdiğinde 13 adres sayınca sıra 2 ye geldi ise .onu da düşünmüştüm en son kayıt başlangıç adresimi 0xEA olarak kısıtladım o da 13 byte kaydırınca tam olarak o adrese geldiğinden seçildi .sonrasında tüm adresleri 0 yapıp en baştan kayda başlıyorum onu da denedim en az on takla attırdım eproma hata olmadı.sanırım eprom ömrü vefa etmedi ki eğer öyleyse byte başına en fazla 200 kayıt yapmışımdır.belki de orijinal ürün değil bir çakma işlemcim vardır.
Hep meraktan

mehmet

BOR gerilimini yükseğe ayarlayın. Daha önce
başıma geldi.

Yüksek akımlı led adaptöründen beslediğim
mcunun devamlı eeprom değerleri bozuluyordu.

Ancak bu şekilde buldum çözümü.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

alisumer

mehmet hocam şu bor tam olarak ne işe yarıyor voltaj dalgalanmasına karşı bir önlemmi bende o sigorta kapalı birtek poweronreset açık eski alışkanlıktan yoksa onun da ne işe yaradığını anlamış değilim açılışta reset at gibi birşey sanırım zaten açılışta reset atmış olmuyormu.
Hep meraktan

mehmet

#7
BOR gerilim değerinin altında mcunun hep
resette kalmasını sağlıyor.
Sizin mcuda 2.0V - 2.2V civarı BOR gerilimi.
(DS41262E-page 245)
Siz muhtemelen 8MHz den yüksek bir hızda
kullanıyorsunuz.
Bu çalışma rejiminde oluşan sorun yüzünden
e²prom değerleri değişebiliyor/silinebiliyor.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

alisumer

sanırım entegre çıkışında bir kısa devre falan olur da fazla akım çekerse voltaj düşümünden anlayıp işlemciyi korumak için yapılmıştır.lineer regülatör 5 v 1a güç veriyor hocam devrede akım çeken birşey yok iki led var  onlarda 1k ile sönük sönük yanıyor.ama belki de devrede ufak bir temas olmuştur haklısınız bi bakayım ayrıntılı.
Hep meraktan

alisumer

#9
aynı sorun bir kez daha oldu eprom için hiç errata kaydına da rastlamadım. problemime en yakın kaynak ise https://forum.microchip.com/s/topic/a5C3l000000LwXAEA0/t216736 bu oldu o da bir tartışma sadece benim sistemimde eproma verileri yazma sırasında bile bozulmuyor aksine eprom ile alakası olmayan bir blok çalışırken enerjiyi kestiğimde ve sonrasında tekrar çalıştırdığımda oluyor .başlangıçta yanlış bir dallanmayı parazit yada kullanıcı hatası kaynaklı olma olasılığına karşı eprom kayıt rutinine girişin kuralı iki tuştan ilkine 2 saniye basılı tuttuktan sonra bırakılmalı sonrasında diğer tuşa 500ms süre basılı tutulup bırakılmalı bu hali ile kaydedilecek ilk byte bir değişkene kaydedilir sonrasında tekrar aynı tuşa gene 500 ms basılıp bırakılınca başka bir değişkene kayıt yapılır ve  eprom kayıt rutinine dallanılıp bu değişkenler sırası ile kayıt yapılır.yani bir kaza ile olacak şey değil paylaştığım linkte CALL komutu ile eprom rutininin adresi ile normalde işleyen kodun başka bir yerinde kullanılan CALL komutunun işaret ettiği adresin sadece 1 bit farkının olması üzerinde durulmuş o tek bitin her nasılsa 1 değill de 0 olması aslında çok farklı adresler olan 0xEDE ile 0xADE ki aralarında desimal olarak 1000 den fazla fark olmasına rağmen binary olarak 1 bit kadar yakın olmaları sonucu olabileceği kanısına vardım (tabi emin değilim). eğer bu böyle ise genede benim hatam değil bir bitin değişmesine neden olabilecek donanımsal bir eksiklik olabilir. Olası çözüm yöntemim ise şöyle oldu;
    Eprom kaydının yapıldığı rutinin en başında ana programda tüm o tuş kombinasyonları ile geldiğim  CALL eprom_yaz satırından hemen önce kaldırdığım bir bayrağı kontrol ediyorum. Bu bayrak ana programda sürekli gerekli gereksiz(korkudan) 0 a çekiliyor. Böylelikle olası bir yanlış dallanma halinde en azından ikinci bir referansım olmuş oluyor tabi şu an deneme yapıyorum. asıl problemin ne olduğunu da bilmiyorum ama çözüm olacağına inanıyorum. tabi adres hatası teorisi doğru ise yok elektrik paraziti ile eeprom verileri değişiyorsa ki biz bile isteyerek eproma bir veri yazmak istediğimizde yazma bitini açmalı ff ve AA göndermelisin gibi garip bir rutin uygularken kendiliğinden yazılması çok saçma geliyor . 
Hep meraktan

alisumer

Hala devam ediyor problemim bunca sigorta por,bor ne varsa kullandım üstüne yazmayı zorlaştırmak için birsürü bayrak kullandım ama enerji soketini çıkarıp takınca her zaman olmasada ilk adresler siliniyor bunu bazı işlemcilerde gözlemliyorum bazılarında hiç bir türlü arıza verdiremiyorum artık kesin olarak eminim ya üretim hatası yada çin malı çip kaptırdılar. çözüm olarak ise ilk 4 adresi her zaman boş bırakıp sonrasında yazmaya geçmek sorunuma çözüm oldu .belki bi gün lazım olur

Hep meraktan

Powered by EzPortal