FEE全称为“Flash EEPROM Emulation ” , 即通过Flash来模拟EEPROM操作,相比Flash,EEPROM可以针对其存储空间同一位置直接改写,但Flash存储空间只能从1改成0,因此针对同一位置处的改写必须先擦除再写入才可以。
为了提高Flash的读写效率,因此Flash通过模拟EEPROM的操作来实现底层不断写入的操作,最终通过相应的换片机制来均衡Flash空间的读写寿命。
关于FEE机制具体是如何实现的,可以参照我之前的文章**《FEE机制》**。
虽然ETAS的ISOLAR-A/B自身也存在FEE模块,但是很多时候芯片厂商可能更多推荐使用其MCAL中自带的FEE模块,以便能够提高Flash芯片的使用效率,本文将以最为常见的英飞凌(Infineon) TC3XX 芯片的MCAL为例来讲解下如何将Infineon FEE模块集成到目标工程中。
在进行下列集成操作之前,请确保当前已存在Memory Stack可用的ISOLAR-A/B工程,后面小T将手把手带大家集成IFX FEE模块以替代RTA-CAR FEE模块。
使用过ISOLAR-A/B的小伙伴可能知道RTA-CAR FEE模块有个特点,其FEE的配置基本上NVM配置好之后,便可以通过RTA-CAR ConfGen的方式来自动化生成。
值得需要注意的是即使你不使用ISOLAR FEE模块,RTA-CAR工程也必须包含FEE模块,这是因为整个Memory Stack存在着诸多的依赖关系(Memif,NVM),你可以将此时的FEE模块作为一个Stub 模块的存在,在生成整个BSW代码的过程中,你也会同步生成FEE模块,不过在目标工程中不要集成该RTA-CAR对应的FEE模块即可。
在EB Tresos工程中可以添加如下英飞凌IFX FEE模块,FEE中的配置需要跟RTA-CAR FEE中的配置保持一致,也就意味着就需要在Tresos工程中配置RTA-CAR FEE模块中相同的选项以及对应的FEE模块属性。
完成上述MCAL中的FEE配置后,便可以在Tresos工程中生成对应的BSW代码,该BSW代码中将包含Fee_PBcfg.h 与Fee_PBcfg.c 文件。
由于目标工程中将不会使用RTA-CAR FEE模块,存在如下两种方式来确保集成的Ifx FEE模块:
由于RTA-CAR中的MemIf模块总是依赖一些FEE模块中的一些自定义函数,而这些自定义函数在英飞凌 MCAL中并不存在,因此有必要添加相应的桩函数如Fee_Rb_XXX来完成相应的软件集成。
为了检查MemIf到底存在哪些依赖FEE模块的自定义函数,可以通过RTA-CAR生成的MemIf代码中找到MemIf_Cfg.h 文件,然后检查其相关的自定义函数:
以如下Fee_Rb_VarLenRead桩函数为例:
在Ifx FEE模块中添加一个Stub文件,在该文件中添加上述自定义函数的空定义,同时将该文件包含到 MemIf_MemMap.h中,防止出现包含错误或者未定义错误。
通过Tresos工程生成的代码仅仅是FEE模块的配置代码,该模块对应的FEE静态代码也需要同步集成到目标工程中,以如下目标工程为例,相关的TC3XX MCAL静态代码将放入到如下文件夹中。
当然除了添加FEE模块自身源代码之外,可能需要注意添加相关的FEE代码文件,如MemMap文件,该文件也可以在MCAL安装包中搜索到,一般文件名为 Fee_MemMap.h。
至此,按照上述步骤完成集成之后就已经将英飞凌Ifx FEE模块成功集成到目标工程了,如果此时还出现编译错误,那么需重点检查如下几个方面:
更多精彩最新内容,欢迎大家多多关注小T公众号“ADAS与ECU之吾见”。