⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nand.c

📁 一个小的嵌入式os
💻 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 + -