STM32G0 - Flash
内蔵Flashメモリ
レビジョン 0.1

STM32G0 マイクロコントローラファミリの全製品に搭載されている内蔵 Flash メモリのプレゼンテーションへようこそ。

1

STM32F0との主な違い

2• このFlashメモリ･インタフェースは、STM32F0マイクロコントローラに実装されているものと似ている• 次の表にSTM32F0 Flashインタフェースとの主な違いを示す
STM32F0 STM32G0

命令キャッシュなし

OTPエリア

なし

16バイト
1KB

高速プログラミング
PCROP + セキュリティ保護可能なメモリなし

あり

なし

あり

ECC訂正なし

あり

スライドの表に示すように、STM32G0 の Flash メモリインタフェースは、STM32F0 に対していくつかの新しい機能をサポートしています。
キャッシュとプリフェッチバッファは、遅延を短縮し、消費電力を削減します。
ワンタイムプログラミング（OTP）エリアは、消去不可データの保存に使用されます。
高速プログラミングは、離散した 8 バイトのダブルワードではなく、256バイトの行をプログラミングします。
独自仕様コード読出し保護（PCROP）は、Flash メモリからの実行のみを許可し、読出し／書込みを禁止することによって、コードを保護します。
セキュリティ保護可能なメモリは、非セキュアな領域から呼び出すことができません。通常はイメージ認証を使用するセキュアブートを実行するために使用されます。
エラー訂正／チェック（ECC）は、Flash メモリに発生する可能性があるビット反転を検出し、最終的に訂正することによって、信頼性を向上します。この機能は、Flash メモリコントローラによって透過的に処理されます。

2

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

3

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

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

3

主な機能

4

• 最大128KBのシングルバンクFlashメモリ• 2KBのページ粒度• 高速消去（22ms）と高速プログラミング時間（ダブルワードで82µs）• プリフェッチ & 命令キャッシュ• エラーコード訂正（ECC）：64ビット･ダブルワードで8ビット• 1ビット･エラーを検出して訂正し、マスカブル割込みにより通知• 2ビット･エラーを検出し、NMIのアサーションにより通知

メイン Flash メモリは 2 KB ページに分割され、それらのページは個別に消去できます。全体消去機能もサポートされています。
Flash メモリアクセスには、CPU の実際の周波数に従ってウェイトステートが必要な場合があります。
遅延を短縮するために、Flash コントローラには、8 バイトのプリフェッチバッファと 16 バイトの命令キャッシュが内蔵されています。これらは Vcore 電源ドメインに含まれるので、消費電力の削減にも寄与します。
プログラムするダブルワードには 8 ビットの ECC コードが付加されます。このコードは読出し時にチェックされ、1 ビットエラーは検出および訂正され、2 ビットエラーは検出されます。
訂正不可能なエラーの場合、Flash メモリコントローラはCortex®-M0+ に対してノンマスカブル割込み（NMI）をアサートします。

4

Flashメモリの構成 (1/2)

5Flashメモリの構成：• メインメモリ･ブロックは64ページで構成（1ページは2KB）• 1ページは8行で構成（1行は256バイト）• 情報ブロックの構成：• STブートローダ用に予約されているシステム･メモリ• ユーザデータ用に1KB （ダブルワード128個分）のOTP （一度だけプログラム可能な）領域• OTPエリアにはダブルワードを1回だけ書込み可能で、書き込んだデータは消去不能• ダブルワードの1つのビットを0に設定しただけで、そのダブルワード全体が書込み不能（0x0 の値は例外）• ユーザ設定のオプション･バイト

メイン Flash メモリの 128 KB に加えて、STM32G0 では次をサポートしています。
• ST ブートローダを含む 28 KB のシステムメモリ• 消去不能なユーザデータの格納に使用できる OTP メモリ• システムオンチップで IP を設定するデフォルト設定を含む
オプションバイトこれらはパワーオンリセット後に自動的にロードされされます。

5

