AnsweredAssumed Answered

K70 External DDR2 RAM Debugging

Question asked by SK Teh on Sep 11, 2013
Latest reply on Feb 18, 2016 by SK Teh

Currently I'm using IAR IDE to do the debugging.

I'm using the macro file K70_MT47H64M16HR-3.mac from bare metal and the icf is something like below:

 

define symbol __ICFEDIT_intvec_start__ = 0x70000000;

/*-Memory Regions-*/

define symbol __ICFEDIT_region_ROM_start__   = 0x70000000;

define symbol __ICFEDIT_region_ROM_end__     = 0x7007FFFF;

define symbol __ICFEDIT_region_RAM_start__   = 0x20000000;

define symbol __ICFEDIT_region_RAM_end__     = 0x2000FFF0;

/*-Sizes-*/

define symbol __ICFEDIT_size_cstack__   = 0x00;

define symbol __ICFEDIT_size_heap__     = 0;

/**** End of ICF editor section. ###ICF###*/

 

define exported symbol __EXTERNAL_MRAM_ROM_BASE = 0x10000000;

define exported symbol __EXTERNAL_MRAM_ROM_SIZE = 0x00060000;

define exported symbol __EXTERNAL_MRAM_RAM_BASE = 0x10060000;

define exported symbol __EXTERNAL_MRAM_RAM_SIZE = 0x00020000;

define exported symbol __EXTERNAL_LCD_BASE      = 0x60000000;

define exported symbol __EXTERNAL_LCD_SIZE      = 0x1FFFF;

define exported symbol __EXTERNAL_LCD_DC_BASE   = 0x60010000;

define exported symbol __INTERNAL_FLASH_BASE    = 0x00000000;

define exported symbol __INTERNAL_FLASH_SIZE    = 0x00100000;

define exported symbol __INTERNAL_SRAM_BASE     = 0x20000000;

define exported symbol __INTERNAL_SRAM_SIZE     = 0x00010000;

define exported symbol __INIT    = 0x1FFF0000;

define exported symbol __UNCACHED_DATA_END      = 0x20020000;

/* The __SRAM_POOL does not exist in fact in the SRAMData target. It should be never referenced

** (runtime check ensures that SRAM pool = system pool) but it can be assigned. The symbol is defined in the vectors.c file.

*/

 

define exported symbol __INTERNAL_FLEXNVM_BASE = 0;

define exported symbol __INTERNAL_FLEXNVM_SIZE = 0;

 

define exported symbol __VECTOR_TABLE_ROM_START = 0x70000000;

define exported symbol __VECTOR_TABLE_RAM_START = __ICFEDIT_region_RAM_start__;

 

define exported symbol __DEFAULT_PROCESSOR_NUMBER = 1;

define exported symbol __DEFAULT_INTERRUPT_STACK_SIZE = 1024;

 

/* mem_init writes a storeblock_struct at the end of kernel data, max size 32 bytes, so use 0x100 offset */

define exported symbol __BOOT_STACK_ADDRESS = __ICFEDIT_region_RAM_end__ - 0x100;

 

define exported symbol __KERNEL_DATA_END = __ICFEDIT_region_RAM_end__;

 

define memory mem with size = 4G;

define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];

define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];

 

define block KERNEL_DATA with alignment = 8 { section .kernel_data };

 

define exported symbol __FLASHX_SECT_SIZE = 0x1000;

define exported symbol __FLASHX_END_ADDR = __INTERNAL_FLASH_BASE + __INTERNAL_FLASH_SIZE;

 

define block CFMPROTROM with size = 20 { section .cfmconfig };

define block FLASHX_POOL with alignment = __FLASHX_SECT_SIZE { section .flashx };

keep { section .cfmconfig };

keep { section .flashx };

 

initialize by copy { readwrite };

do not initialize  { section .noinit };

do not initialize  { section .kernel_data };

do not initialize  { section .flashx };

do not initialize  { section .cfmconfig };

 

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec, block CFMPROTROM};

place in ROM_region { readonly, last block FLASHX_POOL };

 

place at address mem:__ICFEDIT_region_RAM_start__ { readwrite section .vectors_ram };

 

/* each block/segment must be in one line (association to region) because I need kernel data start after other datas */

place in RAM_region   { readwrite, last block KERNEL_DATA };

 

 

I successed load my code into ext ddr2 ram, but the PC register is not point to the boot.o address while should be 0x70000XXX, then the program is not running.

 

Did I miss out something need to do?

Please advice.

Thankx

Outcomes