STM32MP1 SWARCH
組込みソフトウェアのアーキテクチャ
1.0 版

ようこそ。このトレーニングでは、主に STM32MP1 マイクロプロ
セッサシリーズを対象とした組込みソフトウェアのアーキテクチャとソフトウェア配布について説明します。

1

MCU から MPU へ

2

MPUCortex-M
Cortex-A

GPU

Cortex-M

Cortex-M

ペリフェラル

相互接続

相互接続

ペリフェラルペリフェラル

MCU

MCU

出典：ST Wiki article [Getting started with STM32 MPU devices]

マイクロコントローラユニット、いわゆる MCU は、Arm Cortex-M などのMMU のないコアを中心に構築されており、ベアメタルまたはリアルタイムオペレーティングシステムの環境での決定的動作に非常に効率的です。
STM32 MCU は、多くのアプリケーションに十分なスタティック RAM とFlash メモリを組み込んでおり、さらに外部メモリで補えます。
マイクロプロセッサユニット、いわゆる MPU は、Arm Cortex-A などのコアに依存しており、仮想メモリ空間を管理するメモリ管理ユニットを備えているため、Linux などの豊富なオペレーティングシステムを効率的にサポートできます。高速相互接続により、処理装置、広バンド幅のペリフェラル、外部メモリ、およびオプションのグラフィック処理装置（GPU）間のブリッジが形成されます。
STM32MP1 と呼ばれるこの最初の MPU プラットフォームは、デュアルコ
ア Arm Cortex-A7 と Arm Cortex-M4 コアを中心に構築されています。このプラットフォームは、産業、コンスーマ、ヘルスケア、ホームおよびビルディングオートメーションなどの複数の市場セグメントに対応することを目的としています。
MPU の世界に円滑に移行するための ST マイクロエレクトロニクスのアプローチは、MCU を MPU のサブシステムと見なして、両方の世界を 1 つのデバイスに配置することで構成されています。
2

マルチコアアーキテクチャの概念
Cortex-M（非セキュア）コンテキスト• Arm® Cortex®-A セキュア（Trustzone）は OP-TEE を実行

Cortex-A セキュアコンテキスト• 実行されるファームウェアのランタイムコンテキスト

Cortex-A 非セキュアコンテキスト

ランタイム• ハードウェア実行環境• « 1 つのコアと 1 つのセキュリティモード »3• Arm Cortex-M（非セキュア）は STM32Cube を実行• ペリフェラルのランタイムコンテキストへの割当て

ブートチェーン• Arm Cortex-A 非セキュアは Linux を実行• 割当てまたは共有
ブート時

出典：ST Wiki article [Getting started with STM32 MPU devices]

STM32MP1 などのマルチコアアーキテクチャをよく理解するには、いくつかの新しい概念を導入する必要があります。
まず、1 つのハードウェア実行環境は、1 つのコアと 1 つのセキュリティモードによって定義されます。
STM32MP1 マイクロプロセッサには、以下の 3 つのハードウェア実行環境があります。
• Arm Cortex-A セキュア（Trustzone とも呼ばれます）• Arm Cortex-A 非セキュア• Arm Cortex-M（非セキュアモードのみをサポート）
各ハードウェア実行環境は、ブート時のブートチェーン実行の一部をサポートし、実行時のファームウェアの実行をサポートします。また、STM32MP1 マイクロプロセッサには、以下の 3 つのランタイムコンテキストがあります。
• Arm Cortex-A セキュアは OP-TEE セキュア OS を実行します。
• Arm Cortex-A 非セキュアは Linux OS を実行します。
• Arm Cortex-M は STM32Cube を実行します。
「ペリフェラルの割当て」という用語は、1 セットのペリフェラルをランタイムコンテキストに割り当てる動作を識別するために使われます。
各ペリフェラルは、1 つのランタイムコンテキストに割り当てるか、複数のコンテキストで共有できます。
共有ペリフェラルは通常、リセットとクロック制御用の RCC のようなシステムリソースです。
3割当て
共有

A7NS またはM4 に割当て

A7 セキュア（TZ） A7 非セキュアにに割当て
割当て
A7S と A7NS によって共有

M4 に割当てA7NS と M4 によって共有

