MA86系列(MTP型)
步骤1:将要修改的数据直接写入到MTP
其它系列(FLASH型)
步骤1:保存Flash数据到缓存
步骤2:擦除此页(使用页擦除模式)
步骤3:在缓存里修改要更新的数据
步骤4:将缓存里的数据写入到Flash(使用字节编程模式)
// 页擦除
bit bEA=EA;
IFADRH = ByteAddr; //送地址高字节
IFADRL= 0x00; //送地址低字节;
EA = 0; //关中断
ISPCR = 0x80; //允许ISP/IAP操作
IFMT =0x03; //页擦除
SCMD = 0x46;
SCMD = 0xB9;
nop();
IFMT=0;
ISPCR = 0; //清ISP/IAP特殊寄存器
EA = bEA; //恢复中断
// 字节编程
bit bEA=EA;
IFD = ByteData; //送所要写的数据
IFADRH = ByteAddr>>8; //送地址高字节
IFADRL= ByteAddr; //送地址低字节;
EA = 0; //关中断
ISPCR = 0x80; //允许ISP/IAP操作
IFMT =0x02; // 字节编程
SCMD = 0x46;
SCMD = 0xB9;
nop();
IFMT=0;
ISPCR = 0; //清ISP/IAP特殊寄存器
EA = bEA; //恢复中断
// 字节读取
bit bEA=EA;
IFADRH = ByteAddr>>8; //送地址高字节
IFADRL= ByteAddr; //送地址低字节;
EA = 0; //关中断
ISPCR = 0x80; //允许ISP/IAP操作
IFMT = 0x01; //字节读取
SCMD = 0x46;
SCMD = 0xB9;
nop();
IFMT=0;
ISPCR = 0; //清ISP/IAP特殊寄存器
EA = bEA; //恢复中断
return IFD;
|