STM32WB - Flash内蔵 Flash メモリ
1.0 版

こんにちは、STM32WB Flash メモリのプレゼンテーションへ
ようこそ。STM32WB Flash メモリの特徴のすべてを説明し
ます。

1

概要
• STM32WB は、最大1MB のシングルバン
ク Flash メモリを内蔵しています。
• Flash インタフェースは、すべてのアクセス（読出し、プログラム、消去）、メモリ保護、セキュリティ、およびオプションのバイトプログ
ラミングを管理します。

2

アプリケーション側の利点• 高性能で低消費電力• 小さな消去粒度• 短いプログラム時間• セキュリティと保護

STM32WBは、最大1MB のシングルバンク Flash メモリを内蔵しています。
Flash メモリインタフェースは、すべてのメモリアクセス（読出し、プログラム、および消去）、メモリ保護、セキュリティ、オプ
ションバイトを管理します。
この Flash メモリインタフェースを使用するアプリケーション
は、低電力アクセスとともに高パフォーマンスという利点を活用できます。消去の粒度が小さく、プログラミング時間も短くて済みます。
STM32WB Flash メモリは、コードとデータ、読出しや書込み
アクセス時のさまざまなセキュリティおよび保護メカニズムを備えています。

2

主な機能

3

• 最大1MB のシングルバンク Flash メモリ• 4KB のページ粒度• 高速消去（22ms）と高速プログラミング（ダブルワードで82µs）• ART アクセラレータ™（命令キャッシュ、データキャッシュ、プリフェッチバッファ）により、動作周波数に対応した線形的な性能向上を実現• エラーコード訂正（ECC）：64bit ダブルワードで 8bit
• シングルエラーの検出と訂正• ダブルエラーの検出と通知

STM32WB の Flash メモリには、いくつかの重要な機能があります。
最大1MB のシングルバンク Flash メモリを搭載しています。
ページサイズに対応する消去粒度はわずか4KB です。
ページ、バンク、または全体消去操作は 22ms しか必要とせず、プログラミング時間はダブルワードの場合わずか 82µsです。
命令キャッシュ、データキャッシュ、およびプリフェッチバッファを備えた適応型リアルタイムメモリアクセラレータでは、動作周波数に対応した線形的な性能向上が得られます。
Flash メモリは、64bit のダブルワードごとに8bit 長のエラー
コード訂正（ECC）をサポートしています。シングルエラーは検出され、訂正されます。ダブルエラーは検出されますが、訂正はされません。

3

Flash メモリの構成

4

Flash メモリは、次のように構成されています。
• それぞれ4KB のページが 256ページ含まれるメインメモリブロック。各ページは、
512バイトの行 8 行で構成されています。
• 情報ブロックには次のものが含まれます。
• ST ブートローダ用に予約済みのシステムメモリ• ユーザデータに使用する1KB（128ダブルワード）の OTP（ワンタイムプログラマブル）領域• OTP 領域のデータは消去不能、ダブルワードを1回だけ書き込めます。1つのビットを"0"に設定すると、オール 0x0の値を除いて、ダブルワード全体が書き込み不可になります。

• ユーザ設定のオプションバイト

Flash メモリには、それぞれが4KB のページ、256 ページが含まれています。各ページは、512バイトの行 8 行で構成されています。
メインメモリブロックの横には、3つの部分からなる情報ブロッ
クがあります。
最初の部分は、ST のブートローダ用に予約済みのシステ
ムメモリです。選択すると、デバイスはシステムメモリを起動しブートローダを実行します。
2番目の部分は、1KB のワンタイムプログラマブル領域です。
OTP 領域は消去できず、ダブルワードを1回だけ書き込むことができます。ダブルワードの1つのビットを"0"に設定すると、ダブルワード全体はオールゼロ以外の値を書き込めなくなります。以前にプログラムされたダブルワードのプログラミング
は、オールゼロをプログラミングする場合にのみ許可されます。
最後の部分は、ユーザオプション設定用のオプションバイト
が含んでいます。

4Flash メモリの構成
Flash 領域

メインメモリ

情報ブロックFlash メモリアドレス

サイズ

5

名前

0x0800 0000 – 0x0800 0FFF

4KB

ページ 0

...

...

...

0x080F F000 – 0x080F FFFF

4KB

ページ 255

0x1FFF 0000 – 0x1FFF 6FFF

28KB

システムメモリ

0x1FFF 7000 – 0x1FFF 73FF

1KB

OTP エリア

0x1FFF 8000 – 0x1FFF 807F

128バイトオプションバイト5

このスライドは Flash メモリマップを示しています。メインメモ
リ用に256 ページあり、ページゼロから始まります。ページ番
号は、ソフトウェアでのページ消去化手順で使用されます。

5

Flash メモリの機能

6