Flashメモリの構成 (2/2)
Flash 領域

メイン･メモリ

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

サイズ

名前

動作

6

粒度

0x0800 0000 – 0x0800 07FF

2KB

ページ0プログラミング

8バイト

...

...

...

高速プログラミング

256バイトの行

0x0801 F800 – 0x0801 FFFF

2KB

ページ63

消去

0x1FFF 0000 – 0x1FFF 6FFF

28KB

システム･メモリ

0x1FFF 7000 – 0x1FFF 73FF

1KB

OTPエリアセキュリティ保護可能なメモリ

0x1FFF 7800 – 0x1FFF 787F

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

2KBのページ

書込み保護
読出し保護

グローバル

独自仕様コード読出し保護512バイト

6

スライドの左の表は、メイン Flash メモリ領域と情報ブロックに基づくメモリ構成の詳細を示しています。
右の表は、Flash メモリの動作の粒度の詳細を示しています。
• プログラミングは 8 バイトのダブルワードに対して行われる• 高速プログラミングは 256 バイトの行に対して行われる• 消去はグローバル（全体消去）または 2 KB のページのどちらかに対して行われる• セキュリティ保護可能なメモリはページに合わせて整列される• 書込み保護はページ単位で行われる• 読出し保護はグローバルに行われる• 独自仕様コード読出し保護は 512 バイト領域に対して行われる

6

Flashメモリの機能 (1/2)

7

堅牢なメモリの整合性と安全性• ECC （エラーコード訂正）：64ビット･ワードあたり8ビット長• シングルエラー訂正：FLASH_ECCRのECCCビットがセットされ、必要に応じて割込みを生成• ダブルエラー検出：FLASH_ECCRのECCDビットをセット => NMI• FLASH_ECCRレジスタに障害発生元アドレスを保存
プログラミング

読出しFlash コントローラ

Flash コントローラ

ダブルワードダブルワードダブルワードECC の生成

ダブルワード
ECC コード

8 ビット
ECCコードダブルワードダブルワードメモリから受信した 72 ビットデータで 1 ビットに誤りがあった場合にデータを訂正

ECC チェック
ECC コード

8 ビット
ECCコードFlash メモリワードのデータは 72 ビット幅です。ダブルワード（64 ビット）ごとに 8 ビットが追加されます。ECC メカニズムは次のものをサポートしています。
• 1 つのエラー検出および訂正• 2 つのエラー検出
1 つのエラーが検出されて訂正された場合、ECCC フラグ（ECC 訂正）が Flash ECC レジスタ（FLASH_ECCR）でセットされます。割込みの生成が可能です。
2 つのエラーが検出された場合、ECCD フラグ（ECC 検出）がFlash ECC レジスタ（FLASH_ECCR）でセットされます。この場合、NMI が生成されます。

7

Flashメモリの機能 (2/2)

8

堅牢なメモリの整合性と安全性• プログラミングの粒度は 64ビット（実際は8ビットのECCを含む72ビット）• 2 つのプログラミング･モード：• 標準（メイン･メモリとOTP用）• 高速（メイン･メモリのみ）• Flashメモリの位置を確認せずに64個のダブルワードをプログラミング

標準プログラミングは粒度が 8 バイトですが、高速プログラミングは 256 バイトの行をプログラミングできます。
高速プログラミングの主な目的は、ページのプログラミング時間の削減です。これは、Flash メモリにプログラムする前にその位置を確認する必要性をなくすことにより達成されます。これにより、ダブルワードごとの高電圧の上昇と下降の時間が短縮されます。

8プログラミング時間と消去時間

9

プログラミング時間と消去時間が短く、ページ･サイズが小さい→ データEEPROMのエミュレーションに有利
パラメータ

標準値

64ビットのプログラミング時間

85µs

1行（256バイト）のプログラミング時間

標準モード：2.7ms
高速モード：1.7ms

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

標準モード：21.8ms
高速モード：13.7ms

Flash （128KB）のプログラミング時間

