|  | 
 
| 我在写一个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里的,请大家帮一下啊
 
 | 
 |