|
本帖最后由 netyangarm 于 2009-8-7 11:57 编辑
我将tq2440测试程序通过在nor中uboot下载功能直接下载到了nand里运行(不是sdram中)能够正常运行。但我想不通的是,测试程序在直接在nand中运行,由于大于4k所以必须先将程序从nand中拷贝到sdram中,但问题是测试程序只拷贝了256页(128k),而测试程序是5百多k,为啥下载到nand中后还能正常运行呢??
下面是测试程序可执行文件各段的大小 Total RO Size(Code + RO Data) 48334 ( 47.20kB)
Total RW Size(RW Data + ZI Data) 711600 ( 694.92kB)
Total ROM Size(Code + RO Data + RW Data) 600290 ( 586.22kB)
下面的代码在2440init.s里,作用是将代码从nand拷贝到sdram:nand_boot_beg
mov r5, #NFCONF
;set timing value
ldr r0, =(7<<12)|(7<<8)|(7<<4)
str r0, [r5]
;enable control
ldr ro, =(0<<13)|(0<<12)|(0<<10)|(0<<9)|(0<<8)|(1<<6)|(1<<5)|(1<<4)|(1<<1)|(1<<0)
str r0, [r5, #4]
bl ReadNandID
mov r6, #0
ldr r0, =0xec73
cmp r5, r0
beq %F1
ldr r0, =0xec75
cmp r5, r0
beq %F1
mov r6, #1
1
bl ReadNandStatus
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
r9, r9, #512
add r8, r8, #1
4
cmp r8, #256 ;只拷贝了256页啊
bcc %B2
mov r5, #NFCONF ;DsNandFlash
ldr r0, [r5, #4]
bic r0, r0, #1
str r0, [r5, #4]
ldr pc, =copy_proc_beg
下面是使用nor中的uboot下载功能下载时的情况(实质上也烧写2百多k,也没有烧写完):
Enter your selection: 1
USB host is connected. Waiting a download.
Now, Downloading [ADDRESS:30000000h,TOTAL:600302]
RECEIVED FILE SIZE: 600302 (586KB/S, 1S) //测试程序的大小
NAND erase: device 0 offset 0x0, size 0x40000
Erasing at 0x0 -- 6complete.
Erasing at 0x4000 -- 12ete.
Erasing at 0x8000 -- 18ete.
..............................
Erasing at 0x38000 -- 93lete.
Erasing at 0x3c000 -- 100lete.
OK
NAND write: device 0 offset 0x0, size 0x40000
Writing data at 0x0 -- 0plete.
Writing data at 0xa00 -- 1omplete.
....................................
Writing data at 0x3f400 -- 99 complete.
Writing data at 0x3fe00 -- 100 complete.
262144 bytes written: OK //实际烧写大小256k小于可执行程序的大小
想不通啊,烧写没烧写完(才烧写了256k);就连在nand中执行时拷贝也没拷贝完(才拷贝256页128k) 但程序就是能正常运行,想不通啊 ,老大们求救啊, 很痛苦 |
评分
-
查看全部评分
|