STM32 MEMORY PROTECTION UNIT

Başlatan yldzelektronik, 15 Ekim 2019, 10:57:30

yldzelektronik

Selamlar,

Bu birimin ne olduğu ile ilgili bilgiye ihtiyacım var. Konuyla ilgili app note var. Ama donanımı tam olarak kafamda oturtamadım.

Neden mcu flashını veya QSPI Flashı erişimden koruyasın ki? Zaten öylece yazamazsın. Chache bir alan değil. Flash Write işlemi RAM erişimi gibi değil.

Kaldı ki, QSPI Flash a yazmak istesem Memory Mapped Mode kapatılıp o şekilde yazılacak. Bu mode kapatılınca 0x9000 0000 adresiyle erişilebilir bir adres olmayacak. Yani o bustan çıkarılmış olacak. Bu durumda benim erişimimi MPU nasıl denetleyecek?

Bir de M7 lerde chache neden var? Pipeline için mi?

Bu konuyu biraz anlatabilecek var mı?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

apsis

Yazdığın programın başkaları tarafından çekilmesini istemezsin sanırım. Bu yüzden MPU'ya ihtiyaç duyulur.

Cache sadece m7'lerde yok. M4'lerde de var.

İşlemci hızı yükseldiğinde memory hızı işlemciye göre düşük kalıyor. Cache bellek bu hız uyumsuzluğunu ortadan kaldırarak işlemciyle kodlarını senkron hızda çalıştırmanı sağlıyor. Yani kodların flash'dan cache belleğe oradan da CPU'ya gidiyor.

Bu durum PC işlemcileri için de geçerli.


 
"Makineye Beyin" MEKATRONİK

yldzelektronik

Alıntı yapılan: apsis - 15 Ekim 2019, 12:57:05Yazdığın programın başkaları tarafından çekilmesini istemezsin sanırım. Bu yüzden MPU'ya ihtiyaç duyulur.
...

Hocam bu cümlenizi biraz açmanızı isteyeceğim. Neticede elbette istemem. Ancak biraz daha teknik detaya ihtiyacım var. Neden/Nasıl MPU kodun başkası tarafından çekilmesini engelliyor?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

taydin

#3
STM32 MPU kullanmadım, o konuda bir bilgim yok.

Ama flash belleği yazmaya kapatmak için önemli sebepler var.

1) Bir işlemcide çalışan program bir bug nedeniyle çakılırsa, ve bu işlemcide MMU yoksa, işlemci rastgele komutlar işlemeye başlar ve istatistik olarak, flash registerlerine uygun değerler yazıp flash içeriğini bozma ihtimali var.

2) Bazı işlemcilerde de besleme voltajı azalırsa, devreyi tasarlayan da bu durum için uygun tedbirler almadıysa, gene rastgele komutlar işlemeye başlar (buna brownout da denir). Ve gene flash belleğin içeriğinin bozulma ihtimali var.

O yüzden flash belleklere özel bir write protect biti eklenir. Write protect'i kaldırmak için yapılması gereken işlemler dizisi, bu olayın bir çakılma veya brownout neticesinde tesadüfen yapılma ihtimalini son derece azaltır. Hatta artık pratikte bunun mümkün olmayacağını söyleyebiliriz.
Timur Aydın (mekatronik.org)

OptimusPrime

Olaya sadece bare metal olarak bakma. Diyelimki bir isletim sistemin var ve kullanici kodu calistirilmasina izin veriyorsun. Ya amcamin biri kernel in oldugu adreslere birsey yazmaya kalkarsa. Veya belli bir ram alaninda yuksek guvenlik gerektiren birseyler yapiyorsun, atiyorum kullanici adi sifresi veya kredi karti bilgisi gibi ya vatandasin biri burayi okuyabilecek bir kodu araya sikistirirsa gibi. Paranoyak isler  :D

Bu arada cache hepsinde vardir. Hem datada hem instruction da. Dma ile calisirken dikkat et  :D
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

OptimusPrime

Olaya sadece bare metal olarak bakma. Diyelimki bir isletim sistemin var ve kullanici kodu calistirilmasina izin veriyorsun. Ya amcamin biri kernel in oldugu adreslere birsey yazmaya kalkarsa. Veya belli bir ram alaninda yuksek guvenlik gerektiren birseyler yapiyorsun, atiyorum kullanici adi sifresi veya kredi karti bilgisi gibi ya vatandasin biri burayi okuyabilecek bir kodu araya sikistirirsa gibi. Paranoyak isler  :D

Bu arada cache hepsinde vardir. Hem datada hem instruction da. Dma ile calisirken dikkat et  :D
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

yldzelektronik

Ben aslında galiba olayı biraz yanlış anlamışım. ROM belleği chache olarak kullanmıyor. ROM bellekteki verileri chache belleğe çekiyor. Yanlış mı anladım?

Peki bu durumda neden MPU ayarları yapılıyor?

Terminolojik olarak MPU/MMU kavramını biliyorum. Ben bunun gömülü hali nasıl olur onu anlamaya çalışıyorum. RAM tarafında sorun yok. Anlık erişim tehlikeli olabilir. Yazma işi özel yöntemler gerektirmiyor.

Ama ROM için durum çok farklı. Her şeyden evvel yazmak için önce silmek gerekiyor. Yazma yapmak istesem önce o bustan ayırmam gerekecek (STM32 özelinde söylüyorum). Hal böyle olunca MPU anlamsız. Zaten 0x9000 0000 adresinde kimse yok. Neyi koruyor?

Hakikaten kafam karıştı şuan. Bu işi STM32 özelinde anlatabilir misiniz?

Bir de ITCM dediğimiz şey sadece komutların chache lendiği alan, DTCM datanın chache lendiği alan mı? Doğru mu anlıyorum?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

OptimusPrime

#7
MPU ve MMU farkli seyler  ;) ROM u da zaten silemezsin/icerigini degistiremezsin  :D

Neyse anladim ben seni.  :)
Burada onemli olan guvenlik. Soyle dusun; IoT cihazin var ve QSPI uzerinden boot ediliyor. Diyelimki birde bu sistemi uzaktan update eden bir task yazdin. Sistemde bir de senin zararina calisan bir kod parcasi var. Bir anini yakalayip flash a kendisini kopyalamak veya flash guncelinirken gelen datayi manipule etmek istiyor (ornekler abartilabilir). Bu durumda MPU yu uygun bir sekilde ayarayip sadece senin taskinin belirli bir alandaki veriye ulasmasi ve sadece onun QSPI cevre birimini kullanmasini saglayabilirsin. Bu durumda hicbir sekilde senden baskasi QSPI a veya flash bellege erisemez.

Bunun daha katmerlisi ARM trusted zone denilen donanim. MPU biraz daha basit bir icat bunun yaninda.

https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

OptimusPrime

https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||