SuperZeil 发表于 2011-12-19 20:18:32

在搬运nand代码到sdram的过程中没有坏块检查??

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

Bloath 发表于 2011-12-20 08:28:43

确实在TQ2440_V2中搬代码没有进行坏块处理,我也想等高手回答

Bloath 发表于 2011-12-20 08:36:50

本帖最后由 Bloath 于 2011-12-20 08:37 编辑

对于页大小大于512K的NAND FLASH的坏块检测是检测2块以后的每一块的前两页OOB区域的第0字节是否为0xFF,所以说,前两块的NAND FLASH不会是坏块

而对于K9F2G08U0B来说,1块是64页也就是一共128K的大小,两块就是256K,是不是这256K就够存放一些较为复杂的程序了呢

只是猜测,欢迎拍砖

SuperZeil 发表于 2011-12-20 13:04:44

Bloath 发表于 2011-12-20 08:36 static/image/common/back.gif
对于页大小大于512K的NAND FLASH的坏块检测是检测2块以后的每一块的前两页OOB区域的第0字节是否为0xFF,所以 ...

第一块确实一定不是坏块,用256K不是大材小用啊,我现在代码肯定超过256K,并且要以M计,考虑到坏块的存在,我有担忧啊

SuperZeil 发表于 2011-12-21 20:17:27

我看到,友善的板子,搬运代码,在C语言里面也是有坏块管理的
页: [1]
查看完整版本: 在搬运nand代码到sdram的过程中没有坏块检查??