STM32 内蔵Flashメモリ データ保存 Fault

STM32のようなワンチップマイコンの内蔵Flashメモリにデータを書き込む際は、注意する事があります。
Flashメモリは、一般的にpage, block, deviceという単位ブロックで表現されてます。
Flash消去(Erase), 書き込み(Program)の実行中は、同じblockの読み出し(Read)が出来ません。FAULTします。
出来ることなら消去と書き込み中は、割り込み禁止にするのが良いのですが、システム的にそうする事で他のタスクに影響が出るため、割り込み禁止しない場合、動作する可能性のプログラム(関数や割り込みハンドラ)にram_function属性を付けて、RAM動作するように配置する必要があります。
逆の表現すると、データ通信中に希にデータを取りこぼす事象の場合、割り込み禁止状態が影響している場合がよくあります。どちらも見つけにくいbugです。
設計フェーズで懸念していると見つけやすいですよ。