Flash hafızayı kullanmak?

Başlatan mur@t, 23 Aralık 2013, 00:37:13

mur@t

Merhaba,

Kurduğum bir devrede, dataları saklamak için fazladan bir alana ihtiyacım var.
Açıkcası bugüne kadar dahili eeprom alanı yeterli geldiğinden, I2C eeprom okuma konusunda hiç bir deneyimim yok.

Ya harici eeprom kullanacağım (24C16 yeterli)
Ya da dahili flash hafızayı kullanacağım.

Bugün birkaç deneme yaptım, flash hafızaya yazdığım dataları tekrar okuyabiliyorum.
Ancak reset yaptığımda datalar da uçuyor. Normalde bootloader programları da bu alana yazmıyor mu?
PIC beslemesi gidip geldiğinde, benim yazdığım dataların kalması gerekmez mi?

18F252 kullanmayı düşünüyorum.
0X8000 adresinden sonra yazıyorum, üstteki "On-Chip Program Memory" alanına mı yazmalıyım?



drozk

Read '0' yazan yerlerde flash hafıza yok. On-Chip program memory yazan yere kayıt yapabilirsiniz.
Yalnız flash hafızanın yazma ömrü eepromdan azdır. sık yazma-silme yapacaksanız harici eeprom kullanmayı düşünmenizi tavsiye ederim.

esensoy

24C16 dan korkmaya gerek yok bence, 2 tel çekeceksiniz, pull up yapmayı atlamayacaksınız, örnek te kod da çokça var,
En tehlikeli an "zafer" anıdır.

mur@t

#3
Alıntı yapılan: drozk - 23 Aralık 2013, 02:14:16
Read '0' yazan yerlerde flash hafıza yok. On-Chip program memory yazan yere kayıt yapabilirsiniz.
Yalnız flash hafızanın yazma ömrü eepromdan azdır. sık yazma-silme yapacaksanız harici eeprom kullanmayı düşünmenizi tavsiye ederim.

Deneyeyim,  çok sık yazmayacağım aslında.
Tahmini ne kadardır ömürleri?


mesaj birleştirme:: 23 Aralık 2013, 10:15:37

Alıntı yapılan: esensoy - 23 Aralık 2013, 09:01:12
24C16 dan korkmaya gerek yok bence, 2 tel çekeceksiniz, pull up yapmayı atlamayacaksınız, örnek te kod da çokça var,

Ne kadar zor olabilir ki dedim bende ama :)

donanımda sorunum yok, yazma okuma yapıyorum.
24C16 da, adresleme ve page kısmında takıldım. Özellikle "Sequential Read" kısmını beceremedim.

"16-byte Page (4K, 8K, 16K) Write Modes" diyor, yani her page için 16 byte yazabilirim anlamına mı geliyor? yoksa 16 baytlık paketler halinde 256 byte mı yazabilirim 1 page içine?

yani;

I2C1_Wr(0x00);                          //ilk adres
for i := 0 to 15 do I2C1_Wr(i);    //16 byte yaz

I2C1_Wr(0x10);                          //16 byte ileri git
for i := 0 to 15 do I2C1_Wr(i);    //16 byte yaz

bu şekilde 256 byte yaz, sonra page değiştir, aynı işlemi yap.  Bu şekilde mi olmalı?