ペリフェラルの共有

凡例

A7S または
A7NS に割当て

A7S、A7NS、M4によって共有

出典：ST Wiki article [STM32MP1 peripherals overview]
コプロセッサCortex-A7
Cortex-A7（マスタ）
（マスタ）
コア

割込み

ウォッチドッグ

EXTI

IWDG1

SYSCFG

GIC

IWDG2

RTC

NVIC

WWDG

DDR

BKPSRAM
（4KB）

RAM

電力と発熱

セキュリティ

DMA

DMA1

DMA2

トレースおよびデバッグ

HASH2

ETZPC

CRYP2

CRC2

TZC

RNG1

HASH1

TAMP

CRYP1

CRC1DSI

LTDC

MDMA

MCU SRAM12 MCU SRAM34（128KB）（128KB）

RETRAM（64KB）

LPTIM（x5）GPIOZ

GPIOA-K

永続的ストレージ ネットワーク
FDCAN

ビジュアル
GPU

IO
TIM（x12）RNG2DMAMUX

タイマ
TIM（x2）Cortex-M4（コプロセッサ）

IPCC

STGEN

SYSRAM（256KB）

4

DCMI

CEC
（*）：一部のペリフェラルは多機能であり、お客様によって異なるマッピングがされる場合があります。

低速インタフェース
USART（x3）

UART（x4）

SPI6

USART1I2C（x4）SPI（x2）

I2C4

I2C6

USBH
（ホスト）

OTG
（USB OTG）
高速インタフェース

BSEC
RCC

DBGMCUQUADSPI

PWR

HDP

FMC

DTS

STM

SDMMC1/2（*）

大容量記憶装置

ETH

SDMMC3（*）

SPI I2S（x3）（*）

アナログ
VREFBUFDAC

DFSDM（*）

ADC

SPDIFRX

SAI（x4）

オーディオ

前のスライドで紹介した概念に沿って、この図の凡例は、各ペリフェラルの以下の 2 つの可能な状態を区別して示しています。
「専有」とは、1 つのハードウェア実行コンテキストのみが実行時にペリフェラルを•使用していることを意味します。単一色のボックスは割当てが静的であることを意味しますが、垂直セパレータ付きの 2 色または 3 色のカラーボックスは、アプリケーションのニーズに応じて、特定のコンテキストにペリフェラルを割り当てるためにユーザの選択が必要であることを意味します。この割当ては、STM32CubeMXツールで、または手動で行うことができ、Cortex-A7 セキュアおよび Cortex-M4のハードウェア分離によって補強されています。
「共有」とは、ペリフェラルが同時に 2 つまたは 3 つでさえも異なる実行コンテキス•トによって使用できることを意味します。このモードは、共通リソースにアクセスするときに、指定されたコンテキスト間で競合が発生しないことを保証するレジスタバンキングや他のメカニズムを使うことを意味します。
例：•左側にある TIM インスタンスは 1 つのランタイムコンテキストに割り当てることができ、このコンテキストのみによって使用されます。
•すぐ下の RCC は、3 つのランタイムコンテキストから同時にアクセスできるシステムペリフェラルです。
割当てに関係するすべてのメカニズムは、ST Wiki [STM32MP15 peripherals
overview]の記事で説明されています。
この図は、STM32 MPU 組込みソフトウェアディストリビューションにおける割当てのST マイクロエレクトロニクスの推奨または選択を示していることに注意してください。その他の可能性については、STM32MP15 のリファレンスマニュアルで説明されている可能性があり、後に弊社のディストリビューションで検討される場合があります。
4

STM32 CubeMX によるペリフェラルの割当て

5

このスクリーンショットは、STM32CubeMX ツールで実行できる割当ての例を示しています。
• USART1 は、OP-TEE 用に Cortex-A7 セキュアに割り当てられています。
• USART2 は、Linux 用に CortexA7 非セキュアに割り当てられています。
• USART3 は、STM32Cube 用に Cortex-M4 に割り当てられています。
USART6 に使用されている、これまで言及されていなかった左側の 2 つの列に注意してください。
• « ブート ROM »列は、ROM コードがこのインスタンスから起動できるようにしています。この選択により、ピンの可能性が ROM コードでサポートされるピンのみに制限されます。
• « ブートローダ »列は、選択されたペリフェラルがブートローダから見えるようにします。この選択の主な目的は、ブートローダ用に生成されるデバイスツリーのサイズを制限することです。
ROM コードとブートローダは、プラットフォームのブートのトレーニングで紹介されています。