標準モード：1.4s
高速モード：900ms

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

22ms

全体消去時間22.1ms• プログラムと消去の操作は電圧スケーリングレンジ 1 でのみ実行できる

高速プログラミングは、標準モードプログラミングより 37% 高速です。
全体消去時間、すなわち 128 KB の消去操作は、ページ消去にかかる時間とほぼ同じです。

9

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

10• 高速プログラミングでプログラムできるのはメイン･メモリのみ（OTPもオプション･バイトもプログラムできない）• プログラミングの前にハードウェアでFlashメモリの位置は確認されない• 64個のダブルワードを連続で書き込む必要がある• すべてのプログラミングでFlashメモリに対してハイ電圧が維持される• プログラミング中、電源は少なくとも7mAのピークを2µsの間供給できる必要がある• プログラミング時間とは、2つのダブルワード書込みリクエスト間の最長時間（約20µs） => この期間は割込みの無効化が必要• Flashメモリのクロック周波数（HCLK）は8MHz以上にする必要がある

高速プログラミングと標準プログラミングの比較：• メイン Flash メモリの任意の場所の 8 バイトダブルワード
ではなく、連続する 256 バイトをプログラミングします。
• 8 バイトのプログラミングは、検証ステップにより信頼性が向上しています。
2 つの連続するダブルワードの間の最大時間は約 20 µs であることに注意してください。2 番目のダブルワードが到着するのがこの遅延の後だった場合、高速プログラミングは中断され、フラグがセットされます。したがって、この遅延を超えないように、割込みを無効にする必要があります。

10

標準プログラミングモードと高速プログラミングモードの比較

11

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

高速ターゲット

メイン･メモリとOTPエリア

メイン･メモリのみ

粒度

8バイト

256バイト固有の制限なし

アドレス位置の内容確認なし
Flashのクロック周波数は8MHz以上割込み禁止

256バイトのプログラミングに要する時間

2.7ms

1.7ms

スライドの表に、標準プログラミングと高速プログラミングの比較を示します。

11Flashメモリの保持

12• 設計時の想定
耐久性
データ保持-40～+105℃で10,000サイクル以上
55℃で10,000サイクル後30年
85℃で10,000サイクル後15年
105℃で10,000サイクル後10年
85℃で1,000サイクル後30年
105℃で1,000サイクル後15年
125℃で1,000サイクル後7年各プログラム／消去操作は Flash メモリセルを劣化させる可能性があります。プログラム／消去サイクルが積み重なると、メモリセルは機能しなくなり、メモリエラーを引き起こします。
耐久性とは、Flash メモリが信頼性に影響を与えることなくサポートできる消去／プログラミングシーケンスの最大数です。
データ保持は、一定の期間にわたって一定のデータパターンを保持することとして定義されます。
保持は、プログラム／消去サイクル数および温度に依存します。

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

1364MHzでCoreMarkスコアは124• Flashメモリ･アクセラレータにより、Flashメモリのアクセス時間による性能への影響を抑制できる

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

HCLK (MHz)VCOREレンジ1

VCOREレンジ20 WS≤ 24≤81 WS≤ 48≤ 162 WS

≤ 64

Flash メモリのアクセス時間は固定ですが、AHB バス周波数は動的に変化する可能性があります。
ウェイトステートの数がプログラム可能であり、HCLK と呼ばれる実際の AHB 周波数に従って設定する必要があるのはそのためです。
64 MHz を超える周波数で動作するには、電圧スケールをレン
ジ 1 に設定する必要があります。電源コントローラ（PWR）のプレゼンテーションを参照してください。
ソフトウェアが、HCLK 周波数に従ってウェイトステートの数を調整します。
周波数を上げる前に、ウェイトステートの数を増やす必要があります。
周波数を下げた後は、ウェイトステートの数を減らす必要があります。
ウェイトステートの数が null 以外である場合、性能への影響を抑制するために、Flash メモリアクセラレータを有効にする必要があります。
13

