S32R274--EEPROM

0、项目中有一些配置参数需要保存,如ip地址、bootloader启动标志位等,所以需要用到eeprom,在S32R274上应该是flash模拟的eeprom,nxp给了demo,稍作修改就可以使用。

1、在Processor Expert模块中添加eee模块,默认可能没有eee,这时候点击一下refresh,就出来了
在这里插入图片描述
2、配置eee模块,需要修改的主要是:data size,就是一次写入数据的最大值,如果存储的数据超过data size会丢失部分数据;maximum number of record 最大存储条目数。
在这里插入图片描述
最下面配置对应flash地址,大小,S32R274内置64K eeprom,如下图
在这里插入图片描述
3、配置完成后重新编译工程就可以使用eee模块函数了,

//定义一个结构体保存配置参数
typedef struct  NVRamDate{
	            char boot_type;       //1:BOOT_FLAG_BOOTLOADER  2:BOOT_FLAG_APP
	            char none0[2];        //保留
	            char customize_ip;    //是否使用自定义ip
	            char ip[4];           //IP地址
	            char netmask[4];      //子网掩码
	            char gw[4];           //网关
	            char end[8];          //保留
               } NVRamDate;
extern NVRamDate nv_buffer;
/**************************************************/
//初始化
  ret = EEE_DRV_InitEeprom(&userConf, &state);
  DEV_ASSERT(STATUS_SUCCESS == ret);
//读数据
status_t readBootFlag()
{
	status_t ret = STATUS_SUCCESS;
	uint32_t recordAddr;
	memset(&nv_buffer,0x00,sizeof(nv_buffer));
    ret = EEE_DRV_ReadEeprom(BOOT_EEE_ID,
    		                 sizeof(nv_buffer),
                             (uint32_t)&nv_buffer,
                             &recordAddr,
                             EEE_IMMEDIATE_NONE);
    return ret;
}
//写数据
status_t change_ip_address(char *data)
{
	status_t ret;
	eee_state_t state;
    char logstr[50] = {0};
	ip4_addr_t ipaddr, netmask, gw;
    //设置设备ip地址
    IP4_ADDR((&gw), data[13],data[14],data[15],data[16]);
    IP4_ADDR((&ipaddr), data[9],data[10],data[11],data[12]);
    IP4_ADDR((&netmask), data[17],data[18],data[19],data[20]);
    netif_set_addr(&net_interfaces[0], &ipaddr, &netmask, &gw);
    //eee wirte函数只能增加条目,不能修改条目,所以每次写都先删掉之前的,其实是无效化,数据还是在eeprom里
    ret = EEE_DRV_DeleteRecord(BOOT_EEE_ID,
                         EEE_IMMEDIATE_NONE);
    //写入数据,其实虽然我的ID都是一样的,但是不能覆盖,是新生成的一条数据
	nv_buffer.customize_ip = 1;
	memcpy(&nv_buffer.ip[0],data + 9, 12);
	ret = EEE_DRV_WriteEeprom(BOOT_EEE_ID,
                   sizeof(nv_buffer),
                        (uint32_t)&nv_buffer,
                        EEE_IMMEDIATE_NONE);
	if(ret > 0) {//写入数据次数多了,会返回错误码0x0400,代表eeprom满,这时候擦除之前的数据再重新写入
		EEE_DRV_RemoveEeprom();
		EEE_DRV_InitEeprom(&userConf, &state);
		ret = EEE_DRV_WriteEeprom(BOOT_EEE_ID,
	                   sizeof(nv_buffer),
	                        (uint32_t)&nv_buffer,
	                        EEE_IMMEDIATE_NONE);
	}
	return ret;
}
/**************************************************/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值