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

📄 read_nf.c

📁 Linux环境下的S3C2410中NandFlash基本操作编程
💻 C
字号:
/*
读Nand Flash 的子程序:page read
参数说明:
	store_begin_add:	从Nand Flash中读到的data存放的地址的首址
	nand_begin_add:	读Nand Flash的首址(数值上,必须满足一定的条件)
	page_num:	读的页数
*/

#define	NFCONF		(*(volatile unsigned long *)0x4e000000)
#define	NFCMD		(*(volatile unsigned long *)0x4e000004)
#define	NFADDR		(*(volatile unsigned long *)0x4e000008)
#define	NFDATA		(*(volatile unsigned long *)0x4e00000c)
#define 	NFSTAT		(*(volatile unsigned long *)0x4e000010)

#define	page_size	512
#define 	page_size_mask		(page_size - 1)
#define	page_add_max		0x3fffe00


//void wait(unsigned long dly);
void wait_idle();


void	read_NF(unsigned char *store_begin_add,unsigned long nand_begin_add,unsigned long page_num) {
	unsigned long i;
	unsigned int j;
	unsigned char *store_add = store_begin_add;
	unsigned long nand_add = nand_begin_add;
	
	
	
	
	/*看输入的参数是否合格*/
	if ((nand_begin_add & page_size_mask) || ( (nand_begin_add + (page_num-1)*page_size) > page_add_max ))
		return;			/*返回main()*/

	NFCONF &= ~(1<<11);	/*首先使能Nand Flash的片选端,我们在初始化NF的时候,片选信号没有使能
						就是待操作的时候,首先使能*/
				/*写反了*/			
//	unsigned long i;
//	unsigned int 	j;

//	unsigned char *store_add = store_begin_add;	/*store_add,是读的data存放的地址*/
//	unsignde long nand_add = nand_begin_add; 	/*nand_add,是要读的每一页的始址*/


//	wait(200);
						
	for (i=0;i<page_num;i++){	/*大循环,实现page_num页的读*/ 
		NFCMD = 0x00;		/*向CMD REG 中写入读命令*/

//		wait(200);

		/*输入的地址,其实是每一页的初始地址*/
		NFADDR = nand_add & 0xff;		/*1st cycle,A7-A0*/
		NFADDR = (nand_add >> 9) & 0xff;		/*2nd cycle,A16-A9*/
		NFADDR = (nand_add >> 17 ) & 0xff;		/*3rd cycle ,A17-A24*/
		NFADDR = (nand_add >> 25 ) & 0x01;		/*4th cylce ,A25*/

		wait_idle();		/*读取数据之前,确定NF已经READY*/

		for(j=0;j<512;j++,store_add++){		/*小循环,连续从NFDATA中读512次,实现一页的读*/
			*store_add = (NFDATA & 0xff);
			}


		nand_add += 512;		/*进入下一页的首址,每一页是 512字节*/ 
		}

	NFCONF |= (1<<11);		/*禁止片选信号*/

	
}


⌨️ 快捷键说明

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