メモリ･アクセラレータ
S-BUS AHB
Cortex M0+
コア

I キャッシュ16バイト

プリフェッチ･バッファ8バイト

I カレント・バッファ8バイト

3264

14

Flash
メモリ
32K x 64ビット（128KB）

Vcore ドメイン

• 命令キャッシュ： 2ライン x 64ビット（16バイト）• プリフェッチ･バッファ： 8バイト
• 命令カレント・バッファ： 8バイト

CPU は 32 ビット命令フェッチリクエストを生成します。Flash メモリからリクエストされた命令を含む 8 バイトのラインが読み出されてカレント・バッファに格納されると同時に、リクエストされたワードは CPU に直接転送されます。
Flash メモリから自動的に次のラインが読み出されてプリフェッチバッファに格納されます。
したがって、連続コードの場合、分岐が検出されるまで、連続するワードが S-AHB 経由で提供されます。
コードが分岐により連続ではない場合、現在使用されている命令ラインまたはプリフェッチされている命令ラインに、命令が存在しないことがあります。この場合、サイクル数換算で少なくともウェイトステートの数に等しいペナルティが生じます。
小さなループは全体がカレント・バッファおよびプリフェッチバッファに格納される可能性があり、Flash メモリにアクセスする必要はありません。
Flash メモリコントローラは、16 バイトの命令キャッシュも実装しています。リクエストされた命令がカレント・バッファとプリフェッチバッファのどちらにも存在しない場合、そのたびにラインが命令キャッシュにコピーされます。 CPU によってリクエストされた命令が命令キャッシュメモリに含まれる場合、遅延なくその命令が提供されます。すべての命令キャッシュメモリラインが使用されている場合、LRU （最も長い時間使われていない）ポリシーを使用して命令メモリキャッシュの中で置換するラインを決定します。この機能は、ループを含むコードの場合に特に有用です。分岐先アドレスにある命令が命令キャッシュに格納されます。
プリフェッチバッファと命令キャッシュの有効化／無効化は、ソフトウェアで実行されます。なぜなら、それらの性能への影響は Flash メモリアクセスのウェイトステートの数に依存するからです。命令キャッシュのリセットも、ソフトウェアで実行できます。
14

メモリ･アクセラレータ

150、1 および 2 ウェイトステートの場合のパフォーマンス
140

ウェイトステートの数に応じたMHzあたりの性能（CoreMark/MHz）

120

プリフェッチ +キャッシュ

プリフェッチキャッシュ

アクセラレーションなし

0 WS

2.5064---

1 WS

2.37552.36292.048

2.0331

2 WS

2.23252.1882

1.73141.71024

CoreMark スコア

100

80

6040

Prefetch ON Cache ON
プリフェッチをオンキャッシュをオン

20

Prefetch ON Cache OFF
プリフェッチをオンキャッシュをオフ
Prefetch OFF CaccheキャッシュをオンON
プリフェッチをオフ

00102030405060

Prefetch OFF Cache OFF

プリフェッチをオフ キャッシュをオフ

システム周波数アクセラレータが有効（プリフェッチバッファがオン、命令キャッシュがオン）である場合、性能は周波数に対して線形に向上します。
プリフェッチがオン、キャッシュがオンの場合の折れ線の傾きは、24 MHz におけるウェイトステート 0 から 1 への遷移および 48 MHz におけるウェイトステート 1 から 2 への遷移による影響をほとんど受けません。
0～24 MHz では、プリフェッチバッファをオン、命令キャッシュをオンにしても性能は向上しません。

15

Flashメモリの性能

16CoreMark/MHz• プリフェッチとキャッシュにより、Flashメモリの性能は周波数に対してほぼ線形• 2.23CoreMark/MHz （キャッシュをオン、プリフェッチをオン） => 125CoreMark @ 64MHzART Acceleratorをオン（キャッシュをオン、プリフェッチをオン）

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

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

消費電流（µA/MHz）

94

性能（CoreMark/MHz）

2.23

