天嵌 ARM开发社区

 找回密码
 注册
查看: 3159|回复: 7

nand flash问题

[复制链接]
xb446909 发表于 2012-12-10 19:03:49 | 显示全部楼层 |阅读模式
我在写一个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里的,请大家帮一下啊
embedsky_lhh 发表于 2012-12-11 09:17:44 | 显示全部楼层
你检查下你OOB里边的内容,看对不对,还有你现在坏块标志存在OOB的哪个位置?
 楼主| xb446909 发表于 2012-12-11 11:09:04 | 显示全部楼层
embedsky_lhh 发表于 2012-12-11 09:17
你检查下你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
有没有人知道是怎么回事啊?
我买写进去的数读出来,发现中间隔了三个,比如我写的是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
亲,这个帖子我把它关闭了,不要同一个问题发多个帖子。
http://www.armbbs.net/forum.php?mod=viewthre ...

应该不会的啊,我传入的数据为unsigned char 型的啊,还是不知道哪里有问题
 楼主| xb446909 发表于 2012-12-11 22:39:00 | 显示全部楼层
亚瑟王 发表于 2012-12-11 20:19
亲,这个帖子我把它关闭了,不要同一个问题发多个帖子。
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
谢谢你的提醒,的确是数据格式出错了,不应该是unsigned char型,改成unsigned int 型的就可以了,但是为 ...

数据类型要根据实际来确定的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-3 07:01 , Processed in 1.062500 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表