亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? flash.c

?? AXD下 S3C2440 nor flash program nand flash
?? C
?? 第 1 頁 / 共 2 頁
字號:
	else if(id_man == AM29LV160DB_MAN_ID &&
		id_dev == AM29LV160DB_DEV_ID &&
		id_ade == AM29LV160DB_ADE_ID )
	{
		size = FlashSectorSize_AM29LV160DB(base_addr);
	}

	return size;
}
//*********************************************************************************************
 void FlashEraseChip_AM29LV160DB(unsigned int base_addr)
 {
    int i,k;
    uart_printf("now start to erase the whole norflash chip,please wait......\r\n"); 	
    /*
	*(volatile unsigned short *)(base_addr + (0x200554)) = 0xAA;
	*(volatile unsigned short *)(base_addr + (0x2AA)) = 0x55;
	*(volatile unsigned short *)(base_addr + (0x200554)) = 0x80;
	*(volatile unsigned short *)(base_addr + (0x200554)) = 0xAA;
	*(volatile unsigned short *)(base_addr + (0x2AA)) = 0x55;
	*(volatile unsigned short *)(base_addr + (0x200554)) = 0x10;
	
	*/
	*(volatile unsigned short *)(base_addr + (0x555<<1)) = 0xAA;
	*(volatile unsigned short *)(base_addr + (0x2AA<<1)) = 0x55;
	*(volatile unsigned short *)(base_addr + (0x555<<1)) = 0x80;
	*(volatile unsigned short *)(base_addr + (0x555<<1)) = 0xAA;
	*(volatile unsigned short *)(base_addr + (0x2AA<<1)) = 0x55;
	*(volatile unsigned short *)(base_addr + (0x555<<1)) = 0x10;
	// delay 
	for(k=0;k<100;k++)
	for(i=0; i<10000; i++)
		Flash_Delay();
		
	  uart_printf("erase the norflash chip sucessful!\r\n"); 	 	
 }
/*********************************************************************************************
* name:		FlashEraseChip
* func:		erase the whole flash Chip
* para:		unsigned int chip_base_addr      --  base_addr of flash
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void FlashEraseChip(unsigned int chip_base_addr)
{
	
	 if(id_man == AM29LV160DB_MAN_ID &&
		id_dev == AM29LV160DB_DEV_ID &&
		id_ade == AM29LV160DB_ADE_ID )
	{
		FlashEraseChip_AM29LV160DB(chip_base_addr);
	}
}



/*********************************************************************************************
* name:		FlashSectorBackup
* func:		backup data on flash's sector
* para:		unsigned int base_addr      --  base_addr of flash
*           unsigned char *buf          --  buf to backup data on flash's sector
* ret:		size of data  backuped & return the data's address by pointer buf
* modify:
* comment:		
*********************************************************************************************/
unsigned int FlashSectorBackup(unsigned int base_addr)
{
	unsigned int size;

	size = FlashSectorSize(base_addr);

	return size;
}

//************************************************************************************************
/*
void flash_prog(void)
{
	unsigned long write_addr=0x0000;
	unsigned int chip_base_addr=0x0;
//	char* pData=(char *)0xa0008000;
	int len=1024*10;
	
    const int array_size = 1024*5;
	// the array is used for testing  flash writing.
	
	unsigned short write_test_data[array_size];
	int k;
	unsigned short test_data = 0x66CC;
	
	for(k=0;k<array_size;k++)
	  
	  {
	  	write_test_data[k] = test_data;
	  //	test_data++;
	  }
	 

		if(FlashID(write_addr))
		{
			int write_ptr, offset_ptr, write_len, sector_size;
			char *data_ptr;
			
			//erase the whole flash
			FlashEraseChip(chip_base_addr);
			
			// data_ptr = pData;
			data_ptr =(char*)write_test_data;
			
			write_ptr = write_addr;
			while(write_ptr < write_addr+len)
			{
				sector_size = FlashSectorBackup(write_ptr, sector_buf);
				offset_ptr = (write_ptr & ~(0 - sector_size));
				write_len =  sector_size - offset_ptr;
				if(write_len > len - (write_ptr - write_addr))
					write_len = len - (write_ptr - write_addr);
				memcpy(&sector_buf[offset_ptr], data_ptr, write_len);
			//	FlashEraseSector(write_ptr);
				
				FlashProgram(write_ptr & (0 - sector_size), (unsigned short *)sector_buf, sector_size);
			//FlashProgram(write_ptr & (0 - sector_size), (unsigned short *)write_test_data, sector_size);
				
				data_ptr += write_len;
	            write_ptr += write_len;
			}
		}
		
	/*	
	  for(k=0;k<(1024*16/2);k++)
	    {
	    	unsigned short* p=(unsigned short *)write_test_data;
	    	unsigned short write_test_addr = 0x0;
	    	
	    	//if( (*p) == (*(volatile unsigned short*)write_test_addr))
	    	if( 0x6677 == (*(volatile unsigned short*)write_test_addr))
	    		
	    		 { 
	    		  p++;
	    		  write_test_addr +=2;
	    		 } 
		   else
		       break;
		 }    
	*/	  
