【发布时间】:2011-03-31 22:56:06
【问题描述】:
我正在开发基于 iMX31 平台的新板,该板具有 美光 (MT46H64M32LFCM-6) 的单芯片 256MB LPDDR,我使用 NAND 启动板(BOOT[4:0] = 00001)。
我们知道,一旦 RedBoot 开始运行,它首先会初始化系统,然后复制 其代码的前2KB从NAND到DDR,然后跳转到内存位置 DDR 并从那里运行代码。但就我而言,只是更改为程序计数器 把我的板子变成一块无声的砖头。下面是我说的sn-p代码 关于:
1: ldmia r0!, {r3-r10}
stmia r1!, {r3-r10}
cmp r0, r2
blo 1b
/* Jump to SDRAM */
ldr r1, CONST_0x0FFF
and r0, pc, r1 /* offset of pc */
ldr r1, MXC_REDBOOT_ROM_START
add r1, r1, #0x10
add pc, r0, r1
nop
nop
nop
nop
...
一旦add pc, r0, r1 被执行,整个事情就停止了。我已经验证了我的 DDR
初始化正确(所有时序参数,ROW=14,COL=10和数据总线
size=x32),我已经运行了几次内存测试,没有失败,所以我很漂亮
相信控制器和内存芯片本身都很好。在 RedBoot 中,一切
看起来和工作得很好,直到我必须手动将程序计数器的值设置为
在 DDR 内存映射范围内的某处。
我已经卡在这里几天了,我仔细检查了我复制到 DDR 中的数据 与NAND中的相同,PC的值也是正确的。
请帮忙,谢谢!
【问题讨论】:
-
您是如何处理缓存的?你在用吗?在尝试执行新代码之前是否刷新它?如果它打开,请尝试关闭缓存,看看是否有帮助..
-
@Splat L2 缓存在 CPU 初始化期间被禁用。
-
包含 RAM 的内存范围是否已启用执行?如果没有,它会抛出一个异常,你可能还没有设置这些。