ARM 初始化SDRAM破坏NANDFLASH的原因

来源:互联网 发布:网上说的vb是什么意思 编辑:程序博客网 时间:2024/04/28 11:34

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

原创粉丝点击