SPRADL4 January 2025 F29H850TU , F29H859TU-Q1
The EEPROM_Config_Check() function performs general error-checking and configures Write/Erase protection masks required by the Flash API. This function should be called before programming or reading from the emulated EEPROM Unit(s).
First, the function verifies that the Flash Bank selected for EEPROM Emulation is valid. On F29H85x, only the data flash is currently supported.
if (FLASH_BANK_SELECT != C29FlashBankFR4RP0StartAddress)
{
return 0xFFFF;
}
Second, the validity of Flash Sectors selected for emulation is examined. This checks for:
If more Flash sectors have been selected for emulation than exist on the device, and if at least one flash sector has been selected
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;
}
If using Page Mode, the following will also be checked:
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;
}
It will also warn you with the appropriate code if one of the following conditions is detected:
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;
}