5

Cortex-M4 ポート

6

Cortex-M4（簡略図）

コア

デバッグ

命令フェッチ
データアクセス

デバッグアクセス

アドレスデコーダNo

addr <
0x20000000?

Yes

No

S-バス

命令フェッチ?

D-バス

Yes

I-バス

ML-AHB
出典：ST Wiki article [STM32MP1 RAM mapping]

このスライドは、図に示した 3 つの異なるポートを介してMLAHB 相互接続に接続されているという、Cortex-M4 の特異性に焦点を当てています。
• I-バスは、0x00000000--0x1FFFFFFF のアドレス範囲のコードの命令をフェッチするために使用されます。
• D-バスは、0x00000000--0x1FFFFFFF のアドレス範囲のデータの読取り／書込みに使用されます。
• S-バスは、0x20000000--0xFFFFFFFF のアドレス範囲のすべてのアクセスに使用されます。すべてのSTM32MP15 内部ペリフェラルのレジスタは、この範囲にマッピングされています。
これらのポート間で Cortex-M4 ファームウェアのアクセスのバランスをとることにより、システム性能のチューニングが可能になります。これが、MCU SRAM が 0x10000000 から始まる最初のアドレス範囲で定義されている理由ですが、0x30000000 から始
まる 2 番目の範囲においても参照可能です。便宜上、この 2 番目の範囲は次のスライドでは示していませんが、存在することに注意してください。
6

凡例：Standby 時に保持されるメモリの内容

ソフトウェアメモリマッピング

7• 以下のメモリマッピングは、ハードウェアレベルで実際に公開されているすべての領域のサブセット
Cortex-A7 セキュア（TZ）

Cortex-A7 非セキュア

Cortex-M4

0xFFFFFFFF

0xDFFFFFFF

DDR（最大 1GB）

0xC0000000
TAMP によって設定された非セキュア／セキュア境界

0x5C00A100
0x54000000

バックアップレジスタ
BKPSRAM（4kB）

バックアップレジスタ（64 B）

Cortex-M4 S-バス
0x44011000

CAN SRAM（10kB）

0x38000000

RETRAM（64kB）

TZMA によって設定された非セキュア／セキュア境界

0x2FFC0000

セキュア SYSRAM（256kB）

MCU SRAM（384kB）

0x10000000

TZMA によって設定された非セキュア／セキュア境界

0x00000000

非セキュア SYSRAM

セキュア ROM

非セキュア ROM

（128kB）

MCU SRAM（384kB）

Cortex-M4 I-バス、D-バス

RETRAM（64kB）

この図は、STM32 MPU 組込みディストリビューションでメモリ領域を使用するさまざまな実行コンテキストに関するさまざまなRAM および ROM 領域を図示しています。
ここで RETRAM が 2 回現れていることに注意してください。
• コプロセッサのファームウェアのロード用に Cortex-A7 非セ
キュア側で 1 回
• コプロセッサのファームウェア実行のために Cortex-M4 側で1 回（0x00000000 のアドレスからブートを開始します）
この図は、前の図と同じ ST Wiki 記事 [STM32MP1 RAMmapping]で入手できます。
Wiki では、これらの各領域の使用方法に関する情報も提供しています。

7

共有 RAM メモリのマッピング

8• 前のスライドですでに説明したように、それぞれのコアは同じアドレスで同じ領域を参照しているわけではないことがあることに注意。
Cortex-M4
Cortex-A7 非セキュア
Cortex-A7 非セキュア

MCU SRAM4（64kB）
MCU SRAM3（64kB）

Cortex-M4

DMA バッファ
プロセス間通信（IPC）バッファMCU SRAM2（128kB）

データ

MCU SRAM1（128kB）

エンコード

RETRAM（64kB）

コードおよびデータベクタテーブル• もちろん、各お客様は、製品のニーズに合わせてこのマッピング（領域の場所とサイズ）を調整可能。