堅牢なメモリの完全性と安全性• ECC（エラーコード訂正）：64bit ワードで8bit 長• シングルエラー訂正：FLASH_ECCR に設定された ECCC ビット、オプションの割込み生成• ダブルエラー検出：FLASH_ECCR に設定された ECCD ビット=> NMI• FLASH_ECCR レジスタに保存された障害アドレス• プログラミングの粒度は64bit （実際は8bit の ECC を含む72bit）• 2つのプログラミングモード：• 標準（メインメモリおよびOTP用）• 高速（メインメモリのみ）Flash ロケーションの検証なしで64ダブルワードをプログラミング

Flash メモリにはエラーコードの訂正機能が組み込まれ、堅牢な完全性と安全性が確保されています。
ECCは、64bit ワードに対して8bit の長さです。シングルエ
ラーの場合は訂正されます。ECCC ビットは Flash のECCレジスタで設定され、有効な場合は割込みが生成されます。
ダブルエラーの場合、検出はされますが訂正はされません。
ECCD ビットは Flash の ECC レジスタに設定され、有効な場合はノンマスカブル割込みが生成されます。ECC エラーが検出されると、障害アドレスが Flash の ECC レジスタに保存されます。
プログラミングの粒度は64bit ですが、実際には8bit のECCが加わり72bit になります。2つのプログラミングモードがあります。メインメモリと OTP 用の標準モードと、メインメモリのみに適用される高速モードです。標準モードでは、プログラミン
グを開始する前に Flash メモリはダブルワードが消去されていることを確認します。高速モードでは、Flash ロケーションを検証せずに64 のダブルワードがプログラムされます。

6

プログラムミング／消去時間7短いプログラミングと消去時間、小さなページサイズ=> データ EEPROM エミュレーションの利点
パラメータ

標準値

64bit プログラミング時間

82µs

ページ（4KB）の消去時間

22ms

1行（64ダブルワード）のプログラミング時間

標準モード：5.2ms
高速モード：3.8ms

1ページ（4KB）のプログラミング時間

標準モード：41.8ms
高速モード：30.4ms

Flash（1MB）のプログラミング時間

標準モード：11s
高速モード：8s

全体消去時間22ms

Flash メモリのプログラミング時間は、64bit のダブルワード
でわずか82µsです。1 ページ（4KB）をプログラムするには、標準モードで 41.8ms、高速モードで 30.4ms が必要です。
Flash メモリ全体をプログラムするには、高速モードで 8s 必
要です。
ページの消去時間は 22ms です。Flash メモリ全体を消去するのに必要な時間もまた、わずか 22ms です。
短いプログラミングと消去時間、加えて小さなページサイズ
は、データの EEPROM のエミュレーションに便利な特徴です。

7

行（64ダブルワード）の高速プログラミング

8• メインメモリのみ高速プログラミングモードでプログラム可能です。
• プログラミング前に、ハードウェアによる Flash ロケーションの検証は行いません。
• 64のダブルワードは連続して書き込む必要があります。
• すべてのプログラミングにおいて、Flash メモリには高電圧が維持されます。
• 連続した2つのダブルワード書込みリクエスト間の最長時間は、プログラミング時間（20µs 前後）で規定されます。ただし、割込みは無効にするものとします。

• Flash クロック周波数（HCLKS）は少なくとも8MHz とする必要があります。

高速プログラミングモードでは、標準のプログラミングモード
より速く、64ダブルワードをプログラムできます。
メインメモリのみ高速プログラミングモードでプログラム可能です。
高速モードでのプログラミングの前に、ハードウェアによるFlash メモリアドレス位置の検証は行いません。
64のダブルワードは連続して書き込む必要があります。 すべてのプログラミングにおいて、Flash メモリには高電圧が維持されます。2つのダブルワード書込みリクエスト間の最大時
間はプログラミング時間で、約20µs です。したがって、割込みを無効にして、2つのワード書込みリクエスト間が20µs を
超えないようにする必要があります。
高速プログラミングモードでは、最小クロック周波数は少なくとも8MHz にしなければなりません。

8

プログラミングモード：標準対高速

9プログラミングモード
標準

高速

対象

メインメモリ + OTP 領域

メインメモリのみ

粒度

8バイト

512バイト

固有の制限なし

アドレス位置のチェックなし
Flash クロック周波数≥ 8 MHz
割込み禁止

512バイトのプログラムに要する時間

5.2ms

3.8ms

このスライドは、標準プログラミングモードと高速プログラミン
グモードの比較を示しています。標準モードはメインメモリとOTP 領域のプログラミングに使用できますが、高速モードは
OTP プログラミングには使用できません。標準モードでは64bit のダブルワード、つまり 8バイトのプログラミングが可能ですが、高速モードでは 64のダブルワード、つまり 512バイ
トのみのプログラミングが可能です。
高速モードでは、アドレス位置の内容はプログラミング前にチェックされません。Flash クロック周波数は8MHz より大きくする必要があり、また CPU 割込みは禁止です。512バイトのプログラムの所要時間は、標準モードで 5.2ms、高速モード
で 3.8ms です。

