S32DS踩坑日记三-使用EEPROM

这个片子的EEPROM是用普通的flash模拟的,所以配置比较复杂。需要先增加flash,然后再配置模拟EEPROM那块的电路。

这个模拟的大概意思是这样:片子内置一块用于数据存储的flash,叫D-flash,大小是64K,起始地址为0x1000-0000。还有一片用来模拟EEPROM的内存,大小是4K,位置是0x1400-0000。这两样东西正常情况下就是它原本的用途。但是经过配置FlexNVM里面的电路后,就可以在写内存的时候,自动把数据写到D-flash里面。不知道这种设计的背景是什么,大概就是这么个东西。

在这里插入图片描述

初始化:比较复杂,整个D-flash都配置成EEPROM了,配置后大小是4K。
flash_ssd_config_t SSDConfig;
/* Flash初始化,这个比较复杂,因为EEEFlash(flash模拟EEPROM)的原因。 /
{
INT_SYS_DisableIRQGlobal();
status_t ret;
do
{
ret = FLASH_DRV_Init(&Flash1_InitConfig0, &SSDConfig);
}
while(ret != STATUS_SUCCESS);
if (SSDConfig.EEESize == 0u)
{
/
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 S32K144:
* - EEEDataSizeCode = 0x02u: EEPROM size = 4 Kbytes
* - DEPartitionCode = 0x08u: EEPROM backup size = 64 Kbytes */
ret = FLASH_DRV_DEFlashPartition(&SSDConfig, 0x02u, 0x08u, 0x0u, false, true);
DEV_ASSERT(STATUS_SUCCESS == ret);

	        /* Re-initialize the driver to update the new EEPROM configuration */
	        ret = FLASH_DRV_Init(&Flash1_InitConfig0, &SSDConfig);
	        DEV_ASSERT(STATUS_SUCCESS == ret);

	        /* Make FlexRAM available for EEPROM */
	        ret = FLASH_DRV_SetFlexRamFunction(&SSDConfig, EEE_ENABLE, 0x00u, NULL);
	        DEV_ASSERT(STATUS_SUCCESS == ret);
	    }
	    else    /* FLexRAM is already configured as EEPROM */
	    {
	        /* Make FlexRAM available for EEPROM, make sure that FlexNVM and FlexRAM
	         * are already partitioned successfully before */
	        ret = FLASH_DRV_SetFlexRamFunction(&SSDConfig, EEE_ENABLE, 0x00u, NULL);
	        DEV_ASSERT(STATUS_SUCCESS == ret);
	    }
	INT_SYS_EnableIRQGlobal();
}

读写这个假的EEPROM:
{
status_t ret;
uint32_t address;
uint32_t size;
uint8_t sourceBuffer[sizeof(uint32_t)];
uint32_t rbval;

if (SSDConfig.EEESize != 0u)
{
    address = SSDConfig.EERAMBase;
    size = sizeof(uint32_t);
    sourceBuffer[0] = 0x11;
    sourceBuffer[1] = 0x22;
    sourceBuffer[2] = 0x33;
    sourceBuffer[3] = 0x44;
    ret = FLASH_DRV_EEEWrite(&SSDConfig, address, size, sourceBuffer);
    DEV_ASSERT(STATUS_SUCCESS == ret);

    do
    {
    	rbval = *((uint32_t *)address);
    }
    while(rbval != 0x44332211);
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值