Nuvoton M031 kaynak

Başlatan Kırambor, 27 Haziran 2022, 17:34:54

merve damar

Merhabalar herkese,
M031 kullanıyorum. hafızaya veri kaydedip okuma yapmak istiyorum. Fcm read ve write fonksiyonlarını kullanıyorum. ama hafıza herhangi bir yazma işlemince bulunamıyorum. Bu konuda çalışan var mı acaba?

yucatar

Alıntı yapılan: merve damar - 20 Mayıs 2023, 19:55:32Merhabalar herkese,
M031 kullanıyorum. hafızaya veri kaydedip okuma yapmak istiyorum. Fcm read ve write fonksiyonlarını kullanıyorum. ama hafıza herhangi bir yazma işlemince bulunamıyorum. Bu konuda çalışan var mı acaba?

Burada bir örnek var https://nuvotonforum.com/threads/flash-hafizaya-4-farkli-byte-kaydetme.39/

Kırambor

#17
Alıntı yapılan: merve damar - 20 Mayıs 2023, 19:55:32Merhabalar herkese,
M031 kullanıyorum. hafızaya veri kaydedip okuma yapmak istiyorum. Fcm read ve write fonksiyonlarını kullanıyorum. ama hafıza herhangi bir yazma işlemince bulunamıyorum. Bu konuda çalışan var mı acaba?
Data Flash enable ettiniz mi? Ben Keil kullandım. Options For Target->Utilities->Use Debug Driver'ın sağındaki Settings->Açılan ekranda sağ altta Chip Setting kısmındaki Setting-> Sağ üstte Data Flash ile alakası bir kısım olmalı oradan data flash enable yapmalısınız.

Ama benim beğenmediğim bir şey var bununla alakalı. Eğer yazdıktan sonra yazdığınız yere tekrar bir veri yazmak istiyorsanız sayfayı/sektörü önce komple silip sonra tekrar yazma işlemi yapmalısınız. Tabi bunun kaç defa yapılabileceği de önemli. Sanırım nuvotonda sınır 100 bin falan olmalı(Bunda emin değilim siz kontrol edin).

quarko

Aynı işlemci ile bu tarz bir çalışma yapmıştım. APROM bölgesine yazma yapacaksan, öncesinde "FMC_EnableAPUpdate()" fonksiyonunu çağırmalısın. Sonra yazma işlemini yapabilirsin. Yazma işlemi bittiğinde de "FMC_DisableAPUpdate()" yapmalısın. Yazma kilitleri açık değilse yazma işlemi gerçekleşmez. Bu işlemlerin öncesinde "SYS_UnlockReg()" ile başlayıp "SYS_LockReg()" ile bitirebilirsin. Eğer kritik kesmelerin vs yoksa, kesmeleri de kapatmanı tavsiye ederim ki, yazma işlemleri arada kesilmesin.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

Kırambor

Alıntı yapılan: quarko - 21 Mayıs 2023, 15:30:35Aynı işlemci ile bu tarz bir çalışma yapmıştım. APROM bölgesine yazma yapacaksan, öncesinde "FMC_EnableAPUpdate()" fonksiyonunu çağırmalısın. Sonra yazma işlemini yapabilirsin. Yazma işlemi bittiğinde de "FMC_DisableAPUpdate()" yapmalısın. Yazma kilitleri açık değilse yazma işlemi gerçekleşmez. Bu işlemlerin öncesinde "SYS_UnlockReg()" ile başlayıp "SYS_LockReg()" ile bitirebilirsin. Eğer kritik kesmelerin vs yoksa, kesmeleri de kapatmanı tavsiye ederim ki, yazma işlemleri arada kesilmesin.
Özel bir bilgi değilse nasıl bir çalışma yaptığınızı söyleyebilir misiniz? Bir de data flashı eeprom gibi kullanmanın bir yolu var mı?

quarko

Alıntı yapılan: Kırambor - 22 Mayıs 2023, 01:03:41Özel bir bilgi değilse nasıl bir çalışma yaptığınızı söyleyebilir misiniz? Bir de data flashı eeprom gibi kullanmanın bir yolu var mı?

Aslında amacım STM32 lerdeki gibi eeprom emulation tarzı birşey yapmaktı ama vakit sıkıntısından sadece APROM hafızada birtakım verileri tutmak için kullanabilmiştim.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

merve damar

Teşekkürler oldu    ::ok

merve damar

