微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一次失败的S32K模拟EEPROM经历

一次失败的S32K模拟EEPROM经历

 

因为项目需要,使用S32K的内部flash模拟EEPROM使用。于是自然是查看数据手册,参考官方DEMO,准备操作。
根据手册内部flash map如下图

在这里插入图片描述可见其中可配置存储分为FLEXNVM和FLEXRAM,根据手册解释:

FlexNVM为可配置非优化存储器,相当于flash。
FlexRAM 可配置RAM,可配置为传统RAM或者存储仿真EEPROM数据。所以当然优先选用FlexRAM来模拟EEPROM,而且NXP官方提供的DEMO也是选用FlexRAM来模拟,如下图所示:

在这里插入图片描述

FlexRAM可配置为2K和4K,并且可按字节擦写,擦除10K次,一切都和普通EEPROM的操作类似,仅看代码和测试过程是完美模拟了EERPOM,后面的工作就相对简单了,把官方驱动移植到自己的项目中,封装自己的接口,单步调试,功能测试OK,准备交代码了。
但是测试工程师在实测的时候发现,每块新板子的EEPROM功能初始化都卡住,返工检查发现,每块芯片跑代码的时候都会在第一次分区的时候卡主引起芯片重启,追踪发现,出现具体问题的代码
FLASH_DRV_DEFlashPartition->FLASH_DRV_CommandSequence中flash状态在等待CCIF标记时引起重启。但是如果执行单步调试,则可以等待到该状态标记位,通过分区初始化,并且只要一次初始化成功,以后都不会影响功能
找到问题后,立马去搜索问题解决办法,发现很多都有类似的问题,在DS中测试官方代码是没有问题的,但是移植到其他IDE下会出现重启故障,解决方案是将初始化代码重定位到RAM中去执行,我司项目使用的IAR,所以参考官方的ld文件修改自己的icf文件

官方ld文件

添加自己的EEPROM段,但是实测发现仍然会有重启故障,折腾了两天后发现此路不同,所以放弃了在FlexRAM中模拟EEPROM。
在FlexNVM中模拟EEPROM,必须考虑对齐的问题,因为FlexNVM的擦除是按照Sector为单位的,芯片认的Sector为2048,也就是一次擦除2K大小的存储,而写FlexNVM则是按照一个最小存储单元来写的,也就是按照4字节对齐写入,所以在做底层的时候必须考虑对齐的问题,在底层自动将不满4字节长度填满。相对来说没有FlashRAM灵活,但是由于这一块空间比较大(认64K),所以也有自己的优点,只要做好底层,对于应用来说没有区别。希望各位大神做过FlexRAM模拟的发给我一份代码参考一下(邮箱[email protected]),谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