適用先: ULINK USB-JTAG Debugger
この記事に含まれている情報の適用先:
- Development Suite for ARM バージョン 1.5 以降
質問
ULINK を Philips LPC2192 デバイスおよびオフチップ RAM と使用しています。デバッグ中に、オフチップ SRAM 上でプログラムを実行したいと考えています(RAM では、ブレークポイントの数に制約がないため)。最終的には、アプリケーションをオフチップ Flash ROM にダウンロードする必要があります。ただし、デバッグを開始すると、次のエラー メッセージが表示されます。
Memory Mismatch!
Address: 0x00000000
Value = 0x38
Expected = 0x18
何が問題でしょうか? プロジェクトのセットアップ サンプルはありますか?
回答
RAM でデバッグする場合、チップ セレクト ライン CS0 を RAM デバイスに接続する必要があります。また、STARTUP.S ファイルの MEMMAP 設定を下記のように修正する必要があります。
$SET (RAM_INTVEC) ; enable code below
$IF (RAM_INTVEC)
LDR R0, =MEMMAP
MOV R1, #3 ; redirect interrupt vectors to off-chip memory
STR R1, [R0]
$ENDIF
uVision IDE User's Guide、Creating Applications、Project Targets and File Groups で説明しているように、2 つの異なるターゲットを定義できます。
- Flash プログラミング用のターゲット
- RAM でのデバッグ用のターゲット
RAM でのデバッグ用のターゲットは、[Project]→[Options for Target] で次の設定を必要とします。
- [Target]:コードを格納するアドレス空間を定義します。[Read/Only Memory Areas] で、プログラム コードを格納する RAM デバイスの開始アドレスとサイズを入力します。開始アドレスの左側にある [Default] チェックボックスをオンにして、サイズ パラメータの右側にある [Startup] ラジオ ボタンをクリックします。
- [ASM]→[Set]:REMAP および EXTMEM_MODE:このアセンブラ指示文 SET は Philips LPC2000 STARTUP.S ファイルをオフチップ起動アドレス用に変換します。
- [Debug]→[Use ULINK ARM Debugger]→[Load Application at Startup] を無効:アプリケーション コードは、XRAM.INI 初期化ファイルでバスを設定した後でロードする必要があります。
- [Debug]→[Use ULINK ARM Debugger]→[Initialization File]:バス設定用の XRAM.INI ファイルを作成します(..ARMBoardsPhytecLPC229xHelloFlash.ini をテンプレートとして使用可能)。アプリケーション コード用の LOAD コマンドを追加し、INCREMENTAL オプションを使用して、ターゲットに対する RESET を無効にします。この INI ファイルでは、目的のアドレスに対するプログラム カウンタも設定できます。
例:
//*** <<< Use Configuration Wizard in Context Menu >>> ***
FUNC void Setup (void) {
// External Memory Controller (EMC)
// Bank Configuration 0 (BCFG0)
// IDCY: Idle Cycles <0-15>
// WST1: Wait States 1 <0-31>
// WST2: Wait States 2 <0-31>
// RBLE: Read Byte Lane Enable
// WP: Write Protect
// BM: Burst ROM
// MW: Memory Width <0=> 8-bit <1=> 16-bit
// <2=> 32-bit <3=> Reserved
//
_WDWORD(0xFFE00000, 0x20003CE3); // BCFG0: Flash Bus Configuration
_WDWORD(0xE002C014, 0x0E6001E4); // PINSEL2: CS0, OE, WE, BLS0..3
// D0..31, A2..23, JTAG
//
}
Setup(); // Setup for Flash
Load MyApp INCREMENTAL
PC = 0x80000000
この設定では、生成されたアプリケーション プログラム コードはアドレス 0x80000000 以降に格納されます。[MEMORY MAP OF MODULE] で、メモリ要件を列挙したリンカ MAP ファイルを確認できます。MEMORY CLASS CODE および CONST のセグメントはすべて、下記のようにオフチップ RAM デバイスの範囲に収まっている必要があります。
START STOP LENGTH ALIGN RELOC MEMORY CLASS SEGMENT NAME ========================================================================= 80000000H 80000143H 00000144H 4 AT.. CODE STARTUPCODE 80000144H 80000150H 0000000DH 4 UNIT CONST ?CON?Hello 80000151H 80000153H 00000003H --- --- **GAP** 80000154H 8000015AH 00000007H 4 UNIT CONST ?CON?prnfmt 8000015BH 8000015BH 00000001H --- --- **GAP** 8000015CH 80000163H 00000008H 4 UNIT CONST ?C_CLRSEG 80000164H 8000016BH 00000008H 4 UNIT CONST ?C_INITSEG : : :
[Debug]→[Start/Stop Debug Session] を使用すると、アプリケーション コードはオフチップ RAM にロードされ、必要に応じて任意の数のブレークポイントを設定できます。その際、メモリ領域 0x80000000 以降に RAM を割り当てる必要があります。
詳細
- Getting Started User's Guide for ARM Powered Microcontrollers
関連項目
- ARM: FLASH ALGORITHM FOR PHILIPS DEVICES
- ULINK: ERROR (NO ALGORITHM FOUND FOR ADDRESS...)