エネルギー効率（CoreMark/mA）

23.5

消費電流（µA/MHz）

90

性能（CoreMark/MHz）

2.37

エネルギー効率（CoreMark/mA）

26.2

スライドの表では、プリフェッチバッファと命令キャッシュをオンにすることが、Flash メモリアクセスによる消費電流の削減に寄与することも示されています。
電力スケールレンジ 1、周波数 64 MHz で動作する場合も、消費電流は 4 µA/MHz しか増えていません。
これは、プリフェッチバッファと命令キャッシュが Vcore ドメインに配置されていることが理由です。リクエストされた命令がそれらから読み出される場合、Flash メモリアクセスは不要なので、エネルギーが節約されます。

16

Flashメモリの保護 (1/2)

17

アプリケーションのニーズに従った柔軟なFlashメモリ保護• 読出し保護（RDP）• SRAMからのブート時、またはブートローダが選択されている場合に、Flash／SRAM／バックアップレジスタに対する、デバッグ･インタフェース（SWD）によるアクセスを禁止• 独自仕様コード保護（PCROP）• 512バイトの粒度で定義した2つの領域を保護。特定のコード領域を読出しアクセスまたは書込みアクセスから保護。コードは実行のみが可能。

• 書込み保護（WRP）• 2KBの粒度で定義した2つの領域を保護。不要な書込みアクセスおよび消去から特定のコード領域を保護。

読出し保護は、Flash メモリ、オプションバイト、内蔵 SRAM、およびバックアップレジスタの内容を、デバッガによりリクエストされた読出しまたは SRAM またはブートローダからブートされた後に実行されたプログラムによるソフトウェア読出しから保護することを目的としています。
Flash メモリからブートされた場合のみ、それらのメモリの内容の読出しが許可されます。
独自仕様コード保護は、Flash メモリの一部を実行のみとマークする方法です。この種のアクセス許可は、Cortex®-M0+ に搭載されているメモリ保護ユニットではサポートされていないことに注意してください。
ユーザは、512 バイトアドレスで整列された PCROP 領域を 2つ宣言できます。PCROP 領域は、Flash メモリの一部のみを第三者の読出しから保護する必要がある場合に便利です。
書込み保護は、Flash メモリの一部が消去または再プログラムされないようにします。
17

Flashメモリの保護 (2/2)

18

アプリケーションのニーズに従った柔軟なFlashメモリ保護• セキュリティ保護可能なメモリ領域• 有効な場合、セキュリティ保護可能なメモリ領域へのすべてのアクセス（フェッチ、読出し、プログラム、消去）は拒否され、バスエラーが生成される

セキュリティ保護可能メモリは未保護

デバッグ
有効
オプション
バイト
ローディングデバッグ
無効

セキュリティ保護可能メモリ
内部でのコード実行• コアデバッグ･アクセスの無効化• セキュリティ保護可能なメモリ領域でコードを実行する際にデバッグア
クセスを一時的に無効化する

セキュリティ保護可能メモリは保護

デバッグ
有効

セキュリティ保護可能メモリ
外部でのコード実行

時間軸
パワーアップ

ソフトウェア管理

セキュリティ保護可能なメモリ領域の主な目的は、望ましくないアクセスから Flash メモリの特定の領域を保護することです。
これにより、イメージ認証を実行するために、セキュアキーストレージ、セキュアブートなどのソフトウェアのセキュリティサービスを実装できます。
プロセッサがセキュリティ保護可能なメモリを抜けた後は、Flash メモリのこの部分にはアクセスできなくなります。
セキュリティ保護可能な領域は、デバイスのリセットによってのみ解除できます。
セキュリティ保護可能なメモリ領域のサイズは、2 KB ページに整列されます。
さらに、セキュリティ保護可能なメモリから実行されるコードは、デバッグアクセスを一時的に無効化できます。

18ユーザ･オプション･バイト•19

