本人用的是smart210SDK 1305(Tiny210V2SDK)+4片128MB的K4T1G084QF
最近在搞DRAM裸机初始化,自己的程序将代码重定位到0x3XXX_XXXX这样的地址,链接脚本里面地址也保持一致(也就是DMC0的chip2的地址),程序会卡死(但是链接地址若是在0x2XXX_XXXX,即DMC0的chip1就没有问题)
转向用官方提供的代码去测试,也有同样问题。(链接地址以及BL2的copy地址都改成0x3XXX_XXXX):
sdram.lds:
SECTIONS
{
. = 0x33E00000; //修改成了0x33E00000
.text : {
start.o
* (.text)
}
.bss : {
* (.bss)
}
.data : {
* (.data)
}
mmc_relocate.c:
void copy_code_to_dram(void)
{
unsigned long ch;
void (*BL2)(void);
ch = *(volatile unsigned int *)(0xD0037488);
// 函数指针
copy_sd_mmc_to_mem copy_bl2 = (copy_sd_mmc_to_mem) (*(unsigned int *) (0xD0037F98));
unsigned int ret;
// 通道0
if (ch == 0xEB000000)
{
// 0:channel 0
// 49:源,代码位于扇区49,1 sector = 512 bytes
// 32:长度,拷贝32 sector,即16K
// 0x23E00000:目的,链接地址0x23E00000
ret = copy_bl2(0, 49, 32,(unsigned int *)0x33E00000, 0);//修改成了0x33E00000
}
// 通道2
else if (ch == 0xEB200000)
{
ret = copy_bl2(2, 49, 32,(unsigned int *)0x33E00000, 0);//修改成了0x33E00000
}
else
return;
// 跳转到DRAM
BL2 = (void *)0x33E00000;//修改成了0x33E00000
(*BL2)();
}
当前现象及分析结果(只分析了我自己的代码):
1、DRAM的初始化程序能够跑通
2、汇编卡死在用str指令去将数据保存到0x3XXX_XXXX的地方,认为应该是找不到这个地址
请问有朋友遇到过吗??