Alıntı yapılan: Kırambor - 21 Mayıs 2023, 00:22:43Data Flash enable ettiniz mi? Ben Keil kullandım. Options For Target->Utilities->Use Debug Driver'ın sağındaki Settings->Açılan ekranda sağ altta Chip Setting kısmındaki Setting-> Sağ üstte Data Flash ile alakası bir kısım olmalı oradan data flash enable yapmalısınız.

Ama benim beğenmediğim bir şey var bununla alakalı. Eğer yazdıktan sonra yazdığınız yere tekrar bir veri yazmak istiyorsanız sayfayı/sektörü önce komple silip sonra tekrar yazma işlemi yapmalısınız. Tabi bunun kaç defa yapılabileceği de önemli. Sanırım nuvotonda sınır 100 bin falan olmalı(Bunda emin değilim siz kontrol edin).
Evet komple silmem gerekiyor yanına farklı bişey yazamıyorum. Sadece yazmak istediğim adresi silince de olmuyor :(

quarko

Flash hafıza biriminin çalışma şekli bu tarzda olur. Silinmiş sektöre veri yazdıktan sonra, tekrar aynı veri hücresine veri yazamazsın. Yeniden tüm sektörü silmen gerekir. O yüzden STM32 ler için geliştirilmiş Flash hafızayı EEPROM gibi kullanmak için EEPROM Emulation diye birşey var.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

Kırambor

Alıntı yapılan: quarko - 24 Mayıs 2023, 13:33:39Flash hafıza biriminin çalışma şekli bu tarzda olur. Silinmiş sektöre veri yazdıktan sonra, tekrar aynı veri hücresine veri yazamazsın. Yeniden tüm sektörü silmen gerekir. O yüzden STM32 ler için geliştirilmiş Flash hafızayı EEPROM gibi kullanmak için EEPROM Emulation diye birşey var.
https://www.nuvoton.com/export/resource-files/AN_0002_Using_DataFlash_to_Emulate_EEPROM_EN_Rev1.00.pdf

Ben buradaki PDF'i okuyarak yapmaya çalıştım ama beceremedim. Nasıl yapmaya çalıştıklarını da pek anlayamadım. SRAM data bank'e falan giriyor. Ama sanırsam dikkate almamız gereken doğru pdf bu.

quarko

Nuvoton'daki mantığı incelemedim ama STM32 tarafında şöyle oluyor.

İki adet sektör kullanılıyor. Örneğin (N) ve (N+1). sektör kullanılıyor olsun. İlk olarak kaydedilecek parametreler 16bit veri + 16bit sanal adres verisi, toplam 32bit olarak N.sektöre kaydedilmeye başlıyor. Her veri sanal adresiyle birlikte kaydedildiği için, hep aynı hücreye yazmak zorunda kalınmıyor. N.sektörün sonuna gelindiğinde kaç adet veri kaydedilmişse (N+1).sektöre kopyalanıp, N.sektör formatlanıyor. Sonrasında (N+1).sektörün sonuna gelindiğinde bu sefer tam tersi yapılarak (N+1).sektöre kaydedilen verilerin güncel değeri, N.sektöre kopyalanıyor. Ve (N+1).sektör formatlanıyor. Bu şekilde bir (N). bir (N+1).sektör sırayla kullanılmış oluyor.

Hep aynı hücreye yazılmadığı için, write cycle değerlerinden maksimum olmuş oluyor. Nuvoton da da benzer bir mantık yürütülmüş olabilir.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

merve damar

http://forum.nuvoton.com/viewtopic.php?t=8258
sanırım burda da öyle bişey yapıyor. Napalım çözücez bi şekilde

quarko

Çözülür elbette ama nuvoton un flash endurance değerleri biraz düşük. Çok sık yazma yapacaksan, flash ömrünü hesaplamanı tavsiye ederim. Uygun olmazsa harici bir i2c eeprom a geçilebilir.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

merve damar

Selamlar çok fazla yazma işlemi yapmayacağım harici flash veya eeprom kullanmayı düşünüyorum ama yine de işlemcinin dahili hafızasına kaydetmem gerekenler var. 2 tane sayfa veya sektör  ne derseniz onu belirledim. sıralı yazabiliyorum. tekrar yazma yapmadan önce tüm hafızayı okuyup diğer sayfaya kaydedebilirsiniz veya her enerjilendiğinde düm hafıza okunup diziye kaydedilebilir. Bu şekilde çözdüldü. bide okuma yapmadan önce FMC_Open(); ve FMC_Close(); arasıda okuma yapmanız gerekiyor.