天嵌 ARM开发社区

 找回密码
 注册
查看: 2669|回复: 2

nand flash写入的问题

 关闭 [复制链接]
xb446909 发表于 2012-12-11 18:59:31 | 显示全部楼层 |阅读模式
30
我的nand flash是K9F2G08U0B
代码用的是天嵌bootloader里dev.c里的代码
  1. static U32 LB_WritePage(U32 addr, U8 * buf)
  2. {
  3.         U32 i, mecc,j;
  4.         U8 stat, tmp[7];

  5.         NF_nFCE_L();
  6.         NF_CLEAR_RB();
  7.         NF_CMD(CMD_WRITE1);
  8.         NF_ADDR(0);
  9.         NF_ADDR(0);
  10.         NF_ADDR(addr);
  11.         NF_ADDR(addr>>8);
  12.         NF_ADDR(addr>>16);

  13.         for(i=0; i<2048; i++)
  14.                 NF_WRDATA(buf[i]);



  15.         NF_RSTECC();        //reset mecc and secc
  16.         NF_MECC_UnLock();

  17.         NF_MECC_Lock();

  18.         mecc = NF_RDMECC();

  19.         tmp[0] = mecc&0xff;
  20.         tmp[1] = (mecc>>8)&0xff;
  21.         tmp[2] = (mecc>>16)&0xff;
  22.         tmp[3] = (mecc>>24)&0xff;
  23.         tmp[5] = 0xff;        //mark good block

  24.         NF_SECC_UnLock();
  25.         NF_WRDATA(tmp[0]);
  26.         NF_WRDATA(tmp[1]);
  27.         NF_WRDATA(tmp[2]);
  28.         NF_WRDATA(tmp[3]);
  29.         NF_SECC_Lock();
  30.         NF_WRDATA(tmp[4]);
  31.         NF_WRDATA(tmp[5]);

  32.         NF_CMD(CMD_WRITE2);

  33.         stat = WaitNFBusy();
  34.         NF_nFCE_H();
  35. //        printf("Write nand flash 2048 Byte\n");

  36. #ifdef        WR_BAD_BLK_TEST
  37.         if((addr&0xff)==0x17)
  38.                 stat = 1;        //just for test bad block
  39. #endif

  40.         if(stat)
  41.                 Uart_Printf("Write nand flash 0x%x fail\n", addr);
  42.         else
  43.         {
  44.                 U8 RdDat[2048];
  45.                 rLB_ReadPage(addr, RdDat);
  46.                 for(i=0; i<2048; i++)
  47.                         if(RdDat[i]!=buf[i])
  48.                         {
  49.                                 Uart_Printf("Check data at page 0x%x, offset 0x%x fail\n", addr, i);
  50.                                 stat = 1;
  51.                                 break;
  52.                         }
  53.         }

  54.         return stat;
  55. }
复制代码

但是如果我写入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
请问这是什么问题呢?读nand flash的代码应该没有问题,因为我可以从nand flash启动,也就是可以从nand flash读到sdram,但是写nand flash的代码,我也不知道是哪里有问题,还是说我是哪里设置什么的出问题了?写nand flash之前还有什么必要的操作吗?谢谢各位了

亚瑟王 发表于 2012-12-11 20:14:22 | 显示全部楼层
我怀疑你将字符型的数据当成了整形。
回复

使用道具 举报

亚瑟王 发表于 2012-12-11 20:20:13 | 显示全部楼层
亲,这个帖子我把它关闭了,有什么问题到你开的另外一个帖子处理。
http://www.armbbs.net/forum.php?mod=viewthread&tid=14562
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-5-6 11:35 , Processed in 1.046875 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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