使用NXP S32K148EVB的官方开发板,UART1引脚RX-PTC6 TX-PTC7。
ProcessorExpert配置
默认配置如下:
PFlash: 代码存储区
DFlash:在此区域分配EEE的备份区域
FlexRam:模拟EEE的起始地址。
初始化代码:
ret = FLASH_DRV_Init(&Flash1_InitConfig0, &flashSSDConfig);
DEV_ASSERT(STATUS_SUCCESS == ret);
if(flashSSDConfig.EEESize == 0) //若未分配EEE,则执行分配指令
{
/* Configure FlexRAM as EEPROM and FlexNVM as EEPROM backup region,
* DEFlashPartition will be failed if the IFR region isn't blank.
* Refer to the device document for valid EEPROM Data Size Code
* and FlexNVM Partition Code. For example on S32K148:
* - EEEDataSizeCode = 0x02u: EEPROM size = 4 Kbytes
* - DEPartitionCode = 0x04u: EEPROM backup size = 64 Kbytes */
/*分区配置时备份区size = EEESize*16 分区代码参考芯片的DataSheet*/
ret = FLASH_DRV_DEFlashPartition(&flashSSDConfig, 0x02u, 0x04u, 0x0u, false, true);
DEV_ASSERT(STATUS_SUCCESS == ret);
FLASH_DRV_Init(&Flash1_InitConfig0, &flashSSDConfig); //重新分配后一定要记得重新初始化
/* Make FlexRAM available for EEPROM */
ret = FLASH_DRV_SetFlexRamFunction(&flashSSDConfig, EEE_ENABLE, 0x00u, &gs_EEPROMStatus);
DEV_ASSERT(STATUS_SUCCESS == ret);
}
写入函数:
将数组sourceBuffer中的前4字节写入EEE基地址。
address = flashSSDConfig.EERAMBase;
size = sizeof(uint32_t);
ret = FLASH_DRV_EEEWrite(&flashSSDConfig, address, size, sourceBuffer);
DEV_ASSERT(STATUS_SUCCESS == ret);
读函数(自己随便写的):
status_t FLASH_DRV_enEEEu8Read(
uint32_t dest,
uint32_t size,
uint8_t * pData)
{
status_t ret = STATUS_SUCCESS; /* Return code variable */
if ((FTFx_FCNFG & FTFx_FCNFG_EEERDY_MASK) == FTFx_FCNFG_EEERDY_MASK)
{
while ((size > 0U) && (ret == STATUS_SUCCESS))
{
*pData = *((uint8_t *)dest++);
size--;
pData++;
}
}
else
{
ret = STATUS_UNSUPPORTED;
}
return ret;
}
需要特别注意:
解决烧录代码后保留EEE分区记录的问题。操作如下:
打开Debug Configurations->Advanced Options,设置擦除保护的区域(可同时保护三块区域),启用分区0204(分区代码,芯片型号不一样,分区代码不一样)