本帖最后由 magicoctoy 于 2017-9-16 21:51 编辑
在ftl.c文件中的FTL_Format函数如下:
//格式化NAND 重建LUT表
//返回值:0,成功
// 其他,失败
u8 FTL_Format(void)
{
u8 temp;
u32 i,n;
u32 goodblock=0;
nand_dev.good_blocknum=0;
#if FTL_USE_BAD_BLOCK_SEARCH==1 //使用擦-写-读的方式,检测坏块
nand_dev.good_blocknum=FTL_SearchBadBlock();//搜寻坏块.耗时很久
#else //直接使用NAND FLASH的出厂坏块标志(其他块,默认是好块)
for(i=0;i<nand_dev.block_totalnum;i++)
{
temp=FTL_CheckBadBlock(i); //检查一个块是否为坏块
if(temp==0) //好块,!!!既然是好块,为什么还要擦除整个块区,而不是坏块需要擦除!!!
{
temp=NAND_EraseBlock(i);
if(temp) //擦除失败,认为坏块
{
printf("Bad block:%d
",i);
FTL_BadBlockMark(i); //标记是坏块
}else nand_dev.good_blocknum++; //好块数量加一
}
}
#endif
printf("good_blocknum:%d
",nand_dev.good_blocknum);
if(nand_dev.good_blocknum<100) return 1; //如果好块的数量少于100,则NAND Flash报废
goodblock=(nand_dev.good_blocknum*93)/100; //%93的好块用于存储数据
n=0;
for(i=0;i<nand_dev.block_totalnum;i++) //在好块中标记上逻辑块信息
{
temp=FTL_CheckBadBlock(i); //检查一个块是否为坏块
if(temp==0) //好块
{
NAND_WriteSpare(i*nand_dev.block_pagenum,2,(u8*)&n,2);//写入逻辑块编号
n++; //逻辑块编号加1
if(n==goodblock) break; //全部标记完了
}
}
if(FTL_CreateLUT(1))return 2; //重建LUT表失败
return 0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>