2008年10月10日星期五

KEIL+JLINK 外部FLASH调试

首先要编写对应的链接脚本(target->linker->linker script ile)和调试初始化文件(target->debug-> initialization file),例子见附录。
把程序烧写到外部FLASH中;使用J-FLASH ARM,首先打开要烧写的文件,设置project setting,注意CPU选项卡里一定要设置,外部存储器引脚初始化,外部存储器设置等,基本步骤跟调试初始化文件一样,如图:
 
选择core->arm7/9,再在FLASH选项卡里面设置你使用的外部FLASH型号,参数等即可;
烧写完成后,即可在KEIL内使用一般的步骤,调试;
附录:
外部FLASH链接文件LPC2292-EFLASH.ld 内容如下:
/* mthomas: modified for LPC2292 */
/* yushiyou  2008.6.19*/
/* MEMORY 
{
flash : ORIGIN = 0, LENGTH = 120K
ram : ORIGIN = 0x40000000, LENGTH = 64K
}
__stack_end__ = 0x40000000 + 64K - 4;
*/
MEMORY
{
  /*单位是字节*/
  /*内部FLASH*/
  /*flash (rx) : ORIGIN = 0x00000000, LENGTH = 248k*/        /*去掉了上端boot block占据的8K空间*/
  
  /*外部FLASH BANK0, CS0 : SST39VF1601  0x80000000 - 0x801FFFFF*/
  flash (rx) : ORIGIN = 0x80000000, LENGTH = 2048k 
  
  /*ERAM地址为BANK1, CS1 : IS61LV25616  0x81000000 - 0x8107FFFF*/
  ram   (rw) : ORIGIN = 0x81000000, LENGTH = 512k         /*IS61LV25616 256K×16 */
}
__stack_end__ = ORIGIN(ram) + LENGTH(ram) -4;
/*都装载到外部RAM中*/
SECTIONS 
{
. = 0;
startup : { *(.startup)} >flash
prog : 
{
*(.text)
*(.rodata)
*(.rodata*)
*(.glue_7)
*(.glue_7t)
} >flash
__end_of_text__ = .;
.data : 
{
__data_beg__ = .;
__data_beg_src__ = __end_of_text__;
*(.data)
__data_end__ = .;
} >ram
.bss : 
{
__bss_beg__ = .;
*(.bss)
} >ram
/* Align here to ensure that the .bss section occupies space up to
_end.  Align after .bss to ensure correct alignment even if the
.bss section disappears because there are no input sections.  */
. = ALIGN(32 / 8);
}
. = ALIGN(32 / 8);
_end = .;
_bss_end__ = . ; __bss_end__ = . ; __end__ = . ;
PROVIDE (end = .);
调试初始化文件debug_in_EFLASH.ini内容:
//*** <<< Use Configuration Wizard in Context Menu >>> *** 
FUNC void Setup (void) {
  //中断向量重新映射到片外BANK0,MEMMAP寄存器
  _WDWORD(0xE01FC040, 0x00000003);
  
  //_WDWORD(0xE01FC080,0);             //Disable PLL
  //存储器为16位,A0不做为地址线,使能CS0,CS1等
  _WDWORD(0xE002C014, 0x0f814914);   // pinsel2
  //设置BANK1的sram的参数
  //16位宽度,其它时间都为最长
  _WDWORD(0xFFE00004, 0x1000ffef);   // BCFG1
  
  //设置BANK0的NOR FLASH的参数
  //16位宽度,其它时间都为最长
  _WDWORD(0xFFE00000, 0x1000ffef);   // BCFG0
  
  PC = 0x80000000;   //指向bank0
  
}
Setup();                             // Setup for Download
//LOAD Debug_in_ChipRAM\Project.axf INCREMENTAL       // Download
LOAD obj\blink.elf INCREMENTAL       // Download
//不应该是跳到main函数吧
g, main

没有评论: