有好几个小伙伴问我,能不能写个关于Fee的。
那是当然的,不仅要写一个,要写好几个,讲详细点。
为什么大家喜欢用Fee的Fls,而不是Ea的EEPROM?我猜是成本问题,因为EEPROM要外挂额外的芯片,而Fls(DataFlash)是内置在MCU中的。
相对于EEPROM,DataFlash的缺点也是相当明显的:
-
擦写寿命较短;
-
擦写单位比较大。
你看之前文章( AUTOSAR的Memory是如何设计的? )提到的这个案例:
以下以在0x0008地址写入0x11, 0x22, 0x33, 0x44这四个字节内容为例,看看EEPROM和DataFlash的实际操作情况:
当然,这两个缺点也是有办法弥补的,不过要牺牲点时间效率为代价。
这样,项目到底用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空间分为两个逻辑分区
在使用的时候,首先使用分区1
用完分区1后,再使用分区2
如果还要继续使用,就再擦除分区1使用,如此反复轮换使用。
我打算将这个过程原理做成视频,本文先放一段gif动图看看吧。
以上是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也不亏。
于是SamllSector Fee就来了。
还有个问题,一般情况下MCU内部的DataFlash的擦写周期P/E Cycle是10万次的,如果客户要求有段数据的存储擦写寿命要达到20万次怎么办。
那就要加入个叫“磨损均衡算法”的策略了,简单地理解,用双倍的空间存储这个内容。
这些策略,我在之前的文章有提及过。《 AUTOSAR的Memory是如何设计的? 》
这里不展开讲这些细节了,后续有机会出更多的图文或视频来讲解其原理和过程。
那接下来就是配置了,如果你学会Ea/EEP的配置,这个Fee/Fls的配置就很简单了,大部分概念和操作都是一样的。建议参考《 AUTOSAR NvM模块配置详解 》
|