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

📄 nandflashinit.c

📁 arm7s3c44b0x0里ps2口和lcd口驱动编程实例
💻 C
字号:
#include "\inc\define.h"
#include "\inc\drives.h"
#include "\inc\NandFlashInit.h"


void NandSignalPort(void);
void NandWriteCommand(unsigned char command);
void NandWriteAddress(unsigned char address);
void NandRWDataInit(void);
void NandWriteData(unsigned char data);
unsigned char NandReadData(void);
void NandInvalid(void);
void NandWait(void);
void NandWCInit(void);


void NandInit(void)
{	
	NandSignalPort();
	NandWriteCommand(0xff);
	NandWait();	 
	NandInvalid();	}

unsigned int NandReadID(void)
{	
	unsigned int ID=0x5555;
	NandInit();
	NandWriteCommand(0x90);
	NandWriteAddress(0x00);
	NandRWDataInit();
	NandWait();
	ID = (unsigned int)NandReadData();
	ID = ID << 8;
	ID += (unsigned int)NandReadData();
	NandInvalid();
	return ID;
}

unsigned char NandEraseBlock(unsigned int block)
{	
	unsigned int page = (block << 5);			
	unsigned char TF;
	NandInit();
	NandWriteCommand(0x60);
	NandWriteAddress((unsigned char)(page & 0xff));
	NandData = (unsigned char)((page>>8) & 0xff);
	NandWait();
	NandWriteCommand(0xd0);
	NandWait();
	NandRWDataInit();
	NandWait();
	NandWriteCommand(0x70);
	NandWait();
	NandRWDataInit();	
	TF = NandReadData();
	if(TF & 0x01)
	{
		NandInvalid();		
		return FAIL;
	}
	else
	{
		NandInvalid();
		return OK;
	}	
}

unsigned char NandWritePage(unsigned int block, unsigned char parapage, unsigned char *buffer)
{
	unsigned int page = (block<<5) + parapage;
	unsigned int i;	
	NandInit();
	NandWriteCommand(0x80);
	NandWriteAddress(0x00);
	NandWriteAddress((unsigned char)(page));
	NandWriteAddress((unsigned char)(page >> 8));
	NandWait();
	NandRWDataInit();
	for(i=0; i<528; i++)
	{
		NandWriteData(*buffer);
		buffer ++;		
	}
	NandWriteCommand(0x10);	
	NandWait();
	NandWriteCommand(0x70);
	NandRWDataInit();
	NandWait();
	if(NandReadData() & 0x01)
	{
		NandInvalid();
		return FAIL;
	}
	else
	{
		NandInvalid();
		return OK;
	}
}

unsigned char NandReadPage(unsigned int block, unsigned char parapage, unsigned char *buffer)
{	
	unsigned int i, page = (block<<5) + parapage;		
	NandInit();
	NandWriteCommand(0x00);
	NandWriteAddress(0x00);
	NandWriteAddress((unsigned char)(page));
	NandWriteAddress((unsigned char)(page >> 8));
	NandWait();
	NandRWDataInit();
	NandWait();
	for(i=0; i<528; i++)
	{
		*buffer = NandReadData();
		buffer ++;
	}	
	return OK;
}


void NandSignalPort(void)
{
	rPCONC &= ~(0xff);
	rPCONC |= 0x54;
	rPUPC &= (0xf0);
}

void NandWCInit(void)
{
	rPDATC = (rPDATC&0xf1) | (NandCLE & (~(NandCE|NandALE)));	
}

void NandWriteCommand(unsigned char command)
{
	rPDATC = (rPDATC&0xf1) | (NandCLE & (~(NandCE|NandALE)));
	NandData = command;
}

void NandWriteAddress(unsigned char address)
{
	rPDATC = (rPDATC&0xf1) | ((~(NandCLE|NandCE)) & NandALE);
	NandData = address;	
}

void NandRWDataInit(void)
{
	rPDATC = (rPDATC&0xf1) | ( ~(NandCLE|NandCE|NandALE));	
}

void NandWriteData(unsigned char data)
{
	NandData = data;	
}

unsigned char NandReadData(void)
{
	return NandData;
}

void NandInvalid(void)
{
	rPDATC = (rPDATC&0xf1) | ((~(NandCLE|NandALE)) & NandCE);	
}

void NandWait(void)
{	
	while(!(rPDATC & NandRB));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -