Nand Flash启动一问

Nand Flash启动一问
用的是S3C2410.见附件start.s 其中关于nand flash启动的那一段一直百思不得其解,按说从NAND FLASH启动时,应该是前4KB映射到NGCS0,其中的代码将NAND中存放的程序拷贝到RAM中,但该文件提供的程序好象是先从NAND拷贝128K的代码到ResetEntry开始的地方,即地址为0的地方,然后再从ResetEntry处拷到RAM中,但此时NGCS0好象只有4KB的RAM区,怎么能存储128K的代码,一直没想通.望高手指点,谢谢!
.........................................................................................................
bl ReadNandStatus     拷贝128K的代码到ResetEntry开始的地方,即地址为0的地方

mov r8, #0
ldr r9, =ResetEntry
2
ands r0, r8, #0x1f
bne  %F3
mov  r0, r8
bl  CheckBadBlk
cmp  r0, #0
addne r8, r8, #32
bne  %F4
3
mov r0, r8
mov r1, r9
bl ReadNandPage
add r9, r9, #512
add r8, r8, #1
4
cmp r8, #256  (256页*512=128K)
bcc %B2
................................................................................


................................................................................
从ResetEntry处拷到RAM中
copy_proc_beg
adr r0, ResetEntry
ldr r2, BaseOfROM
cmp r0, r1
ldreq r0, TopOfROM
beq InitRam
ldr r3, TopOfROM
0
ldmia r0!, {r4-r7}
stmia r2!, {r4-r7}
cmp r2, r3
bcc %B0

sub r2, r2, r3
sub r0, r0, r2  
tylnyys
前4K代码是硬件自动搬的
这里的搬移只是把你生成的代码段、数据段复制到RAM中执行

2楼:>>参与讨论
aijing
弄明白了
搞明白了,是两条指令的差别
LDR r0,=_entry和ADR r0,_entry
前者是在编译的时候按照load address生成的绝对地址,后者反汇编后是相对当前PC寻址,例如在ADS中设置RO地址为0X30000000,那么前者传给r0的值是0x30000000,而后者传给r0的值要视当前PC而定,一般从NGCS0中启动时,传给r0的值就是0。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值