我买了一个K9F2GBU0C型号的NAND FLASH ,就是读不了,那位大哥帮指导一下,存一个字节的数字,读出来后变成了C0,函数为
void NF_SendAddre(uint8 Pageadd,uint8 Columnadd)
{
NF_ALE=1;
NF_WE=0;
NF_DATA=Columnadd;
NF_WE=1;
//送地址第一个字节,列地址(其实就是那512个字节地地址)
NF_WE=0;
NF_DATA=Pageadd&0xff; //NF_DATA=((Pageadd%256)%256)&0xff;
NF_WE=1;
//送地址第二个字节,低五位是页地址,高三位是块地址的低三位(1block = 32page)
NF_WE=0;
NF_DATA=(Pageadd>>8)&0xff; //NF_DATA=((Pageadd%256)/256)&0xff;
NF_WE=1;
//送地址第三个字节,块地址
NF_WE=0;
NF_DATA=(Pageadd>>16)&0xff; // NF_DATA=(Pageadd/256)&0xff;
NF_WE=1;
//送地址第四个字节,块地址
NF_ALE=0;
P2=0xff;
}
/***********************************************************************/
/***********************************************************************/
//写入一个字节的数据 NAND Flash WirteByte
//写入命令 80h 10h
//******************************************
void NF_WriteByte(uint8 Pageadd,uint8 Columnadd,uint8 NF_dat)
{
uint8 s=0;
NF_Initial();
NF_CE=0;
// NF_Command(0x50);
NF_R_B=1;while(!NF_R_B); //检查是否忙碌
NF_Command(0x80);
NF_SendAddre(Pageadd,Columnadd);
NF_WE=0;
NF_DATA=NF_dat;
NF_WE=1;
NF_Command(0x10);
NF_R_B=1;while(!NF_R_B); //检查是否忙碌
s=NF_ReadStatus(); //读取状态:(0xff)正确 0x00)错误
NF_CE=1;
}
/***********************************************************************/
/***********************************************************************/
//读取一个字节 NAND Flash ReadByte
//读取命令 00h/01h (half)
//******************************************
uint8 NF_ReadByte(uint8 Pageadd,uint8 Columnadd,uint8 half)
{
uint8 NF_dat,s=0;
NF_Initial();
NF_CE=0;
NF_Command(half);
NF_SendAddre(Pageadd,Columnadd);
NF_R_B=1;while(!NF_R_B); //检查是否忙碌
NF_DATA=0xff;
NF_RE=0;
NF_dat=NF_DATA;
NF_RE=1;
NF_R_B=1;while(!NF_R_B); //检查是否忙碌
s=NF_ReadStatus(); //读取状态:(0xff)正确 0x00)错误
NF_CE=1;
return (NF_dat);
}
怎么回事??
|