//} 

//***************************************************************************************************************
void flash_write_from_buffer(unsigned char* buffer_addr,unsigned int need_write_len,unsigned int write_base_addr)
{
 
    unsigned int writeen_len = 0;
    unsigned int sector_size = 0;
    unsigned int use_sector_size = 0;
    unsigned int offset_sector = 0;
    
    //save the function parameters
 	unsigned char* read_source_addr = buffer_addr;
 	unsigned int want_write_len = need_write_len;
 	unsigned int flash_write_base_addr = write_base_addr;

 //  if(FlashID(flash_write_base_addr))
 //  {
   		
   		
   		
   		while(writeen_len < need_write_len)
   		{
   			// get the  usable size of the current sector;
   			sector_size = FlashSectorBackup(flash_write_base_addr);
   			offset_sector = (flash_write_base_addr &~ (0-sector_size));
   			use_sector_size = sector_size - offset_sector;
   			
   			if ( want_write_len < use_sector_size)
   		  	  {
   				
   				FlashProgram(flash_write_base_addr, (unsigned short *)read_source_addr,want_write_len);
   				writeen_len += want_write_len;
   				flash_write_base_addr += want_write_len;
   			    read_source_addr += want_write_len;
   			  
   			  }
   			  
   			else if(want_write_len >= use_sector_size)
   			 {
   			 	FlashProgram(flash_write_base_addr, (unsigned short *)read_source_addr,use_sector_size);
   			 	writeen_len += use_sector_size;
   				flash_write_base_addr += use_sector_size;
   				read_source_addr += use_sector_size;
   			    want_write_len -= use_sector_size;
   			 }
   			  
   		}
  
  //  }

}


//***************************************************************************************************************************

//雙字節(jié)比較
int flash_prog_check(unsigned char* source_addr,unsigned int data_len,unsigned int write_flash_base_addr)

{	
	int source_data,flash_data;
	int len=0;
	int state = 0;
 	unsigned short* data_addr = (unsigned short*)source_addr;
 	unsigned short* flash_addr = (unsigned short*)write_flash_base_addr;
 	
 	
 uart_printf("now start to check the writeen bytes.... \r\n");
 	while(len < data_len/2)
 	{
 		 source_data = *data_addr;
 		 flash_data  = *flash_addr;
 		 len++;
 		 data_addr++;
 		 flash_addr++;
 		 if(source_data==flash_data)
 		    state= 1;
 		  else 
 		    {state = 0;break;
 		    }  
 	}
 	
 	if(state ==1) 
 	  uart_printf("norflash program sucessful!\r\n");
 	else  
 	 uart_printf("norflash program failed,try again!\r\n"); 
 	 
 return state;	
}	
 	 