このスライドは、STM32MP1 マイクロプロセッサで利用可能なRAM バンクと、STM32 MPU の組込みソフトウェアディストリビューションに適用される一般的なマッピングを示しています。
• RETRAM は、Cortex-M4 がベクタテーブルとコードおよびデータを配置するために使用します。
• MCU SRAM1 および SRAM2 を使用して、Cortex-M4ファームウェアの残りのコードとデータを配置できます。
• MCU SRAM3 は通常、プロセス間通信バッファのマッピングに使用されます。これについては、コプロセッサ管理のトレーニングで詳しく説明しています。
• MCU SRAM4 は、DMA1 または DMA2 インスタンスを使用するときに広バンド幅が必要な場合に、Cortex-A7 コア用のDMA バッファを配置するために使用できます。
このマッピングを領域の境界に合わせことは必須ではありません
が、Cortex-M4 メモリのハードウェア分離がバンク単位の粒度でサポートされているため、これは大きな関心事になる可能性があります。

8サードパーティ
ST

コミュニティ

凡例

STM32MPU 組込みソフトウェア
信頼できるアプリケーション

アプリケーション9

アプリケーション

STM32MPU 組込みソフトウェア
OpenSTLinux ディストリビューション

アプリケーションフレームワーク
OP-TEELinux

STM32CubeMPU パッケージ

ユーザ空間
カーネル空間OpenSTLinux BSP
OP-TEE

ブートチェーン
TF-A

OP-TEE

プラットフォーム
設定

Cortex-A7
セキュア

Linux
カーネル

U-BootLinux

Cortex-A7
非セキュア

Cortex
M4

出典：ST Wiki article [STM32MPU Embedded Software architecture overview]

それでは、STM32MPU 組込みソフトウェアディストリビューションを紹介しましょう。
この図は、STM32MPU 組込みソフトウェアの主要コンポーネントを定義するために使用される用語を説明しています。
Arm Cortex-A で実行される OpenSTLinux ディストリビューションには、次のものが含まれます。
• OpenSTLinux BSPは次の3つを含みます。
• TF-A および U-Boot に基づくブートチェーン• ArmCortex-A のセキュアモードで実行される OP-TEE セキュアOS
• Arm Cortex-A の非セキュアモードで実行される Linux® カーネル
• アプリケーションフレームワークは BSP に依存するミドルウェアであり、次の API を提供します。
• OP-TEE 側で、機密操作を許可する信頼できるアプリケーションを実行するためのAPI（これは Linux および STM32Cube MPU
パッケージからは見えません）• Linux 側で、通常、ディスプレイやタッチスクリーンなどを介してユーザと対話するアプリケーションを実行するためのAPI
STM32Cube MPU パッケージは、ArmCortex-M で実行されます。これは、他の STM32 マイクロコントローラと同様に、コプロセッサ管理を備えた HAL ドライ
バとミドルウェアに基づいています。
この図は、ST Wiki でクリック可能な画像として利用できるので、探索したい領域に簡単にジャンプして、その詳細を得ることができます。
9••

コミュニティ

小文字 = コミュニティのフレームワーク
大文字 = ペリフェラルドライバ

凡例

サードパーティST

Linux フレームワークおよびドライバ

10

Linux
アプリケーションLinux
middleware
ユーザ空間
カーネル空間framework（sub）framework

DRIVERDRIVERDRIVER

このスライドの目的は、次のスライドの内容を理解しやすくするた
めに、Linux システムがどのように構成されているかについて非常に抽象度の高いレベルの概要を説明することです。
ユーザ側には、Linux カーネルを呼び出すために通常ミドルウェアに依存するアプリケーションがあります。
Linux ドライバは、その API を直接ユーザ空間には公開していません。その代わりに、ドライバは、それらが統合された API をユーザ空間に公開しているフレームワークに登録されます。フレームワークのコンセプトによって、安定したフレームワークのAPI で動作するアプリケーションが Linux カーネルの将来のバージョンでも動作し、他のドライバを実装する他のプラットフォームでも動作できることが保証されるため、このコンセプトは非常に重要です。

