適用先: ULINK USB-JTAG Debugger
回答
このナレッジ記事に含まれている情報の適用先:
- MDK-ARM の全バージョン
問題
使用しているブートローダは、LPC2148 の Flash 領域 0x0-0x4FFF に格納されています。アプリケーションは、0x5000 以降にロードされます。アプリケーションのサイズが 196K までであれば、処理に問題は発生しません。ところが、更新したバージョンのアプリケーションをロードしようとすると、次のエラー メッセージが表示されます。
Erase Done.
Programming Done.
Contents mismatch at: 00030000H (Flash=04H, Required=07H)
Contents mismatch at: 00030001H (Flash=00H, Required=0DH)
Contents mismatch at: 00030002H (Flash=04H, Required=FFH)
.
.
.
使用している LPC2148 の Flash の容量は 512K なので、プログラムの格納に問題はないという認識です。チップの内容を完全に消去してからブートローダをリロードすると、アプリケーションは問題なくロードされます。ただし、アプリケーションに別の変更を加えてから、チップの内容を完全に消去せずにロードしようとすると、同じエラーが発生します。このエラーの原因は何でしょうか?
原因
[Flash Download Setup] ダイアログの [Start] パラメータを使用して、このパラメータに 0x00000000 ではなく 0x0005000 を設定することで、アプリケーション プログラムのロード先を変更しようとしています。この結果、プログラミングの前に、誤ったセクタが消去される原因になっています。
解決策
[Start] パラメータを 0x00000000 に変更します。次に、プロジェクトでコードをリンクして、0x5000 以降にロードします([Target] タブの [Options for Target])。これで、アプリケーション コードをロードしても、ブートロード コードには影響しません。
[Start] パラメータは、マッピング、セクタ プログラミング、消去といった用途には使用できますが、部分プログラミングには使用できません。通常は、外部 Flash のマッピングの定義を変更する場合に使用します。内蔵 Flash の場合、このパラメータは、デバイスのデータ シートに従ってマッピングする必要があります。LPC2xxx デバイスの場合は、0x00000000 になります。
詳細
- ULINK User's Guide の Programming Algorithm を参照してください。
関連項目
- ULINK: TROUBLE WITH FLASH PROGRAMMING