STM32 - Doku und Samples zur MPU?

Gast #2219807
Lesenswert?

Hallo zusammen,
In einem Anflug von Sicherheitsbewusstsein dachte ich mir, man könnte 
die MPU auch ohne OS ganz sinnvoll verwenden. Mein Ziel wäre es, 
zumindest mal das RAM gegen Codeausführung zu Sperren und im RAM einen 
am Ende des Stacks ein paar Byte gegen jedweden Zugriff zu sperren (zur 
Erkennung des Stack-Overflow)

ST schweigt sich zur MPU ziemlich aus (bzw vielleicht finde ich es ganz 
einfach nicht). Und die Doku bei ARM stiftet bei mir eher mehr 
Verwirrung und verwendet zudem noch Assembler für die Beispiele. 
Allerdings ist es das erste mal, dass ich überhaupt eine MPU in nem 
Controller zur Verfügung hab, insofern kann's auch an meinen mangelnden 
Vorkenntnissen liegen...

Gibts irgendwo einen einfachen Samplecode mit ein paar verständlichen 
Erleuterungen?

Schon mal Dank im voraus.
Hannes
Gast #2245522
Lesenswert?

Alle neueren STM32 haben eine MPU. Namentlich also F103F/G (XL Density), 
STM32L und STM32F2xx.

Mittlerweile hab ich auch rausgefunden, wie das Teil funktioniert. Falls 
es mal jemand braucht, hier mal as Schützen des RAM gegen Ausführung von 
Code (getestet auf F205E und F103F):

  // Disable MPU
  MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk;

  // Region #0: No code execution in SRAM:
  MPU->RNR  = 0;
  MPU->RBAR = SRAM_BASE;                       // startaddress of SRAM
  MPU->RASR =  (0x10UL << MPU_RASR_SIZE_Pos)   // region size: 128kb 
(b10000 = 0x10)
             | (0x03UL << MPU_RASR_AP_Pos)     // R/W access allowed
             | MPU_RASR_XN_Msk                 // set XN bit
             | MPU_RASR_ENA_Msk;               // enable region

  // Enable the memory fault exception
  SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;

  // Enable MPU
  MPU->CTRL |= MPU_CTRL_PRIVDEFENA_Msk | MPU_CTRL_ENABLE_Msk;
Gast #2245541
Lesenswert?

So sieht das dann in der dafür gedachten Code-Umgebung aus :-)
1
// Disable MPU
2
MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk;
3

4
// Region #0: No code execution in SRAM:
5
MPU->RNR  = 0;
6
MPU->RBAR = SRAM_BASE;                    // startaddress of SRAM
7
MPU->RASR =  (0x10UL << MPU_RASR_SIZE_Pos)// region size:128kb (b10000=0x10)
8
             | (0x03UL << MPU_RASR_AP_Pos)// R/W access allowed
9
             | MPU_RASR_XN_Msk            // set XN bit
10
             | MPU_RASR_ENA_Msk;          // enable region
11

12
// Enable the memory fault exception
13
SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
14

15
// Enable MPU
16
MPU->CTRL |= MPU_CTRL_PRIVDEFENA_Msk | MPU_CTRL_ENABLE_Msk;
#2245685
Lesenswert?

Hallo Hannes,
in welcher PDF von ST ist die Doku zu finden ?
Ich kenne bis jetzt nur die MMU vom ARM926EJS, die ich schon mehrfach 
für Betriebssysteme verwendet habe.
Und jetzt muss ich auf einem Cortex M3 etwas zaubern, na wenigstens MPU 
!!!
Bei ST ist es etwas schwieriger gleich an die PDF zu kommen.

Danke, Gruß Sascha


PS. an derapplikator, danke für die Info, zum GLÜCK muss ich mein Geld 
nicht mit Deutsch verdienen.
#2245696
Lesenswert?

Sascha P. schrieb:

> in welcher PDF von ST ist die Doku zu finden ?

Cortex M3 Programming Manual, PM0056. Ist nicht unter den References 
sondern folgerichtig unter "Programming Manuals" zu finden, wo man sonst 
nur die Flash Programmierung sucht.

Aber Achtung: In den meisten 101/102/103 Typen, denen unterhalb XL 
Density (Suffix-F/G), ist die MPU nicht enthalten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren