使用STC32G12K128时擦除EEPROM遇到问题,向大神请教!
我在使用STC32G12K128时遇到问题,向大神请教!我的理解,STC32G12K128的128KB Flash分为两个64KB块,
IAP_ADDRE=0: 0:0000-0:FFFF (64KB)
IAP_ADDRE=1: 1:0000-1:FFFF (64KB)
第一种情况:
下载程序时,我将EEPROM空间大小设置64KB,留出64KB空间给程序代码ROM,
这种情况下,读、写任意扇区、整体擦除64KB空间(每次擦除一个扇区)都正常。
第二种情况:
下载程序时,我将EEPROM空间大小设置96KB,留出32KB空间给程序代码ROM,
那么我理解的EEPROM的地址范围是:0:0000-1:7FFF
ROM地址范围是:1:8000-1:FFFF
这种情况下,读、写任意扇区都正常,但整体擦除96KB空间时(每次擦除一个扇区)就会死机,
出现程序代码也被擦除的现象,这是什么原因?求大神帮助!
附:扇区擦除代码:
void EEPROM_SectorErase(u32 EE_address)
{
IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够
IAP_ERASE(); //宏调用, 送扇区擦除命令,命令不需改变时,不需重新送命令
//只有扇区擦除,没有字节擦除,512字节/扇区。
//IAP_ADDRE = (u8)(EE_address >> 16); //送扇区地址高字节(地址需要改变时才需重新送地址)
if (EE_address < 0x10000) {
IAP_ADDRE = 0x00; // 0x00000-0x0FFFF地址范围
} else {
IAP_ADDRE = 0x01; // 0x10000-0x1FFFF地址范围
}
IAP_ADDRH = (u8)(EE_address >> 8); //送扇区地址中字节(地址需要改变时才需重新送地址)
IAP_ADDRL = (u8)EE_address; //送扇区地址低字节(地址需要改变时才需重新送地址)
EEPROM_Trig(); //触发EEPROM操作
DisableEEPROM(); //禁止EEPROM操作
}
STC32G12K128的EEPROM分配是从FE:0000开始到FE:FFFF
超过64K后从FF:0000开始往后分配,这段空间跟程序空间重叠,需要软件进行保护
要使用96K EEPROM的话,烧录时EEPROM大小要设置128K
访问EEPROM时FF:0000~FF:7FFF(EEPROM地址1:0000~1:7FFF)空间不能进行擦写操作。 看图直观一些:
页:
[1]