|
这里开发板提供的代码,实现搬运从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 ;*************************************************************************** |
|