ユーザ･オプション･バイトがロードされるタイミング：• 電源リセット後（POR/BOR、または STANDBY/SHUTDOWN の終了）
• Flash 制御レジスタ（FLASH_CR）の OBL_LAUNCH ビットがセットされたとき
オプション

説明

BORR_LEV[1:0]、BORF_LEV[1:0]、BOR_EN

ブラウンアウト･リセットの立ち上がり閾値レベル、立ち下がり閾値レベル、イネーブル･ビット

nRST_STOP、nRST_STDBY、nRST_SHDW

STOP/STANDBY/SHUTDOWNモード移行時のリセット生成

WWDG_SW、IDWG_SW
IWDG_STOP、IWDG_STDBY

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

nBOOT0、nBOOT1
nBOOT_SEL

BOOT0ピンまたはオプション･ビットによるブート設定

RAM_PARITY_CHECKSRAMパリティ･チェック制御イネーブル

IRHEN、NRST_MODE

内部リセット･ホルダ機能とリセット･パッド設定

オプションバイトは、Cortex®-M0+ を起動する前にシステムオンチップを初期設定するために使用します。サイズは 128 バイ
トです。
オプションバイトは、パワーリセット後または FLASH_CR レジ
スタの OBL_LAUNCH ビットのセットによるリクエスト時に、自動的にロードされます。この機能は、デバイスをリセットしないで新しい設定を適用するために必要です。
このスライドとその後の 2 枚のスライドでは、オプションバイトのさまざまなフィールドについて説明します。

19

リセット･パッド関連のオプション･ビット

20• ビット29 IRHEN：内部リセットホルダー･イネーブル･ビット• 0：内部リセットは、NRSTピン上の単純なパルスとして伝播する• 1：内部リセットは、ローレベルとみなされるまでNRSTピンをローで駆動する• ビット 28：27 NRST_MODE[1:0]• 00：予約済み• 01：リセット入力のみ：ローレベルのNRSTピンによりシステム･リセットが生成され、内部リセットはNSRTピンには伝播しない• 10：GPIO：標準GPIOパッドの機能で、内部リセットのみ可能• 11：双方向リセット：NRSTピンが、リセット入出力モードで設定される（レガシー･モード）

ビット 28 は NRST ピンを、GPIO、リセット入力のみ、またはリセット入出力のいずれかとして設定します。
リセット入出力の場合、ビット 29 は出力ステージを、パルス発生回路またはローレベルとみなされるまで NRST ピンをローで駆動するローレベルドライバのどちらかとして設定します。これは、リセットラインに重要な容量性負荷がある場合に役立ちます。

20ユーザ･オプション･バイト（セキュリティ）
オプション

21

説明

RDP[7:0]

読出し保護レベル

PCROPA_STRT[8:0]
PCROPA_END[8:0]
PCROPB_STRT[8:0]
PCROPB_END[8:0]

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

PCROP_RDP

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

WRP1A_STRT [7:0]
WRP1A_END [7:0]
WRP1B_STRT [7:0]
WRP1B_END [7:0]

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

SEC_SIZE

セキュリティ保護可能なメモリ領域のサイズ

BOOT_LOCK

ユーザ領域からのブートを強制する。全体消去によってのみ消去される。

読出し保護レベルは、Flash メモリ全体の読出し保護を有効化します。
• レベル 0：保護なし• レベル 1：読出し保護• レベル 2：デバッグなし
レベル 0 からレベル 1、レベル 1 からレベル 0 （部分消去または全体消去を意味する）、レベル 0 からレベル 2、およびレベル 1 からレベル2 の遷移がサポートされています。
• PCROPA_STRT と PCROPA_END は、512 バイトで整列されている独自仕様コード読出し保護アドレス範囲 A を定義します。
• PCROPB_STRT と PCROPB_END は、512 バイトで整列されている独自仕様コード読出し保護アドレス範囲 B を定義します。
• PCROP_RDP を使用して、RDP 保護がレベル 1 からレベル 0 に変更された場合に PCROP 領域を消去するかどうかを選択できます。
• SEC_SIZE は、セキュリティ保護可能なメモリのサイズを定義します。
• Boot_lock を使用して、他のブートオプションに関係なく、システムがメイン Flash メモリからブートされるように強制できます。

