マイコン入門spacer ad
トップページに戻る(マイコン徹底入門:STM32で始めるARM/Cortex-M3組み込み開発)
「マイコン徹底入門」とは? |  「マイコン徹底入門」を読む |  ダウンロード |  掲示板 |  筆者の自己紹介


Previous: 13.2.1. フラッシュのアンロック

Up: 13.2. 書き換えの基本的手順

Next: 13.2.3. フラッシュへの書き込み


マイコン徹底入門:周辺回路編:STM32のペリフェラルを活用: 13. フラッシュメモリプログラミング: 13.2. 書き換えの基本的手順:

13.2.2. フラッシュの消去

 次にフラッシュメモリの消去を行うのですが、ここでフラッシュメモリのページの概念を理解しておく必要があります。STM32のフラッシュメモリに限らず、フラッシュメモリは、消去を行う際には、一定の大きさのページ単位でのみ行えるようになっています。例えばSTM32の中容量デバイスの場合、フラッシュメモリの先頭番地から1Kバイト毎に、1枚のページが構成されています( 20?1)0x08000000番地から0x080003FF番地までのフラッシュメモリが一つのページで、それ以降も同様です。先頭のページをPage0として、以降順番に番号が付けられています。高容量デバイスの場合、ページの大きさは2Kバイトです( 20?2)。詳細については「PM0042 STM32F10xxx Flash programming」をご覧ください。

20?1 フラッシュメモリのページとアドレスの関係(中容量デバイスの場合)

***再トレース 「ブロック」「名称」「基点アドレス」「サイズ」「メインメモリ」 PM0042 Programming manual / STM32F10xxx Flash programming(STMicroelectronics)より***

ヒ?クチャ 1

20?2 フラッシュメモリのページとアドレスの関係(高容量デバイスの場合)

***再トレース 「ブロック」「名称」「基点アドレス」「サイズ」「メインメモリ」PM0042 Programming manual / STM32F10xxx Flash programming(STMicroelectronics)より***

ヒ?クチャ 2

 フラッシュの消去がページ単位になるということは、ページ単位より小さい単位での消去ができないということです。0x08001000番地から10バイト分だけ削除したいというときでも、1Kバイト分又は2Kバイト分まとめて消去しないといけないのです。10バイト分だけ削除したいというのであれば、ページの内容全体をRAMなどに待避させておいて、フラッシュの消去後にもう一度書き込みをし直さないといけません。

 フラッシュの消去に使用するのが、FLASH_ErasePage関数(ライブラリ 20?3)です。

ライブラリ 20?3 FLASH_ErasePage関数

関数プロトタイプ

FLASH_Status FLASH_ErasePage (uint32_t Page_Address )

動作

フラッシュのページを消去します。

引数

Page_Address

消去するページをアドレスで指定します。ページの先頭アドレスが推奨されますが、中途のアドレスでも指定可能です。

戻り値

処理結果を返します。

FLASH_BUSY

ビジー(処理中)状態

FLASH_ERROR_PG

プログラムエラー

FLASH_ERROR_WRP

書き込み保護状態

FLASH_COMPLETE

処理完了

FLASH_TIMEOUT

タイムアウト(時間切れ)

 サンプルプログラムでは、プログラム冒頭部で定義している、StartPageマクロのページから、PagesToWriteマクロのページ数分ページ消去しています。FLASH_ErasePage関数は一度に1ページ分しか消去を行えませんので、消去したいページ数(PagesToWrite)分、繰り返し実行しています。forループでFLASHStatusの値をチェックしているのは、エラーが帰ってきたときには処理を中断させるためです。

for(EraseCounter = 0; (EraseCounter < PagesToWrite) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)

? {

??? FLASHStatus = FLASH_ErasePage(FlashBaseAddr + (StartPage * FLASH_PAGE_SIZE) + (FLASH_PAGE_SIZE * EraseCounter));

??? cprintf(“.”);

? }


Previous: 13.2.1. フラッシュのアンロック

Up: 13.2. 書き換えの基本的手順

Next: 13.2.3. フラッシュへの書き込み


このページはITと知的財産の法律情報「法務ネット」の管理人が制作・運営しています。
_Toc266801166