xb446909 发表于 2012-12-10 19:03:49

nand flash问题

我在写一个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;
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);
NF_CMD(CMD_WRITE2);
NF_RSTECC(); //reset mecc and secc
NF_MECC_UnLock();
NF_MECC_Lock();
mecc = NF_RDMECC();
tmp = mecc&0xff;
tmp = (mecc>>8)&0xff;
tmp = (mecc>>16)&0xff;
tmp = (mecc>>24)&0xff;
tmp = 0xff; //mark good block
NF_SECC_UnLock();
NF_WRDATA(tmp);
NF_WRDATA(tmp);
NF_WRDATA(tmp);
NF_WRDATA(tmp);
NF_SECC_Lock();
NF_WRDATA(tmp);
NF_WRDATA(tmp);
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;
rLB_ReadPage(addr, RdDat);
for(i=0; i<2048; i++)
   if(RdDat!=buf)
   {
    Uart_Printf("Check data at page 0x%x, offset 0x%x fail\n", addr, i);
    stat = 1;
    break;
   }
}
return stat;
}
这是写的程序,就是用的dev.c里的,请大家帮一下啊

embedsky_lhh 发表于 2012-12-11 09:17:44

你检查下你OOB里边的内容,看对不对,还有你现在坏块标志存在OOB的哪个位置?

xb446909 发表于 2012-12-11 11:09:04

embedsky_lhh 发表于 2012-12-11 09:17 static/image/common/back.gif
你检查下你OOB里边的内容,看对不对,还有你现在坏块标志存在OOB的哪个位置?

我看了,不写之前obb全是0xff,我用这个函数写了以后obb全是0了,请问是这个写函数的原因吗?

xb446909 发表于 2012-12-11 17:01:50

有没有人知道是怎么回事啊?
我买写进去的数读出来,发现中间隔了三个,比如我写的是1,2,3,4,5,6,7,8,9
读出来的数据就会是1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,是我写的时候哪个地方弄错的?有没有遇到同样情况的?

亚瑟王 发表于 2012-12-11 20:19:11

xb446909 发表于 2012-12-11 17:01 static/image/common/back.gif
有没有人知道是怎么回事啊?
我买写进去的数读出来,发现中间隔了三个,比如我写的是1,2,3,4,5,6,7, ...
亲,这个帖子我把它关闭了,不要同一个问题发多个帖子。
http://www.armbbs.net/forum.php?mod=viewthread&tid=14571
我怀疑你的数据格式处理出错了。

xb446909 发表于 2012-12-11 21:05:41

亚瑟王 发表于 2012-12-11 20:19 static/image/common/back.gif
亲,这个帖子我把它关闭了,不要同一个问题发多个帖子。
http://www.armbbs.net/forum.php?mod=viewthre ...

应该不会的啊,我传入的数据为unsigned char 型的啊,还是不知道哪里有问题

xb446909 发表于 2012-12-11 22:39:00

亚瑟王 发表于 2012-12-11 20:19 static/image/common/back.gif
亲,这个帖子我把它关闭了,不要同一个问题发多个帖子。
http://www.armbbs.net/forum.php?mod=viewthre ...

谢谢你的提醒,的确是数据格式出错了,不应该是unsigned char型,改成unsigned int 型的就可以了,但是为什么要是整型,我还没有弄明白,因为我看到的很多程序字入都是char型的,难道不是吗?

亚瑟王 发表于 2012-12-14 09:46:41

xb446909 发表于 2012-12-11 22:39 static/image/common/back.gif
谢谢你的提醒,的确是数据格式出错了,不应该是unsigned char型,改成unsigned int 型的就可以了,但是为 ...

数据类型要根据实际来确定的。
页: [1]
查看完整版本: nand flash问题