9

Flash メモリの拡張
耐久性（書き換え回数）
データ保持年数

10-40～+105°C で最低 10000 回書き換え
55°C で 10000 回書き換え後 30 年
85°C で 10000 回書き換え後 15 年
105°C で 10000 回書き換え後 10 年
85°C で 1000回 書き換え後 30 年
105°C で 1000 回書き換え後 15 年
125°C で 1000 回書き換え後 7 年

書き換えサイクル耐性

1 ppm

このFlash メモリは、最高 105°Cでの書き換えを最低で 1 万回保証します。データ保持年数は、55°Cでの 10000 回書き換えで 30 年、85°C での 10000 回書き換えで 15 年、105°C での 10000 回書き換えで 10 年です。また、85°C での 1000 回書き換えで 30 年、105°C での 1000 回書き換えで 15 年、125°C での 1 000 回書き換えで 7 年となっています。

10Flash メモリ読出しアクセス

11

64MHzで80 DMIPS• 適応型リアルタイムメモリアクセラレータ（ART Accelerator™）は、Flash メモリへのアクセス時間によらず動作周波数に対して線形的な性能向上が得られます。

ウェイトステート（WS）（遅延）

HCLK (MHz)VCOREレンジ 1

VCOREレンジ 2

0WS

≤ 18

≤6

1WS
2WS
3WS

≤ 36
≤ 54
≤ 64

≤ 12
≤ 16

Flash メモリの読出しには、読出しアクセスに挿入するクロッ
ク周波数に応じたウェイトステート数を設定する必要があります。ウェイトステート数は電圧スケーリングレンジにも依存します。レンジ1では、3 ウェイトステートで Flash メモリに最大64MHz でアクセスできます。0 ウェイトステートの場合、最大18MHz までのアクセスが可能です。レンジ2 では、2 ウェイト
ステートで最大16MHz までのアクセスが可能です。適応型リ
アルタイムメモリアクセラレータ（ART アクセラレータ）により、クロック周波数によらずプログラムを0 ウェイトステートで実行できます。これにより、周波数に対してほぼ線形的な性能と、64MHz で80 Dhrystone MIPS を実現しています。

11

適応型リアルタイムメモリアクセラレータ（ART Accelerator™）

12

傑出したパフォーマンスと低電力• Cortex®-M4

Iキャッシュ
1KB

I-Code AHB 32

I プリフェッチバッファ
I電流バッファCortex M4
コア

D電流バッファIキャッシュ
32バイト

Cortex M0+
コア

S-BUS AHB 32

I プリフェッチバッファ
I電流バッファDキャッシュ
32バイト
D電流バッファアービトラージ

D-Code AHB 32

Dキャッシュ
256バイト

Flash
メモリ
128K x 64bit（1MB）• 命令キャッシュ = 32ラインの4x64bit （1Kバイト）、
命令用• データキャッシュ = 8ラインの4x64bit （256バイト）、リテラルプール用• プリフェッチバッファ• Cortex-M0+• 命令キャッシュ = 4ラインの1x64bit （32バイト）、
命令用• データキャッシュ = 4ラインの1x64bit （32バイト）、
リテラルプール用• プリフェッチバッファ• キャッシュサイズ、電力、パフォーマン
スの最適なトレードオフ

