NAND Flash产生坏块原因
来源:互联网 发布:软件开发逻辑测试 编辑:程序博客网 时间:2024/06/05 02:36
1.固有坏块
这是生产过程中产生的坏块,一般芯片原厂都会在出厂时都会将坏块第一个page的spare area的第6个byte标记为不等于0xff的值。
2.使用坏块
这是在NAND Flash使用过程中,如果Block Erase或者Page Program错误,就可以简单地将这个块作为坏块来处理,这个时候需要把坏块标记起来。为了和固有坏块信息保持一致,将新发现的坏块的第一个page的spare area的第6个Byte标记为非0xff的值。
我们了解了NAND Flash出厂时在spare area中已经反映出了坏块信息,因此,如果在擦除一个块之前,一定要先check一下spare area的第6个byte是否是0xff,如果是就证明这是一个好块,可以擦除;如果是非0xff,那么就不能擦除。当然,这样处理可能会犯一个错误―――“错杀伪坏块”,因为在芯片操作过程中可能由于电压不稳定等偶然因素会造成NAND操作的错误。但是,为了数据的可靠性及软件设计的简单化,我们就要奉行“蒋委员长”的“宁可错杀一千,也决不放过一个”的宗旨。
补充说明:
1.需要对前面由于Page Program错误发现的坏块进行一下特别说明。如果在对一个块的某个page进行编程的时候发生了错误就要把这个块标记为坏块,首先就要把其他好的page里面的内容备份到另外一个空的好块里面,然后,把这个块标记为坏块。当然,这可能会犯“错杀”之误,一个补救的办法,就是在进行完页备份之后,再将这个块擦除一遍,如果Block Erase发生错误,那就证明这个块是个真正的坏块,那就毫不犹豫地将它打个“戳”吧!
2.可能有人会问,为什么要使用spare area的第六个byte作为坏块标记。这是NAND Flash生产商的默认约定,你可以看到Samsung,Toshiba,STMicroelectronics都是使用这个Byte作为坏块标记的。
首先调用erase,将NAND全部擦除一遍,然后执行如下检测操作,
如果页大于512字节,
badblockpos = 0;
badblockbytes = 2;
如果页小于512字节,
badblockpos = 5;
badblockbytes = 1;
读取每个block的前两页OOB区域的第badblockpos开始的后badblockbytes字节是否为0xff,
如果是,那么说明该block是好的,否则该block是坏块[gliethttp_20080523]!
{
UINT_T Retval;
P_FlashProperties_T pFlashP = GetFlashProperties(fbt);
UINT_T BlkSize,BlkNum;
UINT_T flash_addr;
#define page_size (2048)
#define page_spare_size (64)
#define block_size (64*page_size)
#define tmp_buffer_addr (0x80200000 - page_size - page_spare_size)
#define tmp_spare_buffer_addr (tmp_buffer_addr + page_size)
int i,j;
char *bbpos;
bbpos = (char*)(tmp_spare_buffer_addr + 0);
BlkSize = pFlashP->BlockSize;
BlkNum = pFlashP->NumBlocks;
for(i = 0;i < BlkNum;i++)
{
flash_addr = i * BlkSize;
for(j = 0;j < 2;j++)
{
Retval = xdfc_read((UINT_T *)tmp_buffer_addr, flash_addr +j*page_size, page_size, (UINT_T *)tmp_spare_buffer_addr,GetNANDProperties());
if(Retval)
{
goto __create_bbt_mark;
}
if(bbpos[0] != 0xff)goto __create_bbt_mark;
if(bbpos[1] != 0xff)goto __create_bbt_mark;
}
continue;
__create_bbt_mark:
RelocateBlock( i, &GetFMProperties()->BBT, fbt );
}
}
转自: http://qipeng.le.blog.163.com/blog/static/556691182010210101141383/
- [Flash]NAND Flash产生坏块原因
- NAND Flash产生坏块原因
- NAND Flash产生坏块原因
- nand flash 坏块
- nand flash中的坏块
- NAND Flash的坏块
- NAND Flash的坏块
- NAND Flash的坏块
- NAND flash坏块管理
- nand flash坏块——转载
- NAND FLASH存储器的坏块管理
- NAND Flash的坏块管理设计
- flash_erase擦除NAND flash坏块失败
- NAND Flash的坏块管理设计
- NAND Flash的坏块管理设计
- WinCE -BSP NAND flash 坏块处理
- NAND Flash的坏块管理设计
- NAND FLASH存储器的坏块管理
- 初识Android框架
- nodejs 操作同步数据async
- JQuery 判断浏览器及其版本
- DB2 通用数据库中的生成列和标识列详解
- 自己学驱动11——简单GPIO操作
- NAND Flash产生坏块原因
- cas(一)
- 从久负盛名的GoDaddy开发革命来看Node.js的风靡程度
- MongoDB基本命令用
- 欢迎使用CSDN-markdown编辑器
- poj 3662 最短路
- Protocol Buffer使用
- 极光推送使用实例(三) Android客户端
- Android-Universal-Image-Loader