|  | 
 
| 本帖最后由 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) 但程序就是能正常运行,想不通啊 ,老大们求救啊, 很痛苦
 | 
评分
查看全部评分
 |