ART アクセラレータは傑出したパフォーマンスをもたらし、動作消費電力を削減します。本アクセ
ラレータは、Cortex-M4 の1KB の命令キャッシュ、256バイトのデータキャッシュ、プリフェッチ
バッファ、およびCortex-M0+ の32バイトの命令キャッシュ、32バイトのデータキャッシュ、プリ
フェッチバッファで構成されています。
Cortex-M4 命令キャッシュは4ダブルワードの32ラインから構成され、データキャッシュは4ダブ
ルワードの8ラインから構成されます。すべての命令キャッシュメモリラインが満たされると、LRU(最も長い時間使われていない）ポリシーを使用して命令メモリキャッシュの中で置換するラインを決定します。この機能は、ループを含むコードの場合に特に有益です。
このアーキテクチャは、キャッシュサイズ、消費電力、パフォーマンス間で最良のトレードオフを実現するために選択したものです。
キャッシュミスが発生する度に、キャッシュは要求されたダブルワードによってのみ更新されます。
そうすることで、Flash へのアクセスを制限し消費電力を抑えることができます。ライン内の4ダブ
ルワードは全て有効であるとは限りません。
キャッシュミスの場合、コードは Flash メモリから直接命令を取得します。並行して、64bit のラインが有効化された現行バッファと有効化されていれば命令キャッシュにコピーされます従って、次のシーケンシャルアクセスは現行バッファから直接行なわれます。
プリフェッチが有効な場合、さらに64bit の Flash メモリアクセスが行なわれ、プリフェッチバッファ
はシーケンシャルデータで満たされます。
データが現行バッファにある場合、CPUは現行バッファを読み出します。その次のシーケンシャ
ル読出しはプリフェッチバッファにて行なわれ、同時に現行バッファにコピーされるため、次のシーケンシャルデータを格納するためのスペースが確保できます。
データが現行バッファになく、プリフェッチバッファにあればそこから読み出されます。プリフェッチ
バッファになければ、命令キャッシュから読み出されます（キャッシュヒットしている場合）。そうでない場合、Flash アクセスが行なわれます。

Cortex-M4 I-Code 命令、D-Code データ、Cortex-M0+ S-bus 命令、およびデータ間の Flash
アクセス調停は、ラウンドロビンを使用します。

12

ART の基本

13

消費電力とパフォーマンスの結果は、アプリケーションコードに依存
ほとんどの場合、キャッシュが ON かつプリフェッチが OFF の条件でエネルギー効率は最高に• プリフェッチがON：ART の命令キャッシュは分岐キャッシュのように動作します。
• キャッシュは処理フロー内で分岐／ジャンプが発生するたびに更新されます。
• シーケンシャルアクセスは、現行命令バッファ＋プリフェッチバッファにより発行されます。

プリフェッチバッファがアクセスされるたびに、その内容が現行命令バッファに転送され、プリフェッチバッファを満たす新しい Flash アクセスが行われます。
=>キャッシュの内容が変更されます。

• プリフェッチがオフ（リセット値）：ARTのキャッシュは普通のキャッシュのように動作します。
• プリフェッチバッファが無効なので、シーケンシャルアクセスでもキャッシュコンテンツが変更されます。

命令キャッシュは、プリフェッチバッファが有効か無効かによって動作が異なります。
プリフェッチバッファが有効な場合、ART の命令キャッシュは分岐キャッシュのように動作します。キャッシュは処理フロー内で、分岐、または、ジャンプが発生するたびに変更されます。シーケンシャルア
クセスは現行命令バッファとプリフェッチバッファにより発行されます。
プリフェッチバッファがアクセスされるたびに、その内容は現行命令
バッファに転送され、プリフェッチバッファにデータを満たすための新しい Flash アクセスが行なわれます。この場合、キャッシュの内容は変更されません。
プリフェッチバッファが無効になっている場合、ART 命令キャッシュは普通のキャッシュのように動作します。プリフェッチバッファは無効なので、シーケンシャルアクセスでもキャッシュの内容が変更されます。
消費電力とパフォーマンスのトレードオフは、アプリケーションごとに評価し、プリフェッチバッファの有効、無効を判断する必要があります。
ほとんどのアプリケーションでは、プリフェッチバッファを有効にすることでパフォーマンスが若干向上しますが消費電力が増えます。ほとん
どの場合、キャッシュを有効にプリフェッチバッファを無効に設定し、Flash メモリへのアクセス回数を減らすことで最適なエネルギー効率が得られます。

13

シーケンシャル16bit 命令の実行（2WS）- プリフェッチ無効

14

Cortex-M4 パイプライン
@
1

WAIT
@
2

命令 1, 2, 3, 4 を読出し

F
1

D
1
F
2
@
3

E
1
D
2
F
3
@
4

命令 1, 2, 3, 4 を実行

@
6
E
2
D
3
F
4
@
5

F
6

D
6

@：アドレス要求
F：フェッチステージ
D：デコードステージ
E：実行ステージE
6

AHB プロトコル
E
3
D
4

E
4

WAIT
@
6

命令 5, 6, 7, 8 を読出し

F
5

D
5
F
6
@
7

E
5
D
6
F
7
@
8

E
6
D
7
F
8

命令 5, 6, 7, 8 を実行

本スライドは、Flash メモリへのアクセスに2 ウェイトステート
必要な場合で、プリフェッチ無効時にシーケンシャル16bit 命
令の実行に必要なサイクル数を示しています。各 Flash アクセスにより64bit または4 命令を取得できます。これにより、各 Flash アクセスにおいて、4 命令ごとに2 ウェイトステートが挿入されます。

14

シーケンシャル16bit 命令の実行（2WS）- プリフェッチ有効
@
1

WAIT
@
2

命令 1, 2, 3, 4 を読出し

F
1

D
1
F
2
@
3

E
1
D
2
F
3
@
4

命令 1, 2, 3, 4 を実行
命令 5, 6, 7, 8 を読出し

E
2
D
3
F
4
@
5

15

Cortex-M4 パイプライン
E
3
D
4
F
5
@
6

@
6
E
4
D
5
F
6
@
7

E
5
D
6
F
7
@
8

F
6

D
6

E
6

AHB プロトコル
E
6
D
7
F
8

@：アドレス要求
F：フェッチステージ
D：デコードステージ
E：実行ステージ

命令 5, 6, 7, 8 を実行
命令 9, 10, 11, 12 を読出し本スライドは、Flash メモリへのアクセスに2 ウェイトステートが必要な場合で、プリフェッチ有効時にシーケンシャル16bit 命令の実行に必要なサイクル数を示しています。各 Flash アクセス後に、次の Flash アクセスを行ないプリフェッチバッファを満たすことができます。従って、現行バッファから全ての命令がフェッチされた
後、次のシーケンシャル命令はプリフェッチバッファより読み出され、命令フローが順番に処理される限り、ウェイトステートは挿入されません。

15

Flash メモリの保護

16

アプリケーションでの必要性に応じた柔軟な Flash メモリ保護機能• 読出し保護（RDP）

メモリ保護のトレーニング資料を参照• SRAM1からのブート時、ブートローダの選択時、またはデバッグインタフェース（JTAG/SWD）によるFlash/SRAM2/バックアップレジスタへのアクセスを禁止します。

• 独自仕様コード保護（PCROP）• 2KB の粒度を持つ2領域読出しまたは書込みアクセスから特定のコード領域を保護する目的で使用します。コード実行のみ可能。

• 書込み保護（WRP）• 4KB の粒度を持つ2 領域特定のコード領域を不要な書込みアクセスおよび消去から保護する目的で使用します。

• Cortex-M0+ セキュリティ(SFD)• Flash の上部領域に4KB の粒度を持つ排他的 Cortex-M0+ アクセス領域を設定する目的に使用します。

オプションバイトを使用して、複数の Flash メモリ保護オプションを設定できます。
読出し保護は、RDP オプションバイトを使用して設定できます。読出
し保護は、Flash メモリ、SRAM2、およびバックアップレジスタに対す
る、デバッグインタフェースによるアクセス、SRAM1 からのブート時、またはブートローダ選択時のアクセスを禁止します。
独自仕様コードの保護は、PCROP オプションバイトを使用して設定できます。これらのオプションは、特定のコード領域を読出しまたは書込みアクセスから保護します。コードは実行のみ可能です。保護領域
は、2KB の粒度で2つの領域を定義できます。
書込み保護は、WRP オプションバイトを使用して設定できます。これ
らのオプションは、不要な書込みアクセスと消去から特定のコード領域を保護します。書込み保護領域は、4KB 単位で定義できます。
Cortex-M0+ のセキュリティは、SFD オプションバイトを使用して設定できます。このオプションは、排他的 Cortex-M0+ アクセス領域として
特定の Flash メモリ領域を確保するものです。Cortex-M0+ のセキュリティ領域は、4KB の粒度で定義できます。
これらの保護オプションの詳細については、システム保護やCortexM0+ のセキュリティに関する個々のトレーニング資料を参照してください。

16

Cortex-M0+ セキュリティ

17• Flash メモリの上部領域は、排他的 Cortex-M0+ アクセス領域として保護できます。
• セキュアユーザオプションである SFD と SFSA で定義• グローバルセキュリティが有効です。
• セキュアユーザオプション SBRD および SBRSA により、SRAM2a 上部セキュリティを追加可
能• セキュアユーザオプション SNBRD および SNBRSA により、SRAM2b 上部セキュリティを追加
可能• SYSCFG でペリフェラルセキュリティを有効化可能

SFSA

Cortex-M0+
セキュア

SBRSA

Cortex-M0+
セキュア

SRAM2a

Flash

セキュア
非セキュア

SNBRSA

Cortex-M0+
セキュア

SRAM2bKEY
SYSCFG
ペリフェラル
セキュリティ
イネーブル

AES1
AES2
PKA

true RNG

Cortex-M0+ のセキュリティは、Flash Security Disable オプ
ションをオフにすれば有効になります。セキュア Flash は、
Secure Flash Start Address オプションのアドレスから開始
します。SRAM2a および SRAM2b セキュリティは、Flash メ
モリに加えて、セキュアバックアップ RAM ディセーブル、セキュアバックアップ RAM 開始アドレス、セキュア非バックアップ RAM ディセーブル、およびセキュア非バックアップ RAM
開始アドレスの各オプションによっても有効にできます。高度暗号化標準アクセラレータ、秘密鍵アクセラレータ、真性乱数発生器などのセキュリティペリフェラルは、システム設定 IPのレジスタビットによって保護できます。

17ユーザオプションバイト

18

ユーザオプションバイトは次の場合に読み込まれます。
• 電源リセット後（BOR または STANDBY/SHUTDOWN の終了）
• Flash 制御レジスタ（FLASH_CR）のOBL_LAUNCH ビットがセットされたとき
オプション

説明

BOR_LEV[2:0]

ブラウンアウトリセットの閾値レベル

nRST_STOP; nRST_STDBY;nRST_SHDWSTOP/STDBY/SHUDOWN モード終了時のリセットの生成／リセットの不生成

WWDG_SW; IDWG_SW
IWDG_STOP; IWDG_STDBY

ハードウェア／ソフトウェアウィンドウのウォッチドッグ／独立型ウォッチドッグ
STOP/STANBY モード時の、独立型ウォッチドッグのカウンタ停止の有無

nBOOT0, nBOOT1
BOOT0SW

ブート設定
BOOT0 選択

SRAM_RSTSRAM_PE

システムリセット時の SRAM2a/2b 消去
SRAM2a/2b のパリティチェックイネーブル

IPCCDBA

IPCC データバッファベースアドレス

Flash メモリには、デバイスの特定の機能を設定するためのさまざまなオプションバイトが用意されています。
ユーザオプションバイトは、電源リセットまたはブラウンアウトリセット
時、STANDBY モードまたはSHUTDOWN モードからの復帰時、または、Flash 制御レジスタの OBL_LAUNCHbit がセットされた時にロードされます。
ブラウンアウトリセットの閾値の設定には、3つのオプションビットを使用します。
3つのオプションで、STOP、STANBY、SHUTDOWN 時の低電力
モードを禁止または許可します。
4つのオプションで、ウォッチドッグの有効化をハードウェアどソフト
ウェアのどちらで行なうかの設定、および STOP モードと STANBY
モードにおける独立型ウォッチドッグのカウンタ停止の有無を設定します。
3つのオプションと BOOT0 ピンを使用して、ブートに使用するメモリを設定します。
2つのオプションを使用して、システムリセットで SRAM2 を消去するかどうか、また SRAM2 のパリティチェックの有効、無効を設定します。
また、プロセッサ間通信のデータバッファとして使用する SRAM2 の共通メモリ領域の定義に使用するオプションもあります。

18

ユーザオプションバイト
オプション

19

説明

RDP[7:0]

読出し保護レベル

PCROP1A_STRT
PCROP1A_END
PCROP1B_STRT
PCROP1B_END

PCROP 領域A 開始オフセットアドレス
PCROP 領域A 終了オフセットアドレス
PCROP 領域B 開始オフセットアドレス
PCROP 領域B 終了オフセットアドレス

PCROP_RDP

RDP レベルが下がると保存される PCROP 領域

WRP1A_STR
WRP1A_END
WRP1B_STRTWRP1B_END

書込み保護領域 A 開始オフセットアドレス
書込み保護領域 A 終了オフセットアドレス
書込み保護領域 B 開始オフセットアドレス
書込み保護領域 B 終了オフセットアドレス

SFSA、SBRSA、SNBRSASBRV、C2BOPT

Cortex-M0+ FlashとSRAM2のセキュリティ開始アドレス
Cortex-M0+ ブートリセットベクタおよびブートオプション Flash/SARM2.

DDS

Cortex-M0+ デバッグディセーブル

* Cortex-M0+ の書込み保護はオプションです。

メモリ保護のオプションとして、オプションバイトがいくつか用意されています。まず、読出し保護の RDP、2つの領域の開始アドレスと終了アドレスの PCROP、2つの領域それぞれの開始アドレスと終了アドレスの WRP があります。
また、PCROP_RDP ビットは、読出し保護がレベル1 からレベル0 に解除されたときに PCROP 領域を保持または消去するのに使用します。
Flash メモリの Cortex-M0+ セキュアメモリ領域は SFSA で、
SRAM2aは SBRSA で、SRAM2b は SNBRSA でそれぞれ定義します。Cortex-M0+ リセットベクタは、SBRV および
C2BOPT で定義します。
Cortex-M0+ のデバッグは DDS により無効にできます。
Cortex-M0+ のセキュアメモリ領域へのアクセス、起動オプション、
デバッグの無効化は、排他的 Cortex-M0+ 書込みアクセスとなります。それらの読出しは Cortex-M4 が行い、セキュアメモリ領域に関する情報を提供します。

19

割込み
割込みイベント

20

説明
割込み

操作終了

1つまたはそれ以上の Flash メモリの操作（プログラム／消去）が正常に完了するとハードウェアによってセットされます。

操作エラー

Flash メモリの操作（プログラム／消去）が正常に完了しなかったときに、ハードウェアによってセットされます。

読出しエラー

D バスから読み出されたアドレスがFlash メモリの読出し保護領域内にある場合、ハードウェアによってセットされます（PCROP 保護）。

ECC 訂正1 つの ECC エラーが検出され訂正されたときに、ハードウェアによってセットされます。

ノンマスカブル割込み（NMI）
ECC 検出

2 つの ECC エラーが検出されたときに、ハードウェアによってセットされます。

Flash メモリで割込みを4つ生成できます。
操作終了割込みは、1つ以上の Flash へのプログラムまたは消去操作が正常に完了した場合に生成されます。
操作エラー割込みは、Flash メモリのプログラムまたは消去
操作が失敗した場合にトリガされます。
読出しエラー割込みは、コアデータバスから読み出されるアドレスが PCROP オプションにより保護されたFlashの領域内にある場合、トリガされます。
ECC 割込みは、1つの ECC エラーが検出され訂正された場
合にトリガされます。2つの ECC エラーが検出された場合、ノンマスカラブル割込みが生成されます。

20

低電力モード

21

SRAMからのコード実行時の消費電力の最適化• RUN／低電力 RUN、SLEEP／低電力 SLEEP の各モード時に、Flashへのクロック供給をゲートオフできます。
• Flash クロックは、リセットおよびクロックコントローラ（RCC）で設定します。
• Flash クロックはデフォルトで有効です。

• SLEEP／低電力 SLEEP モード時の Flash メモリをパワーダウンモードに設定できます。
• RUN／低電力 RUN モード時の Flash メモリをパワーダウンモードに設定できます。

Flash メモリからのコー ドを実行していない場合、Flash メモ
リの消費電力を下げることができます。
Flash クロックは、RUN／低電力 RUN モード時にゲートオフ
することができます–またSLEEP／低電力 SLEEP モード時にも、Flash クロックをゲートオフすることができます。Flash
クロックはリセットおよびクロックコントローラにより設定します。
Flash クロックはデフォルトで有効です。
SLEEP／低電力 SLEEP モード時の Flashメモリをパワーダ
ウンモードに設定できます。
コードが SRAM から実行されているとき、RUN／低電力
RUN モード時の Flash メモリもまたパワーダウンモードに設定できます。
クロックのゲーティングおよび Flash メモリをパワーダウン
モードに設定することで、消費電力を大幅に低減できます。

21

低電力モード
モード

22

説明

RUN

アクティブ
コードが SRAM から実行され、Flash メモリがパワーダウンモードの場合、Flash クロックを無効にできます。

SLEEP

アクティブペリフェラル割込みによって、デバイスは SLEEP モードを終了します。
SLEEP モード時に Flash クロックを無効にできます。Flash メモリをパワーダウンモードにすることができます。

低電力 RUN

アクティブ
コードが SRAM から実行され、Flash メモリがパワーダウンモードの場合、Flash クロックを無効にできます。

低電力 SLEEP

アクティブペリフェラル割込みによって、デバイスは低電力 SLEEP モードから復帰します。
低電力 SLEEP モード時にFlash クロックを無効にできます。Flash メモリをパワーダウンモードにすることができます。

STOP 0/STOP 1/STOP 2

Flash クロックオフペリフェラルレジスタの内容は保持されます。

STANDBY

パワーダウン状態です。Flash メモリインタフェースは、STANBY モード終了後に再び初期化する必要があります。

SHUTDOWN

パワーダウン状態です。Flash メモリインタフェースは、SHUTDOWN モード終了後に再び初期化する必要があります。

RUN および低電力 RUN モードでは、Flash メモリはアクティブです。SRAM からのコードが実行されFlash メモリがパ
ワーダウンモードのとき、Flash クロックを無効にすることができます。
SLEEP および低電力 SLEEP モードでは、Flash クロックを無効に、そしてFlash メモリをパワーダウンモードに設定できます。
STOP 0、STOP 1、STOP 2の各モードでは、Flash クロックは停止します。Flash インタフェースレジスタの内容は保持されます。
STANDBY およびSHUTDOWN モードでは、Flash インタ
フェースレジスタの内容は失われるため、モードの終了後に再び初期化が必要になります。

22

Flash メモリのパフォーマンス

23

未定 Coremark/MHz• ART アクセラレータにより、Flash メモリのパフォーマンスは周波数に対してほぼ線形的に変化します。3.32CoreMark/MHz（キャッシュ ON、プリフェッチ
OFF） => 212.5CoreMark（64MHz 時）
ART アクセラレータ ON（キャッシュ ON、プリフェッチOFF）

レンジ 1 @ 64MHz（2 ウェイトステート）

レンジ 2 @ 16MHz（1ウェイトステート）

消費電流 (µA/MHz) (SMPS OFF)125

パフォーマンス (CoreMark/MHz)

3.32

エネルギー効率 (CoreMark/mA)

26.6

消費電流 (µA/MHz)

116

パフォーマンス (CoreMark/MHz)

2.48

エネルギー効率 (CoreMark/mA)

21.4

ART アクセラレータにより、Flash メモリのパフォーマンスは、周波数に対してほぼ線形的に変化します。命令およびデータ
キャッシュが有効、プリフェッチバッファが無効の場合、64MHz 時のCoreMark のスコアは212.5 となり、これは3.32CoreMark/MHz に相当します。
命令およびデータキャッシュが有効、プリフェッチバッファが無効の場合、レンジ 2で16MHｚ 時にパフォーマンスは2.48
CoreMark/MHz になります。スイッチモード電源が OFF で、
64MHz でのエネルギー効率は 26.6CoreMark/mA 、またレンジ2 でのエネルギー効率は 16MHz で21.4CoreMark/mAまでしか低下しません。

23

Flash メモリの共有

24• Flash メモリは、Cortex-M4とCortex-M0+ 間で共有されます。
• アクセス調停は、ラウンドロビン方式に従いART 内で処理されます。
• 読出しとフェッチアクセスは、書込みと消去に優先します。
• 読出しアクセスは、他のコアからのフェッチに優先します。

• 共有時のパフォーマンス
• Cortex-M4 と Cortex-M0+ の両方に対する命令キャッシュとデータキャッシュによる負担の低減

Cortex-M4

Cortex-M0+@ 64MHz@ 32MHz@ 16MHz@ 16MHzART アクセラレータ ON（キャッシュ ON、プリフェッチ OFF）

単独使用時と比較した影響

Cortex-M4 パフォーマンス (CoreMark/MHz)

3.28-1.30%

Cortex-M0+ パフォーマンス (CoreMark/MHz)

1.68-0.15%

Cortex-M4 パフォーマンス (CoreMark/MHz)

2.48-0.04%

Cortex-M0+ パフォーマンス (CoreMark/MHz)

1.48-0.01%

Flash メモリは、Cortex-M4とCortex-M0+間で共有されます。
両方の CPU が Flash メモリを使用して命令を実行します。
ART アクセラレータにより、Flash メモリのパフォーマンスは影響が最小限に抑えられます。コードの同時実行において、
Cortex-M0+ の周波数が 32MHz 、命令キャッシュとデータ
キャッシュが有効、プリフェッチバッファが無効の条件で、Cortex-M4 の CoreMark/MHzは64MHz で 3.28 に達します。
これは、Cortex-M4 のパフォーマンス低下がわずか 1.3% であることを意味します。周波数が 16MHz、また Cortex-M0+
も 16MHz の場合では、Cortex-M4のCoreMark/MHz スコア
は 2.48 となります。この場合、Cortex-M4 のパフォーマンス
低下はわずか 0.04% です。

24Flashメモリの操作

25• プログラムおよび消去操作は、パワーレンジ1 でのみ可能です。
• バンクが1つしかないため、Flash メモリのプログラムと消去の操作により、両 CPU
による Flash メモリからの実行がブロックされます。
• 新しい Flash メモリ操作の開始は、Program Erase Suspend（PESD）で一時停止できます。
• 実行中の操作は完了まで継続されます。
• 新しい操作は、PESD がクリアされるまで一時停止されます。
• 各 CPU は独自の PESD ビットを持っています。

Flash メモリのプログラムおよび消去操作は、パワーレンジ 1でのみ可能です。レンジ2 および低電力モードでは、Flash メ
モリのプログラムおよび消去操作は禁止されます。
Flash メモリのシングルバンクアーキテクチャにより、プログラ
ムと消去操作時には両 CPU のための実行がブロックされます。Flash メモリの操作がリアルタイムのCPU 性能に影響を与えるのを防止するため、Flash メモリ操作を一時停止できます。PESDがアクティブである限り新しい操作は開始されず、CPUの実行が継続できます。PESDの前に有効化された実行中の Flash 操作は完了するまで継続されます。各 CPUはそれぞれのPESD レジスタビットを使用して、Flash 操作の PESD を要求できます。

25

関連ペリフェラル

26• このペリフェラルに関連する他のペリフェラルのトレーニング資料は以下を参照してください。
• システム設定コントローラ（SYSCFG）• リセットおよびクロックコントローラ（RCC）• 電源コントローラ（PWR）• 割込み（NVIC と AIEC）• システムの保護• Cortex-M0+ セキュリティ

これはFlash メモリに関するペリフェラルのリストです。詳しい情報については、これらのペリフェラルトレーニング資料を参照してください。

26

参照

27

• 詳しくは、以下の関連資料を参照してください。
• AN2606: STM32 microcontroller system memory boot mode – Application note

詳しくは、STM32 マイクロコントローラのシステムメモリブート
モードに関するアプリケーションノート、AN2606 を参照してください。

27