为什么大家喜欢用Fee的Fls,而不是Ea的EEPROM?

存储技术

609人已加入

描述

为什么大家喜欢用Fee的Fls,而不是Ea的EEPROM?我猜是成本问题,因为EEPROM要外挂额外的芯片,而Fls(DataFlash)是内置在MCU中的。

相对于EEPROM,DataFlash的缺点也是相当明显的:

擦写寿命较短;

擦写单位比较大。

你看之前文章(AUTOSAR的Memory是如何设计的?)提到的这个案例:

以下以在0x0008地址写入0x11, 0x22, 0x33, 0x44这四个字节内容为例,看看EEPROM和DataFlash的实际操作情况:

EEPROM

当然,这两个缺点也是有办法弥补的,不过要牺牲点时间效率为代价。

这样,项目到底用EEPROM还是用DataFlash做存储,那得根据实际使用需求做评估了。

Vector提供的Fee方案有两种:一种是常规的Standard Fee,另外一种是Small Sector Fee。

Vector的官网有详细介绍为什么有两种不同的Fee:

《Standard Fee and SmallSectorFee》(https://support.vector.com/kb/?id=kb_article_view&sysparm_article=KB0012027&sys_kb_id=8c2582281b2614148e9a535c2e4bcbe8&spa=1)

常规的Fee,一般是将Fls空间分为两个逻辑分区

EEPROM

在使用的时候,首先使用分区1

EEPROM

用完分区1后,再使用分区2

EEPROM

如果还要继续使用,就再擦除分区1使用,如此反复轮换使用。

我打算将这个过程原理做成视频,本文先放一段gif动图看看吧。

EEPROM

以上是Standard Fee的做法,这是因为Flash一把擦除单位比较大,所以才这么干的。

为了更好理解这个原理,引入两个概念:Sector和Page

姑且这么理解,Sector是Flash一次擦除的最小单位,Page是Flash一次写入的最小单位。

例如NXP S32K MCU的DataFlash的Sector大小是8K,Page大小是4Byte。

这就有个问题,一般情况下,一个数据段内容不会很大,都是很小的几个字节,第一次写倒是无所谓,如果第二次要改内容怎么办。要擦除8K的Sector才能重新写入这个更改的内容!嗯,很不合算!

于是,Fee就用了上文讲到的方法,两个Sector轮流来。

但是呢,并不是所有Flash的Sector都是很大的,也有很小的,例如瑞萨的RH850的DataFlash,Sector大小是64Byte,Page大小是4Byte。

好家伙,那就让一段应用内容数据占用一整个(即使多几个)Sector也不亏。

EEPROM

于是SamllSector Fee就来了。

还有个问题,一般情况下MCU内部的DataFlash的擦写周期P/E Cycle是10万次的,如果客户要求有段数据的存储擦写寿命要达到20万次怎么办。

那就要加入个叫“磨损均衡算法”的策略了,简单地理解,用双倍的空间存储这个内容。

EEPROM

这些策略,我在之前的文章有提及过。《AUTOSAR的Memory是如何设计的?》

这里不展开讲这些细节了,后续有机会出更多的图文或视频来讲解其原理和过程。

那接下来就是配置了,如果你学会Ea/EEP的配置,这个Fee/Fls的配置就很简单了,大部分概念和操作都是一样的。建议参考《AUTOSAR NvM模块配置详解》和《AUTOSAR Ea深度剖析》。

如果新手非要想看看Fee的具体操作配置,我后期再专门出个Fee配置的文章。

当然,我也会像之前分析Ea的方法那样,用PC的纯软件方式模拟Fee的读写行为(这可能会比Ea复杂很多)。





审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分