用N76E003的IAP保存累时数据,一分钟保存一次,
问题是N76E003的IAP是不是每次写数据都要擦除
如果每次擦除不是用不了多久100000次就用完了
部分代码如下:
volatile unsigned char code vss_hze_Flash[128] _at_ 0x3800;
void Erase_DATAFLASH(u16 IAP_addr) //擦除
{
EA=0;
TA = 0xAA; //CHPCON受TA保护
TA = 0x55;
CHPCON |= 0x01; //IAPEN = 1, 启用IAP模式
TA = 0xAA; //IAPUEN受TA保护
TA = 0x55;
IAPUEN |= 0x01; //APUEN = 1, 启用APROM更新
IAPCN = PAGE_ERASE_AP; //擦除页面200h-27Fh
IAPAL = IAP_addr;
IAPAH = IAP_addr>>8;
IAPFD = 0xFF;
TA = 0xAA; //IAPUEN受TA保护
TA = 0x55;
IAPTRG |= 0x01; //将I写入'1'以触发IAP进程
EA=1;
}
void write_DATAFLASH(u16 IAP_addr,u8 IAP_data) //写数据
{
EA=0;
TA = 0xAA; //IAPTRG受TA保护
TA = 0x55;
CHPCON |= 0x01; //IAPEN = 1, 启用IAP模式
TA = 0xAA; //IAPUEN受TA保护
TA = 0x55;
IAPUEN |= 0x01; //APUEN = 1, 启用APROM更新
IAPCN = BYTE_PROGRAM_AP; // 编程 201h with 55h
IAPAL = IAP_addr;
IAPAH = IAP_addr>>8;
IAPFD = IAP_data;
TA = 0xAA;
TA = 0x55;
IAPTRG |= 0x01; //将I写入'1'以触发IAP进程
TA = 0xAA; //IAPUEN受TA保护
TA = 0x55;
IAPUEN &= ~0x01; //APUEN = 0, 禁用APROM更新
TA = 0xAA; //CHPCON受TA保护
TA = 0x55;
CHPCON &= ~0x01; //IAPEN = 0, 禁用IAP模式
EA=1;
}
//调用写16bit数据
Erase_DATAFLASH(0x3800);
write_DATAFLASH(0x3800,byte0);
write_DATAFLASH(0x3801,byte1);
//读数据
byte0=vss_hze_Flash[0];
byte1=vss_hze_Flash[1];
|