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

📄 nandflash.c

📁 针对K9F1208M FLASH的读写程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	}
	

}

void BMP_data_from_flash(unsigned long int data_addr,unsigned long int flash_page_addr)
{
	unsigned long int i;
	unsigned long int j,data,image_width,image_highth;
	unsigned char remainder_number;
	unsigned char remainder[3];

	unsigned long int page_number;
	unsigned long int page_addr,dot_counter;
	unsigned long int file_size; 
	unsigned long int header_size;
	
	unsigned int n;
	unsigned long int fat_page_addr;
	unsigned long int current_sector_addr;
	unsigned long int next_sector_addr;
	unsigned long int sector_num;	
	unsigned int FAT[256];
	
	
	dot_counter=0;
	page_addr=flash_page_addr;
	Flash_page_read(page_addr);
	
	image_highth=Data_buffer[25];
	image_highth=(image_highth<<8)+Data_buffer[24];	
   	image_highth=(image_highth<<8)+Data_buffer[23];
   	image_highth=(image_highth<<8)+Data_buffer[22];

	image_width=Data_buffer[21];
	image_width=(image_width<<8)+Data_buffer[20];	
   	image_width=(image_width<<8)+Data_buffer[19];
   	image_width=(image_width<<8)+Data_buffer[18];

	file_size=Data_buffer[5];
	file_size=(file_size<<8)+Data_buffer[4];	
   	file_size=(file_size<<8)+Data_buffer[3];
   	file_size=(file_size<<8)+Data_buffer[2];
   
	header_size=Data_buffer[13];
   	header_size=(header_size<<8)+Data_buffer[12];
   	header_size=(header_size<<8)+Data_buffer[11];
   	header_size=(header_size<<8)+Data_buffer[10];
	page_number=(file_size/512)+1;
	
	data_addr=data_addr+(image_highth-1)*LCD_x_size;	

	for (i=header_size;i<512-2;i=i+3)
	{
		data=Data_buffer[i+2];
   		data=(data<<8)+Data_buffer[i+1];
   		data=(data<<8)+Data_buffer[i];
   		data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
   		Image_data[data_addr]=data&0xFFFF;
		data_addr++;dot_counter++;
		if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
	}

	remainder_number=(512-header_size)%3; 
	for (i=0;i<remainder_number;i++)
	{
		remainder[i]=Data_buffer[512-remainder_number+i];
	}
	while(1)
	{	
		for(n=0;n<SecPerClus-1;n++)
		{
			page_addr++;
			Flash_page_read(page_addr);		
			
			switch(remainder_number)
			{
				case 0:
				{
					for (j=0;j<512-2;j=j+3)
					{
						data=(Data_buffer[j+2]<<16)+(Data_buffer[j+1]<<8)+Data_buffer[j];
						data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
   						Image_data[data_addr]=data&0xFFFF;
	   					data_addr++;
	   					dot_counter++;
	   					if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
					}
					remainder_number=2;
					remainder[0]=Data_buffer[510];
					remainder[1]=Data_buffer[511];
				}
				break;
				case 1:
				{
					data=(Data_buffer[1]<<16)+(Data_buffer[0]<<8)+remainder[0];
					data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
   					Image_data[data_addr]=data&0xFFFF;
	   				data_addr++;
	   				dot_counter++;
	   				if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
					for (j=2;j<512-2;j=j+3)
					{
						data=(Data_buffer[j+2]<<16)+(Data_buffer[j+1]<<8)+Data_buffer[j];
						data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
   						Image_data[data_addr]=data&0xFFFF;
						data_addr++;
						dot_counter++;
	   					if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
					}
					remainder_number=0;
				}
				break;
				case 2:
				{				
					data=(Data_buffer[0]<<16)+(remainder[1]<<8)+remainder[0];
					data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
   					Image_data[data_addr]=data&0xFFFF;
	 				data_addr++;
	 				dot_counter++;
	   					if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
					for (j=1;j<512-2;j=j+3)
					{
						data=(Data_buffer[j+2]<<16)+(Data_buffer[j+1]<<8)+Data_buffer[j];
						data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
   						Image_data[data_addr]=data&0xFFFF;
						data_addr++;
						dot_counter++;
	   					if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
					}
					remainder_number=1;
					remainder[0]=Data_buffer[511];
				}
				break;
				default:;
			}		
		}
		current_sector_addr=(page_addr-Data_start_Addr+4)/SecPerClus;	
		fat_page_addr=RsvdSec+current_sector_addr/256;
		sector_num=(current_sector_addr%256);
		Flash_page_read(fat_page_addr);
		
		next_sector_addr=(Data_buffer[2*sector_num]+256*Data_buffer[2*sector_num+1])&(0x0000ffff);
		if(next_sector_addr==0xffff)  goto end;
		page_addr=SecPerClus*next_sector_addr+Data_start_Addr-4;	
		Flash_page_read(page_addr);				
		switch(remainder_number)
		{
			case 0:
			{
				for (j=0;j<512-2;j=j+3)
				{
					data=(Data_buffer[j+2]<<16)+(Data_buffer[j+1]<<8)+Data_buffer[j];
					data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
   					Image_data[data_addr]=data&0xFFFF;
   					data_addr++;
   					dot_counter++;
	   					if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
				}
				remainder_number=2;
				remainder[0]=Data_buffer[510];
				remainder[1]=Data_buffer[511];
			}
			break;
			case 1:
			{
				data=(Data_buffer[1]<<16)+(Data_buffer[0]<<8)+remainder[0];
				data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
   				Image_data[data_addr]=data&0xFFFF;
   				data_addr++;
   				dot_counter++;
	   			if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
				for (j=2;j<512-2;j=j+3)
				{
					data=(Data_buffer[j+2]<<16)+(Data_buffer[j+1]<<8)+Data_buffer[j];
					data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
   					Image_data[data_addr]=data&0xFFFF;
					data_addr++;
					dot_counter++;
	   				if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
				}
				remainder_number=0;
			}
			break;
			case 2:
			{
				
				data=(Data_buffer[0]<<16)+(remainder[1]<<8)+remainder[0];
				data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
   				Image_data[data_addr]=data&0xFFFF;
 				data_addr++;
 				dot_counter++;
	   			if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
				for (j=1;j<512-2;j=j+3)
				{
					data=(Data_buffer[j+2]<<16)+(Data_buffer[j+1]<<8)+Data_buffer[j];
					data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
   					Image_data[data_addr]=data&0xFFFF;
					data_addr++;
					dot_counter++;
	   				if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
				}
				remainder_number=1;
				remainder[0]=Data_buffer[511];
			}
			break;
			default:;
		}
		
	}
	end:;
}

void Logo_data_from_flash(unsigned long int data_addr,unsigned long int flash_block_addr)
{
	unsigned long int i;
	unsigned long int j;
	unsigned char remainder_number;
	unsigned char remainder[2];

	unsigned long int page_number;
	unsigned long int page_addr;
	unsigned long int file_size; 
	unsigned long int header_size;

	
	
	page_addr=flash_block_addr*32;
	Flash_page_read(page_addr);
	page_addr++;
	file_size=Data_buffer[5];
	file_size=(file_size<<8)+Data_buffer[4];	
   	file_size=(file_size<<8)+Data_buffer[3];
   	file_size=(file_size<<8)+Data_buffer[2];
   	
	header_size=0x36;
   	page_number=(file_size/512)+1;

	for (i=header_size;i<512-2;i=i+3)
	{
		Image_data[data_addr]=Data_buffer[i+2];
   		Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[i+1];
   		Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[i];
		data_addr++;
	}

	remainder_number=(512-header_size)%3; 
	for (i=0;i<remainder_number;i++)
	{
		remainder[i]=Data_buffer[512-remainder_number+i];
	}
	for (i=1;i<page_number+1;i++)
	{
		Flash_page_read(page_addr);
		page_addr++;
			
		switch(remainder_number)
		{
			case 0:
			{
				for (j=0;j<512-2;j=j+3)
				{
					Image_data[data_addr]=Data_buffer[j+2];
   					Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[j+1];
   					Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[j];
					data_addr++;
				}
				remainder_number=2;
				remainder[0]=Data_buffer[510];
				remainder[1]=Data_buffer[511];
			}
			break;
			case 1:
			{
				Image_data[data_addr]=Data_buffer[1];
   				Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[0];
   				Image_data[data_addr]=(Image_data[data_addr]<<8)+remainder[0];
				data_addr++;
				for (j=2;j<512-2;j=j+3)
				{
					Image_data[data_addr]=Data_buffer[j+2];
   					Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[j+1];
   					Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[j];
					data_addr++;
				}
				remainder_number=0;
			}
			break;
			case 2:
			{
				
				Image_data[data_addr]=Data_buffer[0];
   				Image_data[data_addr]=(Image_data[data_addr]<<8)+remainder[1];
   				Image_data[data_addr]=(Image_data[data_addr]<<8)+remainder[0];
				data_addr++;
				for (j=1;j<512-2;j=j+3)
				{
					Image_data[data_addr]=Data_buffer[j+2];
   					Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[j+1];
   					Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[j];
					data_addr++;
				}
				remainder_number=1;
				remainder[0]=Data_buffer[511];
			}
			break;
			default:;
		}
	}
}

void Erase_chip()
{
	int i;
	for (i=0;i<4096;i++)
	{Flash_block_erase(i);
	}
	
}



⌨️ 快捷键说明

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