|  | 
 
| 这里开发板提供的代码,实现搬运从0x0搬运size = 0x100000大小的数据到sdram,这段C语言,它是按照地址依次连续的搬运代码到sdram的,一直都在想,如果存在坏块,没有经过坏块检查就搬运,不是存在程序坏掉的风险。今天在网上看到以前开发板附的启动代码中,这部分搬运代码是用汇编实现的,里面就有检查坏块的代码,为什么现在不用检查了啊? 我的猜想是:(1)在boot中有命令9:格式化Nand Flash,对nand flash的格式化处理,有对坏块进行标记。。在搬运代码的时候,s3c2440会自动避开坏块
 (2)如果以上猜想是我多情了,那是哪部分我没有理解到,还是在搬运部分添加坏块检查更加合理~??
 
 void RdNF2SDRAM( )
 {
 U32 i;
 U32 start_addr = 0x0;
 unsigned char * to = (unsigned char *)0x30000000; //指针数组
 U32 size = 0x100000; //可以算出是8M的大小
 -----------省略
 for(i = (start_addr >> 11); size > 0; )
 {
 rLB_ReadPage(i, to);//调用该函数进行搬运
 }
 break;
 }
 }
 static void rLB_ReadPage(U32 addr, unsigned char * to)
 {
 for (i = 0; i < 2048; i++)
 {
 to[i] =  NF_RDDATA8();//搬运过程,没有坏块检查,对连续区域进行搬运
 }
 }
 以下是网上找的,汇编搬运(示意)
 nand_boot_beg ;这一段代码完成从NAND读代码到RAM
 361 mov r5, #NFCONF ;设置NAND FLASH的控制寄存器
 369 bl ReadNandID ;接着读取NAND的ID号,结果保存在r5里
 379 bl ReadNandStatus ;读取NAND状态,结果放在r1里(bl指令自动放到R1)
 397 bl CheckBadBlk ;检查NAND的坏区
 404 bl ReadNandPage ;读取该页的NAND数据到RAM
 415 ldr pc, =copy_proc_beg ;copy nand flash 到ram
 416 ;***************************************************************************
 
 | 
 |