如何快速检测NAND的坏块

 我来答
匿名用户
推荐于2016-12-01
展开全部
首先调用erase,将NAND全部擦除一遍,然后执行如下检测操作,
如果页大于512字节,
badblockpos = 0;
badblockbytes = 2;
如果页小于512字节,
badblockpos = 5;
badblockbytes = 1;
读取每个block的前两页OOB区域的第badblockpos开始的后badblockbytes字节是否为0xff,
如果是,那么说明该block是好的,否则该block是坏块[gliethttp_20080523]!

UINT_T create_bbt(FlashBootType_T fbt)
{
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 );
}
}
厦门嘉戎技术股份有限公司
2018-12-06 广告
1、 在超滤过程中不会发生任何质的变化,可以在常温下稳定运行。2、 设备结构精巧,占地面积小,易于操作。3、 超滤分离过程简单,设备自动化程度高。4、 能将不同的分子量物质进行分类处理。5、 对水质的适用性强,应用的范围广。游泳馆采用UF超... 点击进入详情页
本回答由厦门嘉戎技术股份有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式