Flash belleklere yazım, tasarımları gereği her bir biti temsil eden FET lojik lowa çekilerek yapılır. O yüzden belleğin yazım yapılmamış alanları lojik high gözükür. Yani atıyorum adres 5'te (byte) 0xFF değeri var. Siz tutup buna 0xAA yazabilirsiniz. Hatta sonradan 0x00' a çekebilirsiniz. Ama 0x00'ı görmüş bir bayt tekrarn 0xFF değerini alamaz. (Sektör komple silinmedikçe.)
videolara neden devam etmiyorsunuz anlatım ve işleyiş çok iyi ? bir çok örnek yapsanız ne kadar dua alacaksınız farkındamısınız hocam hatta atollic ile yapsanız stm nin kendi derleyicisi daha iyi olmaz mı
Hocam merhaba gayet sade, erim kasmadan anlaşılır anlatmışsınız. Emeğinize sağlık. Hocam ben bir matlap kodunu c dline genarete ettim ve keilde yazdığın koda gömmek istiyorum. Anlatımınızdaki kod ları while(1) için de mi yapmamız gerekiyor.?
Hocam son olarak , ben Stm32l476 vg kullanıyorum sanırım "timeot flash" olayı ondan kaynaklanıyor. Sizin kulladığınız kodları stm32l476 a devşirebilir miyim ?
hocam merhaba sizin kodları birebir kullanıyorum fakat "flash_read" ve "flash_write" fonksiyonları sıkıntı çıkarıyor ayrıca sector sildiğiniz yerde , l serisinde banks ve page kavramları var
Videonun sonuna doğru kalibrasyon değerlerini saklamaktan bahsettiniz. buna bir örnek olarak makale, kitap ismi veya video linki paylaşır mısnız lütfen.
1) Are the Flash routines in the video code from ST/github or custom? 2) How do you find what sectors are in use by the program memory that's executing, so that you don't accidentally erase/write that area?
Hocam video için sağolun yardımcı oldu.Sizce ticari bir projede harici eeprom mu kullanmak mantıklı yoksa dahili flasha mı yazmak?Burada şüpheye düştüğüm yer sürekli silinip yazılması ilerleyen süreçte mcu'nun flashına zarar vermez mi?
Flash hafızayıda eeprom hafıza gibi kullanabilirsiniz. Emulated eeprom şeklinde internette arama yaparsanız, kaynak bulabilirsiz. Yinede karar noktasında yazma sayısı seçim konusunda belirleyici olacaktır.
Hocam Merhaba. Flash_Erase_Sector fonksiyonu bende gözükmüyor. Hal library ile yazıyorum. Hafızaya 0x5 yazdırdım ve bunu debug ile gördüm. daha sonra 0 yazdırayım dedim. onu da yazdı. fakat şu an üzerine veri yazamıyorum. Erase fonksiyonu ile sectorü temizleyemediğim için olabilir mi bunun sebebi ? Flash_Erase_Sector fonksiyonu yerine ne kullanabilirim ? Teşekkürler
Aynı hatayla karşılaşan arkadaşlarımız olursa şu şekilde problemi çözebilirler : void Erase_Flash (uint32_t adr) { FLASH->CR|=0x00000002; //PER enable FLASH->AR=adr; //FLASH->AR registerine silinmek istenen adres yazilir FLASH->CR|=0x00000040; //STRT anable while((FLASH->SR&0x00000001)); //Islem bitene kadar bekle(BUSY kontrol ediliyor) FLASH->CR &= ~0x00000042; //FLASH->CR ilk durumuna aliniyor (kilit hala açik!) }
Flasha bu şekilde yazmak doğru bir yöntem değildir bu yöntemi asla kullanmayın, öncelikle flasha yazarken kesme kontrolü yapılmalıdır, kesmeler global olarak kapatılmalı yazma işlemi içerisinde flasha yazma hataları kontrol edilmeli ve çıkarken kesme eski durumuna yeniden yüklenmelidir(açmak değil). En basit şekliyle bu şekilde olmalıdır. Asla while döngü içinde yazma işlemi bırakmayın...
Hello, first you need to copy the flash content into ram. Then erase the flash. Finally update the ram content and write the updated ram values into flash.