经过跟踪发现arm是在从msmc跳转到ddr时卡死了
代码
void board_init_f (ulong bootflag)
{
….
gd->bd->bi_baudrate = gd->baudrate;
/* Ram ist board specific, so move it to board code … */
dram_init_banksize();
display_dram_config(); /* and display it */
gd->relocaddr = addr;
gd->start_addr_sp = addr_sp;
gd->reloc_off = addr – _TEXT_BASE;
debug ("relocation Offset is: %08lx\n", gd->reloc_off); memcpy (id, (void *)gd, sizeof (gd_t));
/* 这两行是我调试添加的
dram_compare(id,(void *)gd, sizeof (gd_t));//比较了一下源数据和目的数据,没有发现区别
debug("stack:&addr(0x%x),addr(0x%lx),id(0x%lx),addr_sp(0x%lx)\n",
&addr,addr,id,addr_sp);
*/
relocate_code (addr_sp, id, addr);—->进入到start.S
/* NOTREACHED – relocate_code() does not return */
}
cong start.S—>board_init_r
void board_init_r (gd_t *id, ulong dest_addr)
{
char *s;
bd_t *bd;
ulong malloc_start;
debug ("========\n");
…
} 没有发现board_init_r中的打印输出,说明卡死在start.S中了
打印信息如下:
U-Boot 2011.06-02.01.00.01-svn (Nov 29 2013 – 14:12:34)
U-Boot code: 0C001000 -> 0C05580C BSS: -> 0C066B70
I2C: ready
monitor len: 00065B70
ramsize: 18000000
TLB table at: bfff0000
Top of RAM usable for U-Boot at: bfff0000
Reserving 406k for U-Boot at: bff8a000
Reserving 4352k for malloc() at: bfb4a000
Reserving 24 Bytes for Board Info at: bfb49fe8
Reserving 120 Bytes for Global Data at: bfb49f70
New Stack Pointer is: bfb49f60
RAM Configuration:
Bank #0: a8000000 384 MiB
relocation Offset is: b3f89000
stack:&addr(0xc000f74),addr(0xbff8a000),id(0xbfb49f70),addr_sp(0xbfb49f60)
注意的一点是当init_ddr3 初始化一次的时候每次都是卡死在这个地方
但是当init_ddr3 初始化两次的时候,十次能有2-3次boot正确启动。
Damon(DSP) Liu:
Peter,
建议用论坛中的KeyStone1 软件开发包中的Memory_Test工程测试一下硬件。
Andy Yin1:
怀疑跟你的DDR3初始化流程及参数配置有关,建议参考DDR3 spreadsheet生成DDR3控制器参数,并参考STK中的初始化DDR流程代码。
DDR3 spreadsheet:http://www.ti.com/dsp/docs/litabsmultiplefilelist.tsp?sectionId=3&tabId=409&literatureNumber=sprabl2a&docCategoryId=1&familyId=1995
STK:http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx