求助,有关nandflash操作,程序能在SDRAM中运行,但是下载到flash中就运行不起来了
俺才学这个不久,我用的是TQ2440。写程序的时候没动2440init.s和nand.c中的代码。就是在main.c中加了nandflash的操作,调试和下载到SDRAM中都能运行,就是烧写到nand后,就运行不了了。什么反映都没有,像是nand中的代码没有拷贝到SDRAM中。2440init.s中
ldr r0, =BWSCON
ldr r0,
ands r0, r0, #6 ;OM != 0, NOR FLash boot
bne copy_proc_beg ;do not read nand flash
adr r0, ResetEntry ;OM == 0, NAND FLash boot
cmp r0, #0 ;if use Multi-ice,
bne copy_proc_beg ;do not read nand flash for boot
;nop
;===========================================================
nand_boot_beg
[ {TRUE}
bl RdNF2SDRAM
]
ldr pc, =copy_proc_beg
;===========================================================
copy_proc_beg
adr r0, ResetEntry
ldr r2, BaseOfROM
cmp r0, r2
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
InitRam
ldr r2, BaseOfBSS
ldr r3, BaseOfZero
0
cmp r2, r3
ldrcc r1, , #4
strcc r1, , #4
bcc %B0
mov r0, #0
ldr r3, EndOfBSS
1
cmp r2, r3
strcc r0, , #4
bcc %B1
ldr pc, =%F2 ;goto compiler address
2
; [ CLKDIV_VAL>1 ; means Fclk:Hclk is not 1:1.
; bl MMU_SetAsyncBusMode
; |
; bl MMU_SetFastBusMode ; default value.
; ]
这段是拷贝吧···
RdNF2SDRAM代码
void RdNF2SDRAM( )
{
U32 i;
U32 start_addr = 0x0;
unsigned char * to = (unsigned char *)0x30000000;
U32 size = 0x100000;
rNF_Init();
switch(rNF_ReadID())
{
case 0x76:
for(i = (start_addr >> 9); size > 0; )
{
rSB_ReadPage(i, to);
size -= 512;
to += 512;
i ++;
}
break;
case 0xf1:
case 0xda:
case 0xdc:
case 0xd3:
for(i = (start_addr >> 11); size > 0; )
{
rLB_ReadPage(i, to);
size -= 2048;
to += 2048;
i ++;
}
break;
}
}
求 高手指点,谢谢了!!! ourdev_677909NW3PSS.zip(文件大小:591K) (原文件名:nand4.zip)
这是那工程文件 找到原因了好像是链接 顺序 不对 mark
页:
[1]