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

📄 nand.c

📁 Linux环境下的S3C2410中NandFlash基本操作编程
💻 C
字号:
/*
Nand Flash 测试主程序
*/


#include "nand.h"		/*nand.h中包括宏定义和子函数的声明*/

int main(){
//	int k,p;
//	long int p;

	
	unsigned short  i,j;			/*i,16位无符号数*/
	char data_to_write[512];	/*将要写到Nand Flash 中的一页数据(512Bytes)*/
	char	data_read[512];		/*从Nand Flash中读回的数据存放的数组*/

//	GPFCON   = 0x00005555;
//      GPFUP    = 0xff;
//              for (i=0;i<10;i++){
//                              k=20000;
//                                    j=20000;
//				    GPFDAT = 0xff;
   //                           for (;j>0;j--);
//                          
     //                 GPFDAT =0;
     //                 for(k);
     //                 ;                                                                             
 //  
 //                 }
  

	
//	GPFDAT=0x3f;
//	for (p=200;p>0;p--)
//		for(k=100;k>0;k--);
//	GPFDAT=0xcf;
//	for (p=200;p>0;p--)
//		for(k=100;k>0;k--);
//	GPFDAT=0;
	

	for (i=0;i<512;i++){
		data_to_write[i]= (i & 0xff);
		}

	

	
//	GPFCON=0x5555;
//	          for (j=0;j<10;j++){                
//			p=20000;
//			k=20000;
//			GPFDAT = 0xff;
	//		wait(20000);
//			for(;p>0;p--);
//			GPFDAT = 0;
	//	        wait(20000);
//			for(;k>0;k--);
//	}

		  

	/*关闭WATCH DOG的自动复位功能*/
	disable_watchdog_reset();	/*注意:并没有关闭,只是禁止RESET*/

	/*初始化SDRAM,因为我们在SDRAM中设置了堆栈*/
	init_SDRAM();	/*我们向13个SDRAM的控制寄存器中写入了控制字*/


//	 GPFCON=0x5555;
//	 for (j=0;j<10;j++){                     /使开发板上的LED3闪10次/
//	     GPFDAT = 0xff;
//	     wait(30000);
//	     GPFDAT = 0;	
//	     wait(30000);												
//	 }
	


	/*初始化Nand Flash Controller*/
	init_NF();			/*注意:片选信号还没有使能*/


	/*初次使用Nand Flash ,进行一下复位操作*/
	reset_NF();			/*复位操作的末尾,进行了Nand Flash
						的空闲检测,所以,至此,Nand Flash is idle*/


	/*One_Block_Erase:调用erase_NF(),Erase第二个Block,16KBytes;不要Erase 第一块*/
	erase_NF(1);		/*erase_NF中,进行了错误检查,若发现错误,
						则开发板上的LED1会闪20次
						在Erase操作完成之后,我们又关闭了
						Nand Flash的片选信号*/

	
	/*One_Page_Program向Nand Flash中的刚刚E rase了的Block中的第一页写入512Bytes的数据*/
	program_NF(data_to_write, 0x4000,512);/*program_NF中,进行了错误检查,
									若发现错误,则开发板上的LED0会闪20次
									在写操作完成时候,我们也同样关闭了
									片选信号*/


	/*One_Page_Read:将上面写入的一页数据重新读出来,并与原来的
	数据比较,若发现不一致,则使开发板上的LED2闪20次*/
	read_NF(data_read,0x4000, 1);


	/*比较原始数与读回的数据*/
	for (i=0;i<512;i++){
		if (data_to_write[i] != data_read[i]){
			GPFCON = 0x5555;			/*将整个F口配置成输出端口*/
			for (j=0;j<10;j++){			/*使开发板上的LED3闪10次*/
				GPFDAT = 0xbf;
				wait(30000);
				GPFDAT |= (1<<6);
				wait(30000);
				}
		//	break;						/*跳出循环,不在往下校对*/
			}
		}

	
	/*checking*/
	GPFCON=0x5555;
	GPFDAT=(data_read[5]<<4);


	

/*
	GPFCON=0x5555;
	GPFDAT=0xcf;
	
*/	return 0;
			
		
}

















⌨️ 快捷键说明

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