21

ブート設定BOOT_LOCK
ビット
0000001

ブート･モード設定
nBOOT1 BOOT0 ピ nBOOT_SEL
ビットン
ビットx00110010xx
11x
10x
1xxx

nBOOT0
ビットxxx100x22

選択したブート領域
メインFlashメモリ
システ･ムメモリ
内蔵SRAM
メインFlashメモリ
システム･メモリ
内蔵SRAM
メインFlashメモリに固定• BOOT_LOCK はFlashメモリからのブートを強制• 他のブート･オプションに関係なく、メインFlashメモリからブートされるように強制できる• プログラムされているかどうかをチェックするためにFlashメモリ･レジスタにEmptyビットを追加

ブートメモリは、両方のオプションバイトと BOOT0 ピンにより選択されます。スライドの表は、パラメータの組み合わせに従ってプロセッサがどのメモリでブートするかを示しています。
nBOOT_SEL ビットが 1 にセットされている場合、BOOT0 ピンは無視されることに注意してください。 ブートメモリを選択するのはオプションバイトのみです。
オプションバイトで BOOT_LOCK ビットがセットされている場合、Flash メモリからのブートのみがサポートされます。
オプションバイトローディングフェーズ中、すべてのオプションをロードした後で、Flash メモリインタフェースはメインメモリの先頭の位置がプログラムされているかどうかをチェックします。このチェックの結果を Boot 0 と Boot 1 の情報と組み合わせて、システムをどこからブートする必要があるかを判断します。これにより、システムが、ユーザコードがプログラムされていないメ
イン Flash メモリ領域からブートすることを防ぎます。

22

割込み
割込みイベント
操作終了

23

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

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

読出し保護エラー

読み出すアドレスがFlashの読出し保護領域に属する場合に、ハードウェアによってセットされる（PCROP保護）

書込み保護エラー

消去／プログラムするアドレスがFlashメモリの（WRP、PCROP、またはRDPレベル1によって）書込み保護された部分に属する場合、ハードウェアによってセットされる

サイズエラー

プログラムまたは高速プログラム･シーケンス中のアクセスのサイズが、バイトまたはハーフワードである場合にハードウェアによってセットされる。許可されているのはダブ
ルワード･プログラミングのみ。

プログラミング･シーケンス･エラー

書き込むデータが「0x0000 0000」である場合を除き、プログラムする前に、プログラムするダブルワード･アドレスに「0xFFFF FFFF」以外の値が含まれる場合、ハードウェアによってセットされるFlash メモリコントローラは、このスライドと次のスライドにリストされている多数の割込みソースをサポートしています。
操作が正常に終了した場合、割込みをアサートできます。
また、プログラム／消去操作中にエラーが発生した場合も割込みをアサートできます。
保護違反も割込みの原因になる可能性があります。
サイズエラーは、プログラムするデータがワード整列されていない場合に発生します。
プログラミングシーケンスエラーは、Flash メモリの対象位置を事前に消去しないでプログラム操作を試みた場合に発生します。

23

割込み
割込みイベント

24

説明

プログラミング配置エラー

標準プログラミングでプログラムするデータをFlashメモリの同じダブルワード（64ビット）内に格納できない場合または高速プログラミング中にページが変更される場合にハードウェアでセットされる

高速プログラミング･エラー中のデータ･ミス

MISSERRは、新しいデータが間に合わず存在しない場合にハードウェアによってセットされる

高速プログラミング･エラー

高速プログラミング･シーケンス（FSTPGによって有効化）がエラーにより割り込まれたときにハードウェアによってセットされる

ECC訂正

1つのECCエラーが検出され訂正されたときに、ハードウェアによってセットされるノンマスカブル割込み（NMI）
ECC検出

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

