Last edited 11 months ago

Getting started with STM32 MPU devices

1. Extending the STM32 MCU family to the MPU world[edit source]

Microcontroller units (MCUs) are built around MMU-less cores such as the Arm® Cortex-M®, which are very efficient for deterministic operations in a bare metal or real time operating system (RTOS) context. STMicroelectronics STM32 MCUs embed enough SRAM (static RAM) and Flash memory for many applications, and this can be completed with external memories.

Microprocessor units (MPUs) rely on cores such as the Arm® Cortex-A®, with memory management unit (MMU) to manage virtual memory spaces, opening the door to efficient support of a rich operating system (OS) such as Linux®. A fast interconnect makes the bridge between the processing unit, high-bandwidth peripherals, external memories (RAM and NVM) and, usually, a graphical Processing Unit (GPU).

STMicroelectronics has a strong presence in MCU markets with STM32 family [1] and entered the MPU market with a first platform referenced as STM32MP15. This platform aims to address multiple market segments such as industrial, consumer, healthcare, home and building automation. These markets require more processing power and more flexibility, which can easily be leveraged thanks to the open source components ported on the Arm Cortex-A.

MCU to MPU.png


The figure above shows the hardware components that are typically embedded in a MPU, compared to the ones to be found in a MCU. Note that if some of the MPU components are optional, one Arm Cortex-A is always present.

The STM32MP13 extends the STM32MP1 microprocessor series with a lighter MPU that only embeds a single Cortex-A7 and targets applications that have the strongest requirements on security and low power perspectives.

2. Multiple-core architecture concepts[edit source]

Boot chain
Runtime context initialization at boot time

As seen above, the MPU is a multiple-core architecture that can interact with a wide number of peripherals. Some new concepts need to be introduced for a good understanding of the system: these concepts are explained below and are illustrated in the figure on the right.

2.1. Hardware execution contexts[edit source]

Each core can run in a non-secure and, possibly, a secure (Arm TrustzoneTM[2]) modes.
An hardware execution context is composed of a core and a security mode.

The three hardware execution contexts available on STM32MP15 devices are:

  •  Arm Cortex-A secure  (Trustzone)
  •  Arm Cortex-A non secure 
  •  Arm Cortex-M  (non-secure)

The two hardware execution contexts available on STM32MP13 devices are:

  •  Arm Cortex-A secure  (Trustzone)
  •  Arm Cortex-A non secure 

Each hardware execution context can host different firmwares, depending on the platform state. The following contexts can be distinguished:

  • the boot time context, corresponding to a transitory firmware execution (a "boot loader"), when the device is booting up
  • the runtime context, corresponding to an established firmware execution, when the device is up-and-running

A firmware is the executable binary that is the build result of an embedded software component[3] (e.g., Linux). Thus, a firmware is executed on a context: through misuse of language, an embedded software component (instead of its firmware) is sometimes said as executed on a context.

2.2. Firmwares executed in the boot time contexts[edit source]

Each boot time context executes given firmware's:

  •  Arm Cortex-A secure  (Trustzone), executes the ROM code and TF-A BL2[3]
  •  Arm Cortex-A non secure , executes U-Boot[3]

The ROM code is embedded inside the microprocessor device and it is the first code executed by the Arm® Cortex®-A core(s) after reset.
TF-A BL2 and U-Boot are STM32MPU Embedded Software[3] components.

2.3. Firmwares executed in the runtime contexts[edit source]

Each runtime context executes given firmware's:

  •  Arm Cortex-A secure  (Trustzone), executes OP-TEE[3]
  •  Arm Cortex-A non-secure , executes Linux[3]
  •  Arm Cortex-M  (non-secure), executes STM32Cube[3]

OP-TEE, Linux and STM32Cube are STM32MPU Embedded Software[3] components.

2.4. Peripheral assignment to the boot time and runtime contexts[edit source]

The term peripheral assignment is used to identify the action to assign a set of peripherals to a boot time and/or runtime context. This is a user choice that can be realized via STM32CubeMX[4] or manually, in order to properly configure the boot chain[5] and the several pieces of firmware that run on the platform.

The assignment capabilities for each XXX peripheral (e.g., GPIO) are described in the "XXX internal peripheral" article (e.g., "GPIO internal peripheral"), and any article named "STM32MPxx peripherals overview" (e.g., "STM32MP15 peripherals overview) summarizes the assignment capabilities for all peripherals of the STM32MPxx microprocessor device (e.g., STM32MP15), with tables similar to the examples below:

Domain Peripheral Boot time allocation Comment
Instance Cortex-A
secure
(ROM code)
Cortex-A
secure
(TF-A BL2)
Cortex-A
non-secure
(U-Boot)
XXX YYY YYY1 YYY1 can be assigned (single choice) to whether Cortex-A secure (TF-A BL2) or Cortex-A non-secure
YYY2 YYY2 can only be assigned to Cortex-A non-secure
YYY3 YYY3 is shared accross all contexts
Domain Peripheral Runtime allocation Comment
Instance Cortex-A
secure
(OP-TEE)
Cortex-A
non-secure
(Linux)
Cortex-M

(STM32Cube)
XXX YYY YYY1 YYY1 can be assigned (single choice) to whether Cortex-A non-secure or Cortex-M
YYY2 YYY2 can only be assigned to Cortex-A secure
YYY3 YYY3 is shared accross all contexts: this is typically the case for system peripherals

Refer to How to assign an internal peripheral to an execution context for detailed instructions.

3. STM32MP1 family microprocessors[edit source]

What are the main features of an STM32 microprocessor device?
How to program STM32 microprocessor device-internal peripherals?
How to configure internal peripherals for new boards?

Click on the links in the frame below and be guided!
STM32MP135F marketing block diagram.png
STM32MP13 microprocessor
STM32MP157F marketing block diagram.png
STM32MP15 microprocessor

4. References[edit source]