11. Flashローダ
動機
このステップでは、外部Flashメモリにデータを読み込む方法について説明します。 コンパイラは、プロジェクト内のアプリケーション・コードとアセットをコンパイルして、バイナリまたはHEXファイルを生成します。 リンカ・スクリプト内の仕様に応じて、バイナリまたはHEXファイルの一部は内部Flashに配置され、その他の部分は外部Flashに配置されます。 通常、画像やフォントなどのアセットは外部Flashに保存され、アプリケーション・コードは内部Flashに保存されます。
開発中は、外部Flashにデータを書き込む手段が必要ですが、実行時はFlashから読み出すだけであるため、これは不要になります。
開発中は、外部Flashにデータを書き込む手段が必要ですが、実行時はFlashから読み出すだけであるため、これは不要になります。
- STM32CubeProgrammerのFlashローダを作成する
- 独自アプリケーションに基づく方法を使用する
Note
目標
外部Flashへのデータ書込みには一般的に次の2つの方法があります。
検証
このセクションの目標は、外部Flashにデータをロードするメカニズムを選択し、開発することです。
| 検証ポイント | 検証内容 |
|---|---|
| データを外部Flashに書き込めること。 | 外部Flashをストレージとして使用できること。 |
前提条件
次の表に、このセクションの検証ポイントを示します。
- Flashに関する情報(通常はデータシート)
- マイクロコントローラと外部Flashの接続に関する情報
作業内容
STM32CubeProgrammerのFlashローダ
STM32CubeProgrammerには、各種STM32評価キット用のFlashローダが付属しています。 Flashローダとは、Flashのプログラミングを容易にするために、マイクロコントローラのRAMに読み込まれ書き込み中に実行される小さなプログラムです。
Flashローダは以下の2つの部分から構成されます。
- Flashとの通信に必要なGPIOとFlashのインタフェースの設定
- Flashへの書込みに必要なコマンド・シーケンスに対応したFlashアルゴリズム
これらの部分は、多くの場合、既存のFlashローダに基づきます。 使用するFlashのローダを入手できた場合は、それを起点として、GPIOの部分を変更します。 評価キットのFlash回路をコピーしてハードウェアを設計する場合は、そのキットのFlashローダをそのまま使用できます。
STM32CubeProgrammerに付属するFlashローダのプロジェクトは、インストール・フォルダに保存されています。デフォルト・ディレクトリにインストールされている場合、次のフォルダです。C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin\ExternalLoader
Flashローダ・プロジェクトもgithubにあります(GitHubにあるSTM32外部Flashローダ)。
Further reading
- [UM0892: STM32 ST-LINKユーティリティ・ソフトウェアの説明](https://www.st.com/content/ccc/resource/technical/document/user_manual/e6/10/d8/80/d6/1d/4a/f2/CD00262073.pdf/files/CD00262073.pdf/jcr:content/translations/en.CD00262073.pdf)のセクション3.9。
- STマイクロエレクトロニクス・コミュニティ: [STM32CubeProgrammerの外部ローダにSPI Flashを追加する方法、パート1](https://community.st.com/t5/stm32-mcus/how-to-add-your-spi-flash-into-the-stm32cubeprogrammer-s/ta-p/49392)。
- STマイクロエレクトロニクス・コミュニティ: [STM32CubeProgrammerの外部ローダにSPI Flashを追加する方法、パート2](https://community.st.com/t5/stm32-mcus/how-to-add-your-spi-flash-into-the-stm32cubeprogrammer-s/ta-p/49400)。
独自アプリケーションに基づく方法
もう一つの方法として、Flashのロードをアプリケーション自体に組み込む方法があります。 これは、アプリケーションにすでにFlashの設定(Flashからロードできるようにするための設定)があるので、前のテストで実行したようにFlashにブロックを書き込む方法もわかっているだろうという考え方に基づいています。 その場合に必要になるのは、新しいFlashデータをアプリケーションに転送する方法だけになります。 その方法の一つがUARTです。 アプリケーションはデータ・ストリームを受信し、そのデータをブロック単位でFlashに書き込みます。
Flashは動作中にメモリ・マップド・モードにはできないため、通常はアプリケーションを特別なモードにする必要があります。
バイト送信のオープン・ソース・ソリューションはインターネットから入手できます。 サンプルのY-modemプロトコルでは、データに16bitのCRCが付加されます。
テスト
バイト送信のオープン・ソース・ソリューションはインターネットから入手できます。 サンプルのY-modemプロトコルでは、データに16bitのCRCが付加されます。
すべてのバグを早期に発見するために、ここでFlash全体を徹底的にテストすることを推奨します。