プログラミング配置エラーは、標準プログラム操作を開始する前にダブルワード全体が提供されていない場合または高速プログラミング操作を開始する前に行全体が書き込まれていない場合に発生します。
データミスプログラミングエラーは、高速プログラミングシーケンス中にデータ書込みが間に合わない場合に発生します。
1 ビット ECC エラーが検出されて修正された場合、割込みをアサートできます。
2 ビット ECC エラーが検出された場合、NMI がアサートされます。

24

低消費電力モード

25

SRAMからコードを実行している場合の消費電力の最適化• RUN／低消費電力RUNモードまたはSLEEP／低消費電力SLEEPの各モードでは、Flashメモリ･インタフェース･クロックをゲートでオフすることができる• Flashメモリ･クロックはリセットおよびクロック･コントローラ（RCC）で設定する• Flashメモリ･クロックはデフォルトで有効• Flashメモリは、低消費電力SLEEPモード、低消費電力RUNモード、およびSTOPモード中にパワーダウン･モードになるように設定できる• これらのビットは、L4プラットフォームと異なり、PWRレジスタに移動されているFlash メモリモジュールは、プロセッサが Flash メモリにアクセスする必要がない場合および低消費電力モードである場合にクロックゲーティングできます。
また、SLEEP モード、RUN モード、および STOP モードでは、パワーゲーティングできます。

25

低消費電力モード
モード
RUN
SLEEP

26

説明
アクティブ

SRAMからコードが実行されている場合、Flashメモリクロックを無効にできる
アクティブ
ペリフェラル割込みによって、デバイスはSLEEPモードを終了する

SLEEPモード中は Flashメモリ･クロックを無効にできる

低消費電力RUN

低消費電力
SLEEP

STOP 0/STOP 1

アクティブ

SRAMからコードが実行され、Flashメモリがパワーダウン･モードである場合、Flashメモリ･クロックを無効にできる
アクティブ
ペリフェラル割込みによって、デバイスは低消費電力SLEEPモードから復帰する
低消費電力SLEEPモード中はFlashメモリ･クロックを無効にできるFlashメモリをパワーダウン･モードにすることができる

Flashメモリ･クロックはオフ
ペリフェラル･レジスタの内容は維持される
Flashメモリをパワーダウン･モードにすることができる

STANDBY
SHUTDOWN

パワーダウンFlashメモリ･インタフェースは、STANDBYモード終了後に再初期化する必要がある
パワーダウンFlashメモリ･インタフェースは、SHUTDOWNモード終了後に再初期化する必要がある

Flash メモリモジュールは、次の低消費電力機能をサポートしています。
• クロックゲーティング• Flash メモリのパワーダウンモード• モジュール全体（Flash メモリとコントローラ）のパワーゲー
ティング
RUN モードと SLEEP モードでは、クロックゲーティングのみがサポートされています。
低消費電力 RUN モードと低消費電力 SLEEP モードでは、コントローラのクロックはゲーティングされ、Flash メモリはパワーダウンモードに移行できます。
STOP 0 と STOP 1 では、クロックはゲーティングされ、Flashメモリはパワーダウンモードに移行できます。
SHUTDOWN モードでは、Flash メモリモジュールのパワーは、Flash メモリとコントローラの両方でゲーティングされます。

26

関連ペリフェラル

27• 次のペリフェラルにリンクされている、ペリフェラルのトレーニングを参照• システム設定コントローラ（SYSCFG）• リセットおよびクロック･コントローラ（RCC）• 電源コントローラ（PWR）• 割込み（NVIC）• システム保護

Flash メモリモジュールは、次に示す他のモジュールと関係しています。
• システム設定コントローラ（SYSCFG）• リセットおよびクロックコントローラ（RCC）• 電源コントローラ（PWR）• 割込み（NVIC）• システム保護

27

参照

28

• 詳細については、次の文書を参照してください。
• AN2606：STM32 マイクロコントローラ･システム･メモリ･ブート･モード - アプリケーションノート

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

28