左側では、フレームワークによっては、いくつかのサブフレームワークが含まれることがあるのが分かります。これは、たとえばMMC フレームワークのサブパートである SD カードサポートの場合にあてはまります。
10••

コミュニティ

小文字 = コミュニティのフレームワーク
大文字 = ペリフェラルドライバ

凡例

サードパーティST

OpenSTLinux + STM32Cube
Linuxアプリケーション

信頼アプリケーション

11

コプロセッサアプリケーションLinux
middleware

ユーザ空間
カーネル空間コア

ネットワーク 高速インタフェース
arch

pwm

pinctrl

irqchip

dmaengine

netdev

Armv7-A

TIMER

GPIO

GIC

DMAMUX

FDCAN

watchdog

LPTIMER

gpiolib

EXTI

DMA

ETH

IWDG
dts
STM32MPboard
op-teeコア
pscisecuremonitor
HAL
ドライバ

rtc

reset

clock

RTC

RCC

RCC

MDMA

WLAN
BT

低速インタフェース

gpu driver

OTG

USBH

sdio（*）

usb gadget

v4l2

SDMMC

OTG

DCMI

（*）：sdio は mmc フレームワークに含まれている

コプロセッサ
rproc
STM32MP

電力と発熱

ビジュアル

usb hostmailbox
IPCC

GCNANOcec
CEC
drm/kms
LTDC

FreeRTOS

DSI

ミドルウェア（usb、wifi、…）

アナログ

OpenAMP

spi

i2c

tty

suspendcpuidleregulator

SPI

I2C

USART

PWR

PWR

PWR

RCC

RCC

PMIC

hwmon

cpufreq

thermal

asoc

iio

DTS

RCC

DTS

SAI

DAC

I2S

ADC

SPDIFRX

DFSDM

永続的ストレージmtd

mmc sd（*）

nvmem

QUADSPI

SDMMC

BSEC

FMC

rproc_rsrm
コプロセッサに割り当てられたIP

トレース&デバッグ
hw random

op-teedriverRNG

virtioオーディオ

大容量記憶装置

セキュリティ

rpmsg

coresight

perf

STM（...）

PMU

DFSDM

HAL
ドライバ

TIMER

cryptoOP-TEE

Cortex-A7
セキュア

CRYP

HASH

CRC

Linux

Cortex-A7
非セキュア

LPTIMER

CortexM4

このスライドは、下 STM32MP1 ペリフェラルドライバとそれぞれの Linux フレームワークを示しています。
• フレームワーク名は小文字で書かれています。
• ペリフェラルのドライバ名は大文字で書かれています。
• 色分けによって、各コンポーネントのソースコードの提供元：
すなわち、3rdパーティ、コミュニティ、ST マイクロエレクトロニ
クスを示します。
この図は ST Wiki でも見られます。

11コミュニティ

凡例

サードパーティST

Open-Embedded のユーザ空間

12• ここに示すコンポーネントの一覧は完全なものではなく、お客様はアプリケーションのニーズに合わせて調整可能。
Linux
アプリケーションコア

ネットワークbash

busyboxgrep

coreutils

kbd

can-utils

dhcp

apt

dpkg

elfutils

kmoddbus

iproutebluez5pythonperlbinutils

低速インタフェース
i2c-tools

minicom

高速インタフェース
ckermit

大容量記憶装置
gptfdisk

mmcutils

mtdutils

openssl

cacertificates

セキュリティ
opensshblktool

ライブラリ
memtester（glibc、…）

ビジュアル
waylandlibusb

電力と発熱

glmark2

westonfb-testlibv4lcpufreq
utils

gcnanoOpenGL ES

libdrmlibjpeg

gstreamer

デバッグ
gdb-server

オーディオ
lttng

blktrace

alsa

アナログ
libiioユーザ空間
カーネル空間Linux

Cortex-A7
非セキュア

STM32MPU 組込みソフトウェアディストリビューションは、組込
み Linux プラットフォーム用の Open-Embedded ビルドフレーム
ワークによってビルドされています。

この図は、弊社のディストリビューションに組み込まれている通常のコンポーネントを示しています。ST Wiki と Open-Embedded
オンラインディストリビューションを自由に探索して、このセットアップをお客様のニーズに合わせてカスタマイズしてください。

12