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

📄 nand_flash.c

📁 对于nand flash的读写说明,以及文件系统.有兴趣可以继续交流
💻 C
字号:
/*
	www.another-prj.com
	
	author: caiyuqing
	
	本代码只属于交流学习,不得用于商业开发
*/
#include "s3c2410.h"
#include "nand_flash.h"
static unsigned char seBuf[16]={0xff};
//--------------------------------------------------------------------------------------
unsigned short nf_checkId(void)
{
	int i;
	unsigned short id;
	NF_nFCE_L();		//chip enable
	
	NF_CMD(0x90);		//Read ID
	NF_ADDR(0x0);
	for(i=0;i<10;i++);	//wait tWB(100ns)
	
	id=NF_RDDATA()<<8;	// Maker code(K9S1208V:0xec)
	id|=NF_RDDATA();	// Devide code(K9S1208V:0x76)
	
	NF_nFCE_H();		//chip enable
	return id;
}
//--------------------------------------------------------------------------------------
static void nf_reset(void)
{
	int i;
	NF_nFCE_L();		//chip enable
	NF_CMD(0xFF);		//reset command
	for(i=0;i<10;i++);  	//tWB = 100ns.
	NF_WAITRB(); 		//wait 200~500us;
	NF_nFCE_H();		//chip disable
}
//--------------------------------------------------------------------------------------
void nf_init(void)
{
	rNFCONF=(1<<15)|(1<<14)|(1<<13)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1<<0);	
	//	     1  	1    	1     	1   	1      xxx     r xxx,      r xxx        
	//	     En 	r	r       ECCR    nFCE=H tACLS   tWRPH0      tWRPH1
	nf_reset();
}
//--------------------------------------------------------------------------------------

void nf_read(unsigned int src_addr,unsigned  char *desc_addr,int size)
{
	int i;
	unsigned int column_addr=src_addr%512;			// column address
	unsigned int page_address=(src_addr>>9);		// page addrress
	unsigned char *buf=desc_addr;
	while((unsigned int)buf<(unsigned int)(desc_addr)+size)
	{
		NF_nFCE_L();					// enable chip
		if(column_addr>255)				// 2end halft
		{
			NF_CMD(0x01);				// Read2 command.   cmd 0x01: Read command(start from 2end half page)
		} 
		else
		{
			NF_CMD(0x00);				// 1st halft?		}
		NF_ADDR(column_addr&0xff);	    		// Column Address
		NF_ADDR(page_address&0xff);			// Page Address
		NF_ADDR((page_address>>8)&0xff);		// ...
		NF_ADDR((page_address>>16)&0xff);		// ..
		for(i=0;i<10;i++);				// wait tWB(100ns)/////??????
		NF_WAITRB();					// Wait tR(max 12us)
	
		// Read from main area
		for(i=column_addr;i<512;i++)
		{
			*buf++=NF_RDDATA();
		}
		NF_nFCE_H();					// disable chip
		column_addr=0;
		page_address++;
	}
	return ;
}

⌨️ 快捷键说明

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