ARM 初始化SDRAM破坏NANDFLASH的原因

SDRAM 初始化程序如下:

memsetup:
adrl r0, mem_cfg_val             //

1. 这条指令必须用adrl,不能用ldr,不然nand会死掉,只能通过norflash来复原 

2.原因:nand的0地址将被破坏,强制檫除才能使用

3.adrl是一条位置无关指令(类同bl /  b / mov),而ldr是一条位置相关指令,当我们的启动代码,限定在前4k运行时候(即在steppingstone),要用位置无关指令。当使用一条位置相关指令,他会调到编译时即确定的位置上去,比如,SDROM去,而这时SDROM并没有初始化,这样会引起错误 。

ldr r1, =MEM_CTRL_BASE

add r3, r1, #4*13        
2:
ldr r4, [r0], #4
str r4, [r1], #4
cmp r3, r1
bne 2b
mov pc, lr


.align 4
mem_cfg_val:
    @ 存储控制器13个寄存器的设置值
    .long   0x22011110      @ BWSCON
    .long   0x00000700      @ BANKCON0
    .long   0x00000700      @ BANKCON1
    .long   0x00000700      @ BANKCON2
    .long   0x00000700      @ BANKCON3  
    .long   0x00000700      @ BANKCON4
    .long   0x00000700      @ BANKCON5
    .long   0x00018005      @ BANKCON6
    .long   0x00018005      @ BANKCON7
    .long   0x008C07A3      @ REFRESH
    .long   0x000000B1      @ BANKSIZE
    .long   0x00000030      @ MRSRB6
    .long   0x00000030      @ MRSRB7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值