打印

研究一天了也没弄明白的NAND Flash

[复制链接]
2290|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
MCU2me|  楼主 | 2013-3-22 20:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 MCU2me 于 2013-3-22 20:25 编辑


向NAND Flah里先写入528个数 在读回来 比较一下
void Main()
{
U16 id,j=0,i=0;

  U8 NF_tmp1[528]; //定义两个数组比较读写是否一致
  U8 NF_tmp2[528];
for(i=0;i<528;i++)
{
  NF_tmp1=0xfd;  //假设写入的都是fd
  }
NF_portinit();        //一些初始化
id=NF_readid();   
if(id==0xec73)       //ID读回来了没问题是ec73,让灯亮一下做个指示
{
  Ledtest();
}
  NF_Earse(4);       //把第四块擦除了
  
  s2=NF_Pro(4,0,NF_tmp1);   //在第四块 第零页写入第一个数组(528个0xfd),如果成功写入返回1
if(s2)                                    //灯也亮了说明写入没问题吧?
{
for(i=0;i<1;i++)
  Ledtest();
}
delay(500);
s3=NF_Read(4,0,NF_tmp2);  //读第四块 第零页 内容到第二个数组
if(s3)                                  //读也成功了
{
  for(i=0;i<2;i++)
  Ledtest();
}
delay(500);

for(i=0;i<528;i++)                       //比较读写, j 一直为0
{
if(NF_tmp1【i】==NF_tmp2【i】)                  
  j++;                                            
}
if(j==528)                                   //可能528个数不一定都对,但是总不能 j 始终是零吧?
{
  
  Ledtest();
  
}

}

相关帖子

沙发
MCU2me|  楼主 | 2013-3-22 20:07 | 只看该作者
是不是我的读写函数有问题……
写函数:
U16 NF_Pro(U32 block,U32 page,U8 *buffer)
{
U32 stat,i;

U32 loop = 0;
U32 sector=(block<<5)+page;
NF_En();
NF_CMD(PROGCMD0);
NF_ADD(0);
NF_ADD(sector&0xff);
NF_ADD((sector>>8)&0xff);
for(i=0;i<528;i++)
{
  NF_wDATA(*buffer++);
}

NF_CMD(PROGCMD1);
NF_CMD(QUERYCMD);
stat=NF_rDATA();
NF_Ds();
if(stat&1)
        {         
          return 0;
          
        }

     return 1;

}

使用特权

评论回复
板凳
MCU2me|  楼主 | 2013-3-22 20:09 | 只看该作者
读:
U16 NF_Read(U32 block,U32 page,U8 *buffer)
{
                  U32 loop = 0;
        unsigned int sector=((block<<5)+page);
        NF_En();
        NF_CMD(READCMD0);
        NF_ADD(0);
        NF_ADD(sector&0xff);
        NF_ADD((sector>>8)&0xff);
        for(loop=0;loop<528;loop++)
        {
         *buffer++=NF_rDATA();       
        }
       
        NF_Ds();
               
        return 1;

}

使用特权

评论回复
地板
ymind| | 2013-3-22 20:16 | 只看该作者
if(NF_tmp1==NF_tmp2)
两数组基址当然不等了。

使用特权

评论回复
5
MCU2me|  楼主 | 2013-3-22 20:18 | 只看该作者
复制过来的问题,是有下标的

使用特权

评论回复
6
MCU2me|  楼主 | 2013-3-22 20:21 | 只看该作者
本帖最后由 MCU2me 于 2013-3-22 20:27 编辑
ymind 发表于 2013-3-22 20:16
if(NF_tmp1==NF_tmp2)
两数组基址当然不等了。

if(NF_tmp1【i】==NF_tmp2【i】) 程序里是这样的,怎么帖子屏蔽中括号?

使用特权

评论回复
7
ymind| | 2013-3-22 20:40 | 只看该作者
这咱定不了方向了。
有可能async timing没配对。
528,看样子是小页NAND,有些老式NAND的OOB area操作需专门command,好像是READOOB。
3 address cycles够吗,是否要4个。大页还要考虑5个。
擦完后,先读出来看是不是全1,这样可缩小怀疑范围。

使用特权

评论回复
8
MCU2me|  楼主 | 2013-3-22 20:51 | 只看该作者
ymind 发表于 2013-3-22 20:40
这咱定不了方向了。
有可能async timing没配对。
528,看样子是小页NAND,有些老式NAND的OOB area操作需专 ...

k9f2808 我先按您说的试试,把address cycles加大一些

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

79

帖子

1

粉丝