AUTOSAR中的Fee

文摘   科技   2023-05-22 08:35   广东  

我已经写了很多关于AUTOSAR Memory Stack相关的文章教程了,更多的案例是针对EEPROM的。

有好几个小伙伴问我,能不能写个关于Fee的。

那是当然的,不仅要写一个,要写好几个,讲详细点。

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

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

  1. 擦写寿命较短;

  2. 擦写单位比较大。

你看之前文章(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模块配置详解》和《AUTOSAR Ea深度剖析》。

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

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

敬请期待!

如果你对我的《AUTOSAR实战教程》感兴趣,可以关注公众号“嵌入式软件实战派”,然后在对话框回复“AUTOSAR”,可获得教程的目录。

这个教程目录会定期更新,现在订阅号的规则改了,不会更新你以前获得的目录文章,需要你定期回复“AUTOSAR”获得最新的版本。



>>>往期精彩内容


如果你喜欢我的文章,请关注,并转发点赞在看,这是对我莫大的鼓励!

嵌入式软件实战派
专注嵌入式软件开发领域知识传授,包括C语言精粹,RTOS原理与使用,MCU驱动开发,AUTOSAR搭建,软件架构方法设计等