引言
作为ECU软件程序和标定数据的存储方法,自从Flash存储技术被引入到MCU的设计之后,ECU软件更新的大门正式开启,Flash存储器结束了早期采用ROM存储技术时,要更新ECU功能只能将原有ECU从车上拆卸下来,使用新的ECU替换的历史,大大节约了成本。目前仍然是MCU上存储ECU软件程序和标定数据的主要载体。
经典的ECU Flash空间划分
为了缩短软件更新的时间,减少Flash的擦写次数而延长MCU使用寿命,行业领先的ECU供应商根据Flash存储器的特点,很早就设计了一种经典的ECU Flash空间划分方法,至今仍在广泛应用。如下图所示。
其中启动模块指MCU出厂时内部自带的程序(参考#Infineon Tricore系列芯片自带启动软件运行逻辑分析 ),它通常采用ROM存储,用户不可修改。我们重点看下后面的三个Flash片段。
这种设计至少有以下三个优点:
包含引导模块自更新的软件更新全过程
针对程序版本和标定数据的ECU软件更新过程各家OEM都有自己的企标,业内很多人已相对比较熟悉,然而对于引导模块的自更新的方法通常介绍较少,而这一需求是软件更新时为保证可靠性所必须具备的,因此本文重点对这部分进行描述。
简单来说,在更新引导模块时,必须先对引导模块进行备份,将其复制到Flash中的另一块地址。这样,即使软件过程出现失败,也可重新启动软件更新过程,而不至于变成“砖头”。不过,这也意味着需要对启动模块进行重定向(Relocate),而这需要MCU芯片特性的支持,如Tricore系列芯片提供的ABM启动模式(参考#Infineon Tricore系列芯片自带启动软件运行逻辑分析 )。
下图展示了启动模块自更新的具体过程:
主要有三个步骤:
完成启动模块的自更新后,就可以对程序版本和标定数据进行更新了,这部分较为常规,不在赘述。
以上方法是本文参考资料《汽车软件工程》中介绍的,实际开发过程中,不一定完全照搬,可根据实际情况进行设计,比如可以先将旧的启动模块被分到Flash片段C,而不是备份新的启动模块,同样的,也不一定要备份到Flash片段C,备份到其它位置也未尝不可。
《汽车软件工程——原理,过程,方法,工具》,【德】,张聚等译