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

📄 flash.c

📁 这是EP7312开发板的一些测试与开发的源代码
💻 C
字号:
#define FLASH_BASE	0x00000000
#define BOOTLEN		0x8000

#define FLASH_RES	(*(volatile unsigned long *)(0x000000))
#define FLASH_555	(*(volatile unsigned long *)(0x1554 + FLASH_BASE))
#define FLASH_2AA	(*(volatile unsigned long *)(0x0AA8 + FLASH_BASE))
#define FLASH_MANU	(*(volatile unsigned long *)(0x0000 + FLASH_BASE))
#define FLASH_CODE	(*(volatile unsigned long *)(0x0004 + FLASH_BASE))





int flashtest();
extern unsigned long code[];

const unsigned long topSize[] = {
	0x0,
	0x10000,
	0x20000
};

const unsigned long bottomSize[] = {
	0x0,
	0x4000,
	0x6000,
	0x8000,
	0x10000,
	0x20000
};

int c_entry()
{
	int i = 0;
	int t = 0;
	init_serial();
	flashtest();
	while(1)
	{
		;
	}
}
//wzx modify 2004.5.26

int flashtest()
{
	
	unsigned char   s[10];					//printf buffer
         unsigned long   k=0;
	unsigned long   dbuffer1;
	unsigned long	dbuffer2;
	unsigned  long	dataq;
	unsigned long   testdata;
	unsigned long   getdata;
	unsigned int    counter;
	volatile unsigned long   delayi;
         volatile unsigned long   *src=code;	
	volatile unsigned long *P=(unsigned long*)0x00;
	
	*P=0x00f000f0;
	puts("\n\nFlash program Star \n");	
	puts("Flash Begin Erase\n");				//erase flash
	FLASH_555	= 0x00aa00aa;
	FLASH_2AA	= 0x00550055;
	FLASH_555	= 0x00800080;
	FLASH_555	= 0x00aa00aa;
	FLASH_2AA	= 0x00550055;
	FLASH_555	= 0x00100010;
	for (;;)
	{
	 dataq            =*P;
	 dataq            =dataq&0x00800080;
	 if(dataq)		          			//polling DQ7
	 {
		break;						//if DQ7=1 quit
	 }
	
	}

	puts("Flash Erase over\n");
         puts("Wait for 15s\n");
	P=(unsigned long*)0x00;					//Reset flash
	for(delayi=0;delayi<=10000000;delayi++)
	    {;}	
						
								//program flash	
	puts("Flash Program \n");	
	

	for(counter=0;counter<=0x8000;counter++)
	{
           FLASH_555 = 0x00aa00aa;
	  FLASH_2AA = 0x00550055;
	  FLASH_555 = 0x00a000a0;
	  *P=*src;
	  for(;;)							//Wait for data write
	  {								
	     getdata=*P;

 
	     if((getdata&(0x00800080))==(*src&(0x00800080))) 	//polling DQ7
	       break;			  		 	        //write ok
	
              if((getdata&(0x00200020))==0x00200020)		 	//polling  DQ5
	     {
	       getdata=*P;
	       if((getdata&(0x00800080))==(testdata&(0x00800080)))
	         break;      						//write ok
	       else
	       {
	         puts("\nFlash Write Fail\n");
		 puts("\nThe Fail Address=");
	         sprintf(s,"x%x",P);
	         puts(s);
	         return(1);						//Write fail
	       }
	      }
            }
	   
	   getdata=*P;
	   if(getdata!=*src)
	   {
	     sprintf(s,"x%x",P);
	     puts("\nVerify Error The Error Address=");
	     puts(s);
	     sprintf(s,"x%x",*src);
	     puts("\nThe Correct Data              =");
	     puts(s);
	     sprintf(s,"x%x",getdata);
	     puts("\nThe Read Data                 =");
	     puts(s);
	     dbuffer1=getdata&0x0000ffff;
	     dbuffer2=*src&0x0000ffff;
	     if(dbuffer1!=dbuffer2)
	      {
               puts("\nThe Error Chip is U21\n");
              }
	     dbuffer1=getdata&0xffff0000;
	     dbuffer2=*src&0xffff0000;
	     if(dbuffer1!=dbuffer2)
	      {
	        puts("\nThe Error Chip is U22\n");
	      }
	     return(1);	
	    }

	   src=src+1;				//Write next data
	   P=P+1;
            if((counter&0x3ff)==0)
	    {
		uart_putc('.');
	    }
	}
	puts("#Flash Program Ok\n");
	return(0);
}

⌨️ 快捷键说明

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