適用先:
- Keil MDK v4.10以降
- Keil uVision IDE v4.0.3以降
- CMSIS-Pack v1.3.0以降
- Keil ULINK family debug adapter
- SEGGER J-Link
- サードパーティ製品を含むAGDIインターフェイスを使用するデバッグアダプタ
現象
Armベースのデバイスに対するデバッグセッション開始時、またはフラッシュプログラミング時にoutputウィンドウに以下のようなメッセージが表示されます:
*** error 57: illegal address (0x...)
また、memory mismatchエラーが表示されることもあります。
このエラーによってデバッグモードへの移行が妨げられます。
原因
Project→Options for Targetメニュー内、UtilitiesタブでUpdate target before debuggingにチェックが入っているとデバッグモード時に移行する際、フラッシュへのダウンロードが行われます。
フラッシュプログラミング時、Keilツールがメモリアクセスに失敗すると本エラーとなります。
ロード先のフラッシュにアクセスができるかターゲットボードの設定を確認してください。
併せて、uVision IDEのフラッシュダウンロードの設定も間違いがないか再確認をしてください。
Project→Options for Targetメニュー内、Debugタブを開きます。右上にあるSettingsボタンをクリックするとTarget Driver Setupダイアログが表示されます。この右下にあるDownload to Flashはフラッシュとして定義されている領域を含むすべてのメモリ領域にコードを書き込みます。この動作は許可されておらず、フラッシュメモリに直接コードを書き込む代わりに、フラッシュプログラミングアルゴリズムを使用してフラッシュをプログラムする必要があります。
たとえば、Download to Flashは、NANDフラッシュのようにブートメモリに間接的にアクセスできるものの、実行はSDRAMから行なわれるシステム内で役立ちます。このような場合、SDRAM領域はフラッシュとして定義されます。コードはフラッシュプログラミングアルゴリズムによって処理され、NANDフラッシュに書き込まれます。起動時に、コードはNANDからSDRAMにコピーされ、そこで実行されます。ただし、デバッグ時には、デバッガによってコードをSDRAMにダウンロードする必要があります。この手法を使用すると、1つのターゲットをSDRAMからのデバッグと、NANDからのアプリケーションのフラッシュに使用できます。
問題の解決方法
ターゲットボードの設定を確認し、ジャンパ等の設定でロードを行うべきフラッシュにデバッグ接続にアクセス可能となるようにしてください。
エラーが解消しない場合は続いて以下のProject→Options for Targetメニュー内、Debugタブの設定を確認し、エラーを解消します。
Initialization fileによる問題解決
デバイスが該当するメモリの場所やソフトウェアバンクにアクセスするためにレジスタの設定が必要な場合はタブな右上にあるInitialization Fileを使用するか、すでに設定されていればその内容を修正します。
以下のアーティクルでは.iniファイルの例がありますので参考にしていただけます:
- ULINK: Memory Mismatch at Debugger Start: デバイスレジスタの設定を行うiniファイルのデバッガへの登録方法
- MCBSTR9: Memory Mismatch During Target Debugging: アプリケーションのロード前にフラッシュ全体をマップするスクリプトの使用方法
- ULINK: Trouble with Flash Programming: メモリタイプに対して間違った設定を行っているram.ini ファイルの修正方法
例えば本来ダウンロードしたいメモリ位置がRAMの場合は、上記の3つ目のアーティクルにあるram.iniファイルの例を参考にしていただけます。
RAMにロードする場合フラッシュへのロードを行わないようにするために次の手順を行います。
最初に、右上にあるSettingsボタンをクリックするとTarget Driver Setupダイアログが表示されます。
フラッシュダウンロードの無効化
Debugタブ内にあるDownload to Flashのチェックを外します。
デバッグ開始前のリセットを実施する場合 Flash Downloadタブの、Use Reset at Startupにチェックを入れるとKeilデバッガはイメージロード前にリセットを行います。
参考資料
- ULINK2 User's Guide - Cortex-M Devices Debug
- ULINK2 User's Guide - ARM Devices Debug
- ULINKpro User's Guide - Cortex-M Devices Debug
- ULINKpro User's Guide- ARM Devices Debug
関連項目
- ULINK: Memory Mismatch at Debugger Start
- ULINK: Trouble with Flash Programming
- ULINKpro User's Guide内 Error Messages
- MCBSTR9: Memory Mismatch During Target Debugging
- MCB2100: Memory Address Mismatch at 0x20
- uVision DEBUGGER: Creating INI Files
- uVision DEBUGGER: Download to Flash vs., Update Target Options