ZHCAEX4 January 2025 F29H850TU , F29H859TU-Q1
EEPROM_Config_Check() 函数可执行一般错误检查并配置闪存 API 所需的写入/擦除保护掩码。应在对仿真 EEPROM 单元进行编程或读取之前调用此函数。
第一,该函数验证选择用于 EEPROM 仿真的闪存组是否有效。在 F29H85x 上,当前仅支持数据闪存。
if (FLASH_BANK_SELECT != C29FlashBankFR4RP0StartAddress)
{
return 0xFFFF;
}
第二,检查选择用于仿真的闪存扇区的有效性。这用于检查以下内容:
选择用于仿真的闪存扇区数量是否超过器件上的数量,以及是否至少选择了一个闪存扇区
uint32_t NUM_EEPROM_SECTORS_1 = FIRST_AND_LAST_SECTOR[1] - FIRST_AND_LAST_SECTOR[0] + 1;
NUM_EEPROM_SECTORS = NUM_EEPROM_SECTORS_1;
if (NUM_EEPROM_SECTORS > NUM_FLASH_SECTORS || NUM_EEPROM_SECTORS == 0)
{
return 0xEEEE;
}
if (NUM_EEPROM_SECTORS > 1)
{
if (FIRST_AND_LAST_SECTOR[1] <= FIRST_AND_LAST_SECTOR[0])
{
return 0xEEEE;
}
if (FIRST_AND_LAST_SECTOR[1] > NUM_FLASH_SECTORS - 1 || FIRST_AND_LAST_SECTOR[1] < 1)
{
return 0xEEEE;
}
}
else if (FIRST_AND_LAST_SECTOR[0] > NUM_FLASH_SECTORS - 1 ||
FIRST_AND_LAST_SECTOR[1] > NUM_FLASH_SECTORS - 1)
{
return 0xEEEE;
}
如果使用页面模式,还将检查以下各项:
Bank_Size = WRITE_SIZE_BYTES*2 + ((EEPROM_PAGE_DATA_SIZE + WRITE_SIZE_BYTES*2) * NUM_EEPROM_PAGES);
uint32 Available_Words = NUM_EEPROM_SECTORS * FLASH_SECTOR_SIZE;
if (Bank_Size * NUM_EEPROM_BANKS > Available_Words)
{
return 0xCCCC;
}
如果检测到以下情况之一,该函数还会通过相应的代码发出警告:
if (Available_Words - (Bank_Size * NUM_EEPROM_BANKS ) >= Bank_Size)
{
Warning_Flags += 1;
}
if (DATA_SIZE <= WRITE_SIZE_BYTES)
{
Warning_Flags += 2;
}
if (FIRST_AND_LAST_SECTOR[0] > 31 && FIRST_AND_LAST_SECTOR[1] > 31)
{
if (NUM_EEPROM_SECTORS < 8)
{
Warning_Flags += 4;
}
else if ((FIRST_AND_LAST_SECTOR[0] % 8) != 0 || (FIRST_AND_LAST_SECTOR[1] + 1) % 8 != 0)
{
Warning_Flags += 4;
}
}
else if (FIRST_AND_LAST_SECTOR[1] > 31 && (FIRST_AND_LAST_SECTOR[1] + 1) % 8 != 0)
{
Warning_Flags += 4;
}