Forum: Mikrocontroller und Digitale Elektronik STM32 - Doku und Samples zur MPU?


von Hannes S. (Gast)


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

von Sascha P. (spy007)


Lesenswert?

Gegenfrage, hat der STM32 überhaupt eine MPU ? Ich denke die gibts nur 
bei manchen Cortex M3 Typen optional, sonst wär das Ding ja im 
Datenblatt angegeben.
Aber Interessant ist es auch für mich zu wissen, welcher Chip eine MPU 
hat, da ich Sicherheitsaplicationen mache.

Gruß Sascha

von derapplikator (Gast)


Lesenswert?

>>Sicherheitsaplicationen
welch grauslich denglisches Wort - dazu falsch geschrieben...

von Hannes S. (Gast)


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;

von Hannes S. (Gast)


Lesenswert?

Ups... kleines Formatierungsproblem: Das (b10000 = 0x10) gehört noch zum 
Kommentar der Zeile darüber.

von Codeumgebung (Gast)


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;

von Hannes S. (Gast)


Lesenswert?

Sehr schön. Danke schön! Ich werd's mir merken. Und mich bei Gelegenheit 
vielleicht sogar mal hier anmelden...

von Sascha P. (spy007)


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.

von (prx) A. K. (prx)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.