|
我在写一个nand flash的操作,为什么我总是写不进去呢?程序我是复制的天嵌bootloader里dev.c里的程序
我的nand flash是K9F2G08
我在写一个块之前用int LB_CheckBadBlk(U32 addr)检查,那是一个好的块
然后用U32 LB_WritePage(U32 addr, U8 * buf)后,会提示Check data at page 0x400, offset 0x1 fail
我再用int LB_CheckBadBlk(U32 addr)检查那个块,那个块反而变成坏块了,请问是什么原因呢?
static U32 LB_WritePage(U32 addr, U8 * buf)
{
U32 i, mecc;
U8 stat, tmp[7];
NF_nFCE_L();
NF_CLEAR_RB();
NF_CMD(CMD_WRITE1);
NF_ADDR(0);
NF_ADDR(0);
NF_ADDR(addr);
NF_ADDR(addr>>8);
NF_ADDR(addr>>16);
for(i=0; i<2048; i++)
NF_WRDATA(buf[i]);
NF_CMD(CMD_WRITE2);
NF_RSTECC(); //reset mecc and secc
NF_MECC_UnLock();
NF_MECC_Lock();
mecc = NF_RDMECC();
tmp[0] = mecc&0xff;
tmp[1] = (mecc>>8)&0xff;
tmp[2] = (mecc>>16)&0xff;
tmp[3] = (mecc>>24)&0xff;
tmp[5] = 0xff; //mark good block
NF_SECC_UnLock();
NF_WRDATA(tmp[0]);
NF_WRDATA(tmp[1]);
NF_WRDATA(tmp[2]);
NF_WRDATA(tmp[3]);
NF_SECC_Lock();
NF_WRDATA(tmp[4]);
NF_WRDATA(tmp[5]);
stat = WaitNFBusy();
NF_nFCE_H();
// printf("Write nand flash 2048 Byte\n");
#ifdef WR_BAD_BLK_TEST
if((addr&0xff)==0x17)
stat = 1; //just for test bad block
#endif
if(stat)
Uart_Printf("Write nand flash 0x%x fail\n", addr);
else
{
U8 RdDat[2048];
rLB_ReadPage(addr, RdDat);
for(i=0; i<2048; i++)
if(RdDat[i]!=buf[i])
{
Uart_Printf("Check data at page 0x%x, offset 0x%x fail\n", addr, i);
stat = 1;
break;
}
}
return stat;
}
这是写的程序,就是用的dev.c里的,请大家帮一下啊
|
|