Assembly RedBoot无法从DDR运行
我正在开发一个基于iMX31平台的新板,这个板有一个 来自Micron(MT46H64M32LFCM-6)的单芯片256MB LPDDR和我使用NAND 引导电路板(引导[4:0]=00001) 我们知道一旦RedBoot开始运行,它将首先初始化系统,然后复制 它的第一个2KB代码从NAND到DDR,然后跳转到 DDR并从那里运行代码。但在我的例子中,改变程序计数器只是 把我的板子变成一块无声的砖块。下面是我正在谈论的代码片段 关于: 一旦Assembly RedBoot无法从DDR运行,assembly,embedded,arm,Assembly,Embedded,Arm,我正在开发一个基于iMX31平台的新板,这个板有一个 来自Micron(MT46H64M32LFCM-6)的单芯片256MB LPDDR和我使用NAND 引导电路板(引导[4:0]=00001) 我们知道一旦RedBoot开始运行,它将首先初始化系统,然后复制 它的第一个2KB代码从NAND到DDR,然后跳转到 DDR并从那里运行代码。但在我的例子中,改变程序计数器只是 把我的板子变成一块无声的砖块。下面是我正在谈论的代码片段 关于: 一旦addpc,r0,r1被执行,整个过程就会停止。我已经核
addpc,r0,r1
被执行,整个过程就会停止。我已经核实了我的地址
初始化正确(所有定时参数,行=14,列=10和数据总线
size=x32),并且我已经运行了几次内存测试,没有失败,所以我很好
确信控制器和存储芯片本身是好的。在RedBoot中,一切
在我必须手动将程序计数器的值设置为
在DDR内存映射范围内的某个地方
我已经在这里呆了几天了,我仔细检查了复制到DDR中的数据
与NAND相同,PC值也正确
请帮忙,谢谢 ARM并没有停止,因此确定执行实际上在哪里继续将非常有用。这将是两个地方之一:
B _reset /* Reset */
B . /* Undefined Instruction */
B . /* Software Interrupt*/
B . /* Prefetch Abort*/
B . /* Data Abort*/
B . /* Reserved*/
B . /* IRQ*/
B . /* FIQ*/
只需在内存的开头(0x00000000)找到此代码,然后重新运行程序。如果它挂起在0x0000000C(预回迁中止)或0x000000010(数据中止),则可能是SDRAM配置或MMU权限。如果它挂起在其他地方,则是加载PC的代码有问题,可能是加载错误的地址
希望有帮助 你是如何处理你的缓存的?你在用它吗?在尝试执行新代码之前是否刷新它?如果它处于打开状态,请尝试关闭缓存,看看是否有帮助。@Splat二级缓存在CPU初始化期间被禁用。包含RAM的内存范围是否已启用以执行?如果没有,它将抛出一个异常,而您可能还没有设置这些异常。
B _reset /* Reset */
B . /* Undefined Instruction */
B . /* Software Interrupt*/
B . /* Prefetch Abort*/
B . /* Data Abort*/
B . /* Reserved*/
B . /* IRQ*/
B . /* FIQ*/