//********************************************************************************************************************* 	
void flash_prog(unsigned char* source_addr,unsigned int data_len,unsigned int write_flash_base_addr,unsigned int chip_base_addr)
{
  unsigned int need_write_data_len = data_len;
  unsigned char* data_ptr = source_addr;
  unsigned int flash_base_addr = write_flash_base_addr;
  unsigned int writeen_data_len = 0;
  
  if(FlashID(flash_base_addr))      // 檢查Flash ID;

          
  	 {       
   		
   		// FlashEraseChip(chip_base_addr); //整片 Flash 擦除,時間較長;
   		    //erase 256K
   		 #if 1
   		 uart_printf("now start to erase 256k sector size of norflash.......\r\n");
   		  FlashEraseSector(0x0);        //16k
   		   FlashEraseSector(0x4000);    //8k
   		    FlashEraseSector(0x6000);   //8k
   		     FlashEraseSector(0x8000);  //32k
   		      FlashEraseSector(0x10000);  //64k
   		       FlashEraseSector(0x20000);  //64k
   		        FlashEraseSector(0x30000); //64k
   		       
   		 #endif
   		 
   		 uart_printf("now start to write %d bytes from 0x%x to Ox%x,please wait......\r\n",data_len,(unsigned int)source_addr,(unsigned int)write_flash_base_addr); 	 
           
    	 while(writeen_data_len < data_len)   //燒寫指定長度(字節(jié))數(shù)據(jù);
       
     	 { 
      		 if(need_write_data_len >= buffer_len)
           
       			 { 
       		 		 memcpy(sector_buf, data_ptr, buffer_len);
         
        			 flash_write_from_buffer(sector_buf,buffer_len,flash_base_addr);
         
         			need_write_data_len -= buffer_len;
       			    data_ptr += buffer_len;
        			  writeen_data_len += buffer_len;
        			 flash_base_addr += buffer_len;
       			 }   
      
     		 else if(need_write_data_len < buffer_len)
           
       			 { 
       			 	memcpy(sector_buf, data_ptr, need_write_data_len);
         
      			   flash_write_from_buffer(sector_buf,need_write_data_len,flash_base_addr);
          
         			 data_ptr += need_write_data_len;
         			 flash_base_addr += need_write_data_len;
         
         			 writeen_data_len += need_write_data_len;
        
       			  }       
	
     	 }	
     	   uart_printf("write norfalsh complete!\r\n");
         flash_prog_check((unsigned char*)source_addr,data_len,write_flash_base_addr);  // check the programmer
	
     }
     
   
     
}
//*********************************************************************************************************************

