| 有好几个小伙伴问我,能不能写个关于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模块配置详解 》 
   
 |