📄 flash.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 + -