void norflash_sector_write_test()
{
	int i,j,k=0;
	unsigned int sector_addr = 0x40000;
	unsigned int flash_base_addr = 0x0;
	unsigned short* mem_addr = (unsigned short*)0xa0030000;
	if(FlashID(flash_base_addr)) 
	 {
	     uart_printf("start to erase the sector address 0x%x of the norflash...\r\n",sector_addr);
	     FlashEraseSector(sector_addr);
	    for(k=0;k<10;k++)
	     for(i=0;i<10000;i++)
	      for(j=0;j<200;j++);
	 
	 //now 
	 for(i=0;i<68;i+=2)
	 {
	   *mem_addr++ = i;
	 }
	  
	  //write to norflash
	  FlashProgram(sector_addr,(unsigned short *)0xa0030000,(unsigned int)68);
	  flash_prog_check((unsigned char*)0xa0030000,(unsigned int)68,sector_addr);
	 
	  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷国产精品| 在线免费不卡电影| 亚洲一区在线视频观看| 精品国产伦一区二区三区免费| 成人午夜视频在线| 日韩av不卡在线观看| 亚洲精品高清在线| 久久久高清一区二区三区| 在线播放/欧美激情| 91蜜桃在线免费视频| 国产99久久久国产精品免费看| 日产精品久久久久久久性色| 亚洲精品ww久久久久久p站| 国产三级欧美三级| 欧美一区二区三区精品| 欧美性大战xxxxx久久久| 成人激情动漫在线观看| 黄页网站大全一区二区| 午夜久久电影网| 亚洲午夜影视影院在线观看| 国产精品福利一区二区三区| 国产午夜三级一区二区三| 精品国产成人在线影院| 69av一区二区三区| 欧美午夜精品一区二区蜜桃| 91麻豆国产香蕉久久精品| 成人app网站| av亚洲精华国产精华精华| 欧美三级欧美一级| 成人性生交大片免费| 国产成人免费在线视频| 国产精品一区一区三区| 精品一区二区三区免费毛片爱| 日韩国产欧美一区二区三区| 天天综合色天天综合色h| 一区二区免费在线播放| 亚洲一级二级在线| 伊人一区二区三区| 一区二区三区毛片| 亚洲精品菠萝久久久久久久| 亚洲男女一区二区三区| 亚洲精品视频一区二区| 亚洲精品高清在线观看| 亚洲国产视频在线| 亚洲高清三级视频| 视频一区免费在线观看| 丝袜美腿成人在线| 秋霞电影网一区二区| 精品一二三四区| 国产一区二区三区在线观看免费| 精品一区二区免费视频| 国产精一品亚洲二区在线视频| 国产综合色在线视频区| 懂色av一区二区三区免费观看| 成人激情文学综合网| 日本久久一区二区| 欧美日韩精品电影| 精品久久久久久久久久久久久久久久久 | 精品久久一区二区三区| 精品精品国产高清a毛片牛牛 | 国产成人免费在线视频| 成人精品gif动图一区| 色噜噜狠狠成人网p站| 欧美性视频一区二区三区| 91精品在线麻豆| 久久综合九色综合久久久精品综合| 欧美性色黄大片手机版| 奇米一区二区三区av| 日本欧美一区二区在线观看| 国产在线国偷精品产拍免费yy| 岛国一区二区三区| 欧洲一区二区av| 欧美一级艳片视频免费观看| 久久精品免费在线观看| 亚洲精品国产高清久久伦理二区| 国产乱码精品一区二区三| 99国产精品久久久久久久久久 | 国产精品美女久久久久久久久| 亚洲摸摸操操av| 蜜桃视频在线一区| 成人av免费网站| 欧美另类变人与禽xxxxx| 国产亚洲精品精华液| 亚洲精品欧美专区| 激情都市一区二区| 欧美亚洲一区二区在线| 精品国产麻豆免费人成网站| 亚洲精品第一国产综合野| 精品一区二区三区在线播放| 99久久精品99国产精品| 91精品国产综合久久香蕉麻豆| 国产精品污污网站在线观看| 天天影视涩香欲综合网| 成人一区二区三区| 欧美一区二区在线免费观看| 国产精品福利一区二区三区| 麻豆精品视频在线| 色诱亚洲精品久久久久久| 久久久久久免费毛片精品| 五月激情综合色| www.久久精品| 久久综合狠狠综合久久激情| 亚洲一二三四久久| 成人免费视频app| 欧美一区二区三区免费大片| 亚洲精品成人少妇| 成人一区二区三区视频| 精品国产百合女同互慰| 天天爽夜夜爽夜夜爽精品视频| 91在线国产观看| 日本一区二区三区电影| 久久精品国产久精国产爱| 欧美伊人久久久久久久久影院| 国产精品亲子伦对白| 激情综合一区二区三区| 欧美丰满嫩嫩电影| 亚洲男人都懂的| 成人免费观看视频| 久久久久久久国产精品影院| 日韩成人av影视| 欧美喷潮久久久xxxxx| 一区二区在线免费观看| 91在线视频播放| 亚洲欧洲av色图| 成人在线视频一区| 久久久精品国产免大香伊| 精品无人码麻豆乱码1区2区 | 在线91免费看| 亚洲成av人片在线观看无码| 日本伦理一区二区| 亚洲黄色小视频| 91极品美女在线| 亚洲综合清纯丝袜自拍| 国产婷婷色一区二区三区四区| 久久精品国产网站| 日韩精品在线一区| 激情综合一区二区三区| 久久久久久久久久看片| 国产另类ts人妖一区二区| 26uuu亚洲综合色| 国产老肥熟一区二区三区| 国产日韩欧美一区二区三区乱码 | 成人av电影在线观看| 中文字幕高清不卡| 99麻豆久久久国产精品免费优播| 中文字幕一区二区三区四区| 91在线观看免费视频| 亚洲精品国产a| 欧美日韩一区二区三区四区| 五月激情六月综合| 欧美刺激午夜性久久久久久久| 久久精品理论片| 久久精品亚洲精品国产欧美kt∨| 成人性生交大片免费看中文| 亚洲你懂的在线视频| 欧美日韩国产高清一区二区 | 久久精品一区二区| 成人国产精品免费网站| 亚洲综合一区在线| 91麻豆精品国产| 激情另类小说区图片区视频区| 国产欧美日韩麻豆91| 91女神在线视频| 亚洲电影欧美电影有声小说| 日韩欧美一级特黄在线播放| 国产精品综合一区二区三区| 国产精品成人免费| 欧美日本韩国一区二区三区视频| 久88久久88久久久| 国产精品美日韩| 欧美日本韩国一区二区三区视频| 激情六月婷婷综合| 最新高清无码专区| 91精品久久久久久蜜臀| 国产91对白在线观看九色| 一区二区高清视频在线观看| 国产亚洲人成网站| 久久伊人蜜桃av一区二区| 99久久婷婷国产精品综合| 午夜精品视频一区| 国产欧美精品国产国产专区| 在线观看日韩高清av| 麻豆国产一区二区| 亚洲精品一二三| 欧美精品一区在线观看| 一本大道久久a久久综合婷婷| 毛片av一区二区三区| 日韩毛片精品高清免费| 精品国产乱码久久久久久老虎 | 久久午夜老司机| 91黄色激情网站| 国产精品中文欧美| 亚洲午夜成aⅴ人片| 中文字幕精品一区 | 亚洲欧洲国产日本综合| 日韩欧美一区中文| 欧美三级电影网站| 99re成人在线| 国产电影一区在线| 麻豆精品新av中文字幕|