📄 nand.c
字号:
//==============================================
// :
//filename :
//description :
// :
// :
// :
//author :kaka(sn.kaka@yahoo.com )
//date :20080717
//==============================================
#include "44b0x.h"
#include "Nand.h"
#define NAND_CMD K9_CMD()
#define NAND_ADDR K9_ADDR()
#define NAND_DATA K9_DATA()
#define NAND_FREE K9_FREE()
#define NAND_RB K9_RB()
#define NAND_DELAY K9_DELAY()
void K9_DELAY(void)
{
int i;
for (i=0;i<50;i++);
}
void K9_CMD(void)
{
NAND_DELAY;
PDATC=(PDATC&0xf1)|0x4;//(Nand_CLE&(~(Nand_CE|Nand_ALE)));
//CLE is hight,/CE &ALE is low
}
void K9_ADDR(void)
{
NAND_DELAY;
PDATC=(PDATC&0xf1)|0x8;//(Nand_ALE&(~(Nand_CE|Nand_CLE)));
} //only ALE is high
void K9_DATA(void)
{
NAND_DELAY;
PDATC=(PDATC&0xf1);//|(~(Nand_ALE|Nand_CE|Nand_CLE));
} //CLE CE ALE all to low
void K9_FREE(void)
{
NAND_DELAY;
PDATC=(PDATC&0xf1)|0x2;//(Nand_CE&(~(Nand_CLE|Nand_ALE)));
} //only /CE to high
void K9_RB(void)
{
//PDATC=0;
while(!(PDATC&Nand_RB));
}
unsigned int Read_K9_Id(void)
{
int i;
unsigned int id=0;
K9_CMD();
Nand_BUS=0x90;
K9_ADDR();
Nand_BUS=0x0;
K9_DATA();
for(i=0;i<50;i++);
id=((Nand_BUS)<<8);
for(i=0;i<10;i++);
id+=(0xff&Nand_BUS);
K9_FREE();
return id;
}
unsigned int Erase_K9_Block(unsigned int B)
{
unsigned int block=(B<<5);
NAND_CMD;Nand_BUS=0xff&0x60;
NAND_ADDR;Nand_BUS=block&0xff;Nand_BUS=(block>>8)&0xff;
NAND_CMD;Nand_BUS=0xff&0xd0;
NAND_DATA;NAND_RB;
NAND_CMD;Nand_BUS=0xff&0x70;
NAND_DATA;
if(Nand_BUS&0x1)
{
NAND_FREE;
return 5;
}
else
{
NAND_FREE;
return 1;
}
}
int Writ_Page(unsigned int block,unsigned int page,unsigned char *buffer)
{
unsigned int block_page=(block<<5)+page;
int i;
unsigned char *source;
source=buffer;
NAND_CMD;Nand_BUS=0x80;
NAND_ADDR;Nand_BUS=0;
Nand_BUS=block_page&0xff;Nand_BUS=(block_page>>8)&0xff;
NAND_DATA;
for(i=0;i<528;i++)
{
Nand_BUS=0;//*source++;
}
NAND_CMD;Nand_BUS=0x10;
NAND_RB;
Nand_BUS=0x70;
NAND_DATA;
if(Nand_BUS&0x1)
{
NAND_FREE;
return 0;
}
else
{
NAND_FREE;
return 1;
}
}
void Read_Page(unsigned int block,unsigned int page,unsigned char *buffer)
{
int i,t;
unsigned int block_page=(block<<5)+page;
NAND_CMD;Nand_BUS=0x00;
NAND_ADDR;Nand_BUS=0;Nand_BUS=block_page&0xff;
Nand_BUS=(block_page>>8)&0xff;
NAND_DATA;NAND_RB;
for(i=0;i<528;i++)
{
*buffer++=Nand_BUS;
for(t=0;t<100;t++);
}
NAND_FREE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -