16

カスタム Cortex-M3 ベースのデバイスに取り組んでおり、JTAG なしでデバイス ファームウェアを更新できるように、アプリケーション内プログラミング (IAP) メカニズムを実装する必要があります (代わりに TFTP または HTTP を使用します)。ST Microelectronics から入手できる IAP 関連のコード例は十分に明確ですが、再フラッシュがどのように機能するかはよくわかりません。

私が理解している限りでは、命令はフラッシュから ICode バス (そしてもちろんプリフェッチ ブロック) を介して CPU によってフェッチされます。それで、ここで私のかなりばかげた質問があります: 実行中のプログラムが自分自身を再フラッシュする (つまり、実行中のフラッシュ メモリを変更する) 間、実行中のプログラムが破損しないのはなぜですか?

4

5 に答える 5

10

一般的な解決策は、実際のフラッシュ プログラムが保存される小さな領域をフラッシュ内に確保することです。新しいファームウェアがダウンロードされたら、この領域のコードにジャンプしてください。

もちろん、この小さな領域はファームウェアのフラッシュ時に上書きされず、他の手段 (JTAG など) によってのみ上書きされます。したがって、このフラッシュプログラムが最初からうまく機能することを確認してください。:)

于 2011-11-03T12:18:44.870 に答える
6

私は STM の実装に詳しくありませんが、NXP チップでは、IAP ルーチンは別の予約済み ROM 領域に格納されており、ユーザー コードで消去することはできません。

HWレジスタを直接使用してフラッシュ書き込みコードを自分で実装している場合は、実行元のセクターに触れないようにするか、RAMから実行する必要があります。

于 2011-11-03T12:35:43.333 に答える