ESP32 tabanlı firmware geliştirirken,
Flash Encryption ve PSRAM'in birlikte kullanıldığı bir ortamda
Interrupt Watchdog Reset oluşması sorunuyla karşılaşılmış; bu yazı, bu sorunu çözme sürecini derliyor.
ESP32, IoT ve gömülü ortamlarda yaygın olarak kullanılan bir MCU'dur ve
RTOS tabanında TLS ağ iletişimi, dosya sistemi, OTA güncellemeleri gibi özellikler sunarak
ağ bağlantısı gerektiren gömülü uygulamaların tek bir çiple hayata geçirilmesini mümkün kılar.
7 yorum
İlginç bir içerikti, keyifle okudum
Bu arada DMA alanı da neden cache kullanıyor?
Sorun çıkarmaya çok daha yatkın gibi görünüyor
DMA önbelleği doğrudan kullanmaz; DMA ve CPU tarafından ortaklaşa paylaşılan bellek söz konusu olduğu için önbellek tutarlılığını dikkate almak gerekir.
MMU yok ama MPU ile bellek bölgelerini ve bunlara ait özellikleri tanımlamak mümkün.
Bir göz atmanız iyi olabilir.
Bazı üst seviye MCU’larda, belirttiğiniz gibi MPU üzerinden yalnızca erişim izinleri değil, önbellekle ilgili özellikler de bölge bazında ayarlanabilir. Aşağıdaki ST dokümanı bu konuda iyi bir başvuru kaynağı olabilir: https://community.st.com/t5/stm32-mcus/…
Ancak bu yazıda kullanılan ESP32-S3’te, genel amaçlı CPU’larda veya bazı MCU’larda sunulduğu gibi bellek bölgeleri için cacheable / non-cacheable özelliklerini MPU ya da benzeri bir mekanizma üzerinden ayarlama yöntemi sunulmamaktadır.
ESP32-S3’te harici bellek (Flash/PSRAM), cache/MMU üzerinden erişilecek şekilde tasarlanmıştır (TRM 4.3.3 External Memory) ve erişim izinlerinin kontrolü PMS (Permission Management System) üzerinden yapılır (TRM Chapter 15); ancak bu birim erişim koruması içindir, önbellek üzerinden geçip geçmeyeceğini ya da erişim yolunun kendisini değiştirme işlevi görmez.
TRM (Technical Reference Manual) bağlantısı: https://documentation.espressif.com/esp32-s3_technical_reference_manua….
Doğal olarak ARM çekirdeği olacağını sanıyordum, ben yanlış düşünmüşüm.
Nazik cevabınız için teşekkür ederim
Bahsettiğiniz cache tutarlılığı nedeniyle her seferinde
cache invalidateyapmak gerekiyor olmalı; peki neden bunun yerine doğrudannon-cacheablealan kullanılmadığını merak etmiştim.Ah, genel amaçlı bilgisayarların aksine ESP32 gibi MCU'larda bellek özelliklerini çalışma zamanında sayfa düzeyinde değiştirebilen bir MMU bulunmuyor ve cacheable / non-cacheable olup olmaması önceden belirlenmiş bellek bölgeleri düzeyinde kararlaştırıldığı için, dediğiniz şekilde kullanmak mümkün olmuyor (iç SRAM tamamen non-cacheable, PSRAM ise tamamen cacheable bellek olarak sabitlenmiş durumda).
Güzel sorunuz için teşekkürler!