📄 f29lv160.c
字号:
#include "mylib.h"
int Flash_SectorErase(U32 Sector)
{
U32 i;
U16 tmp;
gFlash16[0x555]=0xAA; gFlash16[0x2AA]=0x55;
gFlash16[0x555]=0x80; gFlash16[0x555]=0xAA;
gFlash16[0x2AA]=0x55; gFlash16[Sector]=0x30;
i = 10000;
while(i--);
for(i=0; i<0x1000000; i++)
{
tmp=gFlash16[Sector];
if(tmp&0x80)
return 0;
if(tmp&0x20)
{
tmp = gFlash16[Sector];
if(tmp&0x80)
return 0;
else
return -1;
}
}
return -1;
}
int SectorErase(U32 secadd)
{
int ret;
if(secadd < 0x8000)
{
ret = Flash_SectorErase(0);
ret += Flash_SectorErase(0x2000);
ret +=Flash_SectorErase(0x3000);
ret +=Flash_SectorErase(0x4000);
}
else
{
ret = Flash_SectorErase(secadd);
}
return ret;
}
int Flash_WriteWord(U32 Addr, U16 Data)
{
U32 i;
U16 tmp;
gFlash16[0x555]=0xAA; gFlash16[0x2AA]=0x55;
gFlash16[0x555]=0xA0; gFlash16[Addr]=Data;
for(i = 0; i < 0x100000; i++)
{
tmp = gFlash16[Addr];
if( tmp == Data )
return 0;
}
return -1;
}
int Erase_Flash(U32 startaddr, U32 len)
{
U32 addr;
startaddr &= 0x7fff;
for(addr = startaddr; addr < len + startaddr; addr += 0x8000)
{
if( SectorErase(addr) )
{
printf("SectorErase fail add=0x%x\r\n", addr);
return -1;
}
else
{
printf("SectorErase success add=0x%x\r\n", addr);
}
}
return 0;
}
int Write_Flash64K(U32 addr, void *buf, U32 len)
{
U32 i, wlen = 0;
U16 *pbuf = (U16*)buf;
addr &= 0x7fff;
printf("\r\n");
while(len)
{
wlen = len < 0x8000? len: 0x8000;
len -= wlen;
if(SectorErase(addr))
{
printf("SectorErase fail add=0x%x\r\n", addr);
return -1;
}
for (i = 0; i < wlen; i++)
{
if(Flash_WriteWord(addr+i, *pbuf++) )
{
printf("write word fail add=0x%x\r\n", addr+i);
return -1;
}
}
addr +=wlen;
printf(".");
}
printf(".\r\n");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -