我在做NandFlash实验时出现一个问题,我单独写一页时,Block内的其它页也变成和写的这一页一样的了,请高手指点,程序如下: 我用的是飞凌FL2440的开发板
#include "Function.h" //这个是定义寄存器和函数的头文件 void Delay(int x) { int i,j; while(x) { for(i=0;i<0xFF;i++) for(j=0;j<0xFF;j++); x--; } }
/***************Main函数*****************/ void Test02Main(void) { int i; // int j; int PageAddr=0x01;//页地址 int BlockAddr=0x800;//block地址 uchar buf[2048]; NFCONF=(1<<12)|(3<<8)|(0<<0); NFCONF&=0xFFFE; //设置成8bit数据 NFCONT|=0x01; //Nand Flash配置寄存器使能 //NandFlash复位 ChipOn(); //片选有效 NFCMD=0xFF; while(!(NFSTAT&0x01)); ChipOff();//片选关闭
擦除Block,等到写的时候把擦除代码注释 ChipOn(); NFCMD=0x60; NFADDR=BlockAddr&0xFF; NFADDR=(BlockAddr>>8)&0xFF; NFADDR=(BlockAddr>>16)&0xFF; NFCMD=0xD0; while(!(NFSTAT&0x01)); ChipOff(); Delay(5); 写入数据,每页2048字节 ChipOn(); NFCMD=0x80; //写入数据命令 NFADDR=PageAddr&0xFF;//写地址 NFADDR=(PageAddr>>8)&0xFF; NFADDR=BlockAddr&0xFF; NFADDR=(BlockAddr>>8)&0xFF; NFADDR=(BlockAddr>>16)&0xFF; for(i=0;i<2048;i++) { NFDATA=0x5D; } NFCMD=0x10; while(!(NFSTAT&0x01)); ChipOff(); Delay(5); //读出数据 for(i=0;i<2048;i++) { buf(i)=0x00; //中插号无法显示,用小括号代替 } ChipOn(); NFCMD=0x00; //写读数据命令 NFADDR=PageAddr&0xFF;//写地址 NFADDR=(PageAddr>>8)&0xFF; NFADDR=BlockAddr&0xFF; NFADDR=(BlockAddr>>8)&0xFF; NFADDR=(BlockAddr>>16)&0xFF; NFCMD=0x30; for(i=0;i<2048;i++) { buf(i)=NFDATA; //中插号无法显示,用小括号代替 } while(!(NFSTAT&0x01)); ChipOff();
//把读到的数据发送到串口,在超级终端上显示 for(i=0;i<2048;i++) { HexTx(buf(i),2,1); //中插号无法显示,用小括号代替 } while(1); } |