nxp-flexnvm_eeprom用例配置8kram
flash_security_state_t securityStatus = kFLASH_SecurityStateNotSecure; /* Return protection status */
status_t result; /* Return code from each flash driver function */
/* Init hardware */
BOARD_InitPins();
BOARD_BootClockRUN();
BOARD_InitDebugConsole();
/* Clean up Flash driver Structure*/
memset(&s_flashDriver, 0, sizeof(flash_config_t));
/* print welcome message */
PRINTF("\r\n FlexNVM EEprom Example Start \r\n");
if (SIM->FCFG2 & SIM_FCFG2_PFLSH_MASK)
{
PRINTF("\r\n Current device doesn't support FlexNVM feature \r\n");
app_finalize();
}
/* Setup flash driver structure for device and initialize variables. */
result = FLASH_Init(&s_flashDriver);
if (kStatus_FLASH_Success != result)
{
error_trap();
}
/* Check security status. */
result = FLASH_GetSecurityState(&s_flashDriver, &securityStatus);
if (kStatus_FLASH_Success != result)
{
error_trap();
}
/* Print security status. */
switch (securityStatus)
{
case kFLASH_SecurityStateNotSecure:
PRINTF("\r\n Flash is UNSECURE!");
break;
case kFLASH_SecurityStateBackdoorEnabled:
PRINTF("\r\n Flash is SECURE, BACKDOOR is ENABLED!");
break;
case kFLASH_SecurityStateBackdoorDisabled:
PRINTF("\r\n Flash is SECURE, BACKDOOR is DISABLED!");
break;
default:
break;
}
PRINTF("\r\n");
按照NXP用例先使用FLASH_Init初始化,DFlash-256K,PFlash-256K,EEPROM,32Byte.
上图在project->Attributes->C/C++ Build->MCU settings中,这里配置划分了PFLASH和ELEX_NVM已经各种RAM空间,应该类似stm32link文件将来做自检可以用到。
这里面如果要把用例配置成EEPROM-8K需要重新配置一下。
在上面的代码后面添加
#define EEPROM_DATA_SET_SIZE_CODE 0x31
#define FLEXNVM_PARTITION_CODE 0x04
#define EEPROM_DATA_SIZE 0x2000
FLASH_GetProperty(&s_flashDriver, kFLASH_PropertyEepromTotalSize, &eepromTotalSize);
if(EEPROM_DATA_SIZE != eepromTotalSize)
{
if(kStatus_FLASH_Success != FLASH_EraseAll(&s_flashDriver,FOUR_CHAR_CODE('k', 'f', 'e', 'k')));/* 擦除flash*/
{
// 擦除失败
}
}
FLASH_ProgramPartition(&s_flashDriver, kFLASH_PartitionFlexramLoadOptionLoadedWithValidEepromData,
EEPROM_DATA_SET_SIZE_CODE, FLEXNVM_PARTITION_CODE);
NVIC_SystemReset();/*复位*/
这里面0x31(EEPROM_DATA_SET_SIZE_CODE)和0x04(FLEXNVM_PARTITION_CODE )根据参考手册29.4.11.16 Program Partition command章节
FLASH_ProgramPartition函数里面会调用Flash commands此命令在参考手册29.4.9.2 FLASH_ProgramPartition中介绍用到0x80(Program the FlexNVM Partition Code and EEPROM Data Set Size into the data flash IFR. format all EEPROM backup d ata sectors allocated for EEPROM,initialize the FlexRAM.)
FLASH_EraseAll该函数执行的时候需要看下当前配置情况,如果配置的8KB我们需要的则可以不执行。而查看EEPROM大小可以使用FLASH_GetProperty(&s_flashDriver, kFLASH_PropertyEepromTotalSize, &eepromTotalSize);函数此函数还能查看很多其他内存空间大小。