有没有大神指教一下关于51单片机读取Nand Flash ID,我下面的代码怎么都读取到ID,晶振12M,麻烦指正一下:
// 发送命令如下:
void NF_Command(unsigned char command)
{
NF_CE = 0;
NF_ALE = 0;
NF_CLE = 1;
// SIGNAL_SETUP(10);
NF_WE = 0;
NF_DATA = command;
// SIGNAL_SETUP(130);
NF_WE = 1;
while(!NF_R_B);
// SIGNAL_HOLD(65);
NF_CLE = 0;
NF_ALE = 1;
NF_CE = 1;
NF_WE = 1;
}
// 发送地址如下
void NF_AddrSet(uint addr)
{
NF_CLE = 1;
NF_CE = 1;
NF_WE = 1;
NF_ALE = 0;
NF_DATA = 0xFF;
SIGNAL_SETUP(130);
NF_CE = 0;
NF_CLE = 0;
NF_ALE = 1;
SIGNAL_SETUP(10);
NF_WE = 0;
NF_DATA = (uchar)(addr&0xff); // 输出列地址1
SIGNAL_SETUP(130);
NF_WE = 1;
SIGNAL_SETUP(65);
NF_ALE = 0;
SIGNAL_SETUP(5);
NF_ALE = 1;
SIGNAL_SETUP(65);
NF_WE = 0;
NF_DATA = (uchar)((addr&0xff00)>>8); // 输出行地址1
SIGNAL_SETUP(130);
NF_WE = 1;
SIGNAL_SETUP(65);
NF_ALE = 0;
SIGNAL_SETUP(5);
NF_ALE = 1;
SIGNAL_SETUP(65);
NF_WE = 0;
NF_DATA = (uchar)((addr&0xff0000)>>16); // 行地址2
SIGNAL_SETUP(130);
NF_WE = 1;
SIGNAL_SETUP(65);
NF_ALE = 0;
SIGNAL_SETUP(5);
NF_ALE = 1;
SIGNAL_SETUP(65);
NF_WE = 0;
NF_DATA = (uchar)((addr&0xff000000)>>24);// 列地址2
SIGNAL_SETUP(130);
NF_WE = 1;
SIGNAL_SETUP(65);
NF_ALE = 0;
SIGNAL_SETUP(65);
}
unsigned char NF_ReadID()
{
unsigned char makerCode=0x00,deviceCode=0x00;
NF_CE = 1;
NF_CLE = 0;
NF_WE = 1;
NF_ALE = 0;
NF_RE = 1;
NF_CE = 0;
NF_CLE = 1;
NF_WE = 0;
NF_DATA = 0x90;
NF_WE = 1;
NF_CLE = 0;
NF_ALE = 1;
NF_WE = 0;
NF_DATA = 0x00;
// SIGNAL_SETUP(5);
NF_WE = 1;
// SIGNAL_SETUP(5);
NF_ALE = 0;
// SIGNAL_SETUP(5);
NF_RE = 0;
makerCode = 0xff&NF_DATA; // ADH
// SIGNAL_SETUP(5);
NF_RE = 1;
// SIGNAL_SETUP(5);
NF_RE = 0;
NF_DATA = 0xff;
deviceCode = 0xff&NF_DATA; // 76H
// SIGNAL_SETUP(5);
NF_RE = 1;
// SIGNAL_SETUP(5);
return makerCode;
}
命令时序:
地址时序:
读取ID时序: