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

📄 flash.c

📁 arm开发很好的例程
💻 C
字号:

#include "bios.h"
#include "flash.h"
#include "utils.h"
#include "uart.h"







void Flash_send_commmand(UNS8 com)
{
	UNS16 *ptr = Flash_address_base;
	
	
	*(ptr + 0x555) = 0xaa;
	*(ptr + 0x2aa) = 0x55;
	*(ptr + 0x555) = com;
	
}

void Flash_reset(void)
{
	Flash_send_commmand(0xf0);	
}



void Flash_read_id(UNS16 *buf)
{
	UNS16 *ptr = Flash_address_base;
	
	
	Flash_send_commmand(0x90);
	*buf = *(ptr);
	buf++;
	ptr++;
	*buf = *(ptr);
	buf++;
	ptr+=0x0d;
	*buf = *(ptr);
	buf++;
	ptr++;
	*buf = *(ptr);
	Flash_reset();
	
}

UNS8 Flash_write(UNS32 size)
{
	UNS16 *ptr = Flash_address_base;
	UNS16 *Tptr = Flash_address_base;
	UNS16 *Sptr = (UNS16 *)0x1000;
	UNS32 i;
	UNS16 temp;
	
	Flash_send_commmand(0x20); //in to fast mode
	
	for( i = 0; i<size ; i+=2)
	{
		*ptr = 0xa0;
		temp = *Sptr;
		*Tptr = temp;
		
		//Delay_us(20);
		do{
			Delay_us(2);
		}while((*Tptr) != temp);
		
		Tptr ++;
		Sptr ++;
		
	}
	Flash_reset();
	return 0;
	
}

UNS8 Flash_sector_erase(UNS32 address)
{
	
	UNS16 *ptr = Flash_address_base;
	Flash_send_commmand(0x80);
	
	*(ptr + 0x555) = 0xaa;
	*(ptr + 0x2aa) = 0x55;
	ptr += address;
	*ptr = 0x30;
	do{
		Delay_ms(10);
	}while(((*ptr)&0x00ff) != 0x00ff);
	return 0;
}


UNS32 Flash_Verify(UNS32 size)
{
	
	UNS8 String[16];
	
	UNS32 i;
	UNS16 *Tptr = Flash_address_base;
	UNS16 *Sptr = (UNS16 *)0x1000;
	UNS16 temp;
	
	Flash_reset();
	size >>=1;
	for(i = 0;i < size;i++)
	{
		if( *Tptr != *Sptr )
		{
			my_printf("Target Value :0x%04x\n\r",*Tptr);
			my_printf("Source Value :0x%04x\n\r",*Sptr);
			break;
		}
		Tptr ++;
		Sptr ++;	
	}
	return i;
}



⌨️ 快捷键说明

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