ブートローダーと同じ機能をユーザーが作ることもできます。通常のプログラムコードのほかに、ブートローダーと同じ機能のプログラムを作って、フラッシュメモリの別の場所に置いておきます。そして、あらかじめ決められた汎用IOのレベルで、どちらのプログラムを実行するかを決める判定用のプログラムを、初期ルーティンの中に入れておきます。例えば、汎用IOのレベルがHighならば、通常のプログラムを実行し、Lowであればブートローダーのプログラムが実行されるようにします。汎用IOのレベルをMOSFETで遠隔操作できるようにしておけば、ブートローダーと同じ機能が実現できます(図4)。
この場合、使用する通信機能はユーザーが決められるので、ブートローダーで決められている通信機能以外の通信が可能です。
ブートローダーと同じ機能と述べましたが、実際はフラッシュメモリのプログラムを実行しながら、同じフラッシュメモリのエリアを書き換えることができません(自分自身でブートローダー機能のプログラムを書き換えてしまうことになります)。
そこで一度、内蔵RAMまたは内蔵EEPROMにプログラムを移して、フラッシュメモリ以外のメモリ上でプログラムを実行します(ただし、バンク切り替え構造のフラッシュメモリは、別のバンクの書き換えは可能)。
STM32ファミリーでは、フラッシュメモリでもRAMでもEEPROMでもプログラムを実行できますので、フラッシュメモリに書かれているブートローダー機能のプログラム一式をいったん、RAMに移してから実行します。そして、フラッシュメモリの内容が書き換わったら、再起動します。再起動の時点では、もうRAM上のプログラムは必要ありませんので、消えてしまっても問題はありません。
このようにすることで、ブートローダーと同じ機能を実現できますし、この場合はユーザーがプログラムの内容を自由に作成できますので、ブートローダーよりも柔軟性の高いフラッシュメモリ書き換え機能が可能になります。
Copyright © ITmedia, Inc. All Rights Reserved.