一次失败的S32K模拟EEPROM经历
因为项目需要,使用S32K的内部flash模拟EEPROM使用。于是自然是查看数据手册,参考官方DEMO,准备操作。
根据手册内部flash map如下图
可见其中可配置存储分为FLEXNVM和FLEXRAM,根据手册解释:
FlexRAM 可配置RAM,可配置为传统RAM或者存储仿真EEPROM数据。所以当然优先选用FlexRAM来模拟EEPROM,而且NXP官方提供的DEMO也是选用FlexRAM来模拟,如下图所示:
但是测试工程师在实测的时候发现,每块新板子的EEPROM功能初始化都卡住,返工检查发现,每块芯片跑代码的时候都会在第一次分区的时候卡主引起芯片重启,追踪发现,出现具体问题的代码是
FLASH_DRV_DEFlashPartition->FLASH_DRV_CommandSequence中flash状态在等待CCIF标记时引起重启。但是如果执行单步调试,则可以等待到该状态标记位,通过分区初始化,并且只要一次初始化成功,以后都不会影响功能。
找到问题后,立马去搜索问题解决办法,发现很多都有类似的问题,在DS中测试官方代码是没有问题的,但是移植到其他IDE下会出现重启故障,解决方案是将初始化代码重定位到RAM中去执行,我司项目使用的IAR,所以参考官方的ld文件修改自己的icf文件
在FlexNVM中模拟EEPROM,必须考虑对齐的问题,因为FlexNVM的擦除是按照Sector为单位的,芯片默认的Sector为2048,也就是一次擦除2K大小的存储,而写FlexNVM则是按照一个最小存储单元来写的,也就是按照4字节对齐写入,所以在做底层的时候必须考虑对齐的问题,在底层自动将不满4字节长度填满。相对来说没有FlashRAM灵活,但是由于这一块空间比较大(默认64K),所以也有自己的优点,只要做好底层,对于应用来说没有区别。希望各位大神做过FlexRAM模拟的发给我一份代码参考一下(邮箱[email protected]),谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。