基于车载控制器BootLoader 的数据备份刷写软件方案实现
2022-11-07陶媛媛
陶媛媛,杜 彬,田 彬
(陕西重型汽车有限公司汽车工程研究院,陕西 西安 710200)
汽车电子领域的ECU(Electronic Control Unit,电子控制单元)大多为普通单片机,其BootLoader(简称BT)主要负责应用程序的升级。随着智能网联汽车时代的不断发展,ECU软件可以通过OBD(On Board Diagnostics,车载诊断系统)接口,利用总线通信,将升级包传输给BootLoader进行写Flash操作,完成程序升级,也可以通过OTA(Over the Air Technology,空中下载技术)进行远程程序升级。
在程序升级过程中,可能会出现一些问题,导致应用软件或数据不能正常使用,如程序更新流程意外终止,软件数据包与ECU不匹配等,此时会影响到车辆功能的正常使用,降低整车性能。为防止出现问题时ECU的基本功能失效,本文采用一种基于车载以太网的数据备份刷写策略,实现恢复上一版本软件和数据的功能,解决ECU功能异常问题,提升车载控制器性能。
1 备份刷写方案及实现
备份刷写的方案实现主要包括Flash区域划分和不同情况下的数据备份流程。
1.1 Flash区域划分
为了实现异常情况的数据备份升级,该策略要求ECU的Flash区域容量至少为应用程序的2倍,将Flash区域划分为两块完全独立的空间,NA(Normal Area)和SA(Spare Area),NA为软件正常运行的区域,SA为NA程序和数据的备份区域。以Infineon TC299芯片为例,BootLoader、NA和SA软件数据的内存分配如图1所示。
图1 软件数据内存分配方案
应用程序运行在NA区,SA区作为NA区的备份,可以将软件和数据从SA区回滚到NA区。此方案不受硬件的限制,并且应用程序设计时无需考虑位置无关代码的设计,不受硬件或编译器的限制,通用性强。
1.2 数据备份流程
Flash的NA区和SA区均是独立的区域,可以存储完整的APP程序,根据备份刷写方式,将数据备份流程分为自动回滚和手动回滚,以下分别针对这两种方式详细介绍备份流程。
1.2.1 自动回滚
自动回滚方案适用于升级意外中断情况,加入自动回滚后,每次上电或复位,系统先运行BootLoader程序,判断程序更新标志位是否有效,若无效,则在NA区运行APP程序;若有效,则执行BT刷写流程。进入BT刷写流程,判断NA区软件数据标志位APP_NA_Flag是否有效,若有效,则先将NA区数据备份到SA区,然后擦除NA区数据,下载NA区刷写文件,刷写升级完成后将APP_NA_Flag置为有效,运行APP程序;若APP_NA_Flag无效,则判断APP_SA_Flag是否有效,若无效,则停留在BootLoader程序中,若有效,则将SA数据拷贝到NA区,然后执行擦除NA区以及后续步骤,最后运行APP程序,具体流程如图2所示。
图2 自动回滚流程
程序升级出现中断时,ECU持续监测总线报文,若5s内总线无任何操作,APP_NA_Flag置0,为无效,ECU会产生复位,断电或上位机的复位请求也可以使ECU产生复位。重新上电或复位后,系统从BootLoader程序开始运行,由于上一次的升级被中断,此时系统会按照自动备份回滚流程,将SA区域的程序数据回滚至NA区,实现数据恢复。
1.2.2 手动回滚
手动回滚适用于控制器可以正常更新软件数据,但当前更新版本为测试版本或者出现功能问题需要恢复到上一个软件版本的情况,此时,新的应用程序和数据已经被成功刷写到NA区,程序可以正常运行在NA区。
手动回滚流程如下:上位机设置手动回滚,执行刷写流程,收到启动手动回滚例程请求后,将手动回滚标志位FlashMode置1,执行复位,复位后检查手动回滚标志位FlashMode有效,判断APP_SA_Flag是否有效,若有效,则将SA区的数据备份回滚到NA区,若无效,则系统重启。手动回滚成功后NA区有效,复位后BootLoader将引导运行NA区软件,具体流程图如图3所示。
图3 手动回滚流程
2 台架测试及环境搭建
搭建台架测试环境,通过车载以太网DoIP协议的Boot-Loader刷写流程,验证控制器程序备份回滚机制。
对本次设计的备份刷写方案进行测试。给控制器ECU上电,将BootLoader引导程序刷写进控制器中,然后通过通信设备将控制器下位机与电脑端的上位机进行通信连接,完成程序的升级更新。
测试的软硬件环境及工具如表1和图4所示。
图4 测试环境
表1 软硬件测试工具
本次测试基于控制器车载以太网DoIP协议,在电脑端用上位机模拟诊断仪对控制器ECU进行BT刷写,同时通过Wireshark抓包的方式记录BootLoader刷写流程log,对测试log进行分析,验证自动回滚和手动回滚机制。
3 测试数据分析
3.1 自动回滚
为保证ECU能正常工作,控制器需要自动开启回滚功能,自动回滚功能的开启需要满足两个条件。
1)程序更新过程中遇到问题,如旧程序擦除成功后升级流程中断,完整性校验或兼容性校验失败,检测到内存溢出报出错误等。
2)遇到问题后5s内未收到任意诊断报文。
以完整性校验不通过为例,如图5所示,应用程序已刷写至ECU中,通过31服务检查编程完整性时得到否定响应,CRC校验失败,自动启动回滚流程,将SA区的程序拷贝至NA区,进行备份程序的刷写,刷写成功后someip报文正常收发,自动回滚完成。
图5 完整性校验失败后自动回滚
3.2 手动回滚
手动回滚功能的开启需要手动设置回滚标志位,程序刷新完成后,遇到应用功能错误、软件版本错误或程序测试完成后需要对控制器进行恢复等情况时,开启手动回滚功能使控制器中程序回滚到上一版本。
以软件版本不正确为例,如图6所示,程序刷写成功后,判断软件版本错误,需开启手动回滚功能,ECU在收到启动回滚例程请求:31 01 F5 1A后,设置手动回滚标志位FlashMode为1,执行手动回滚操作,手动回滚成功后控制器回到上一版本的程序,报文可正常收发。
图6 软件版本不正确后手动回滚
测试结果表明:本文设计的程序备份升级方案,能够根据不同的情况实现自动回滚和手动回滚功能,保证控制器应用功能正常。
4 结论
本文基于车载控制器BootLoader设计了一种数据备份刷写方案,并搭建测试环境记录测试数据进行分析验证。结果表明:该方案可以实现自动回滚和手动回滚功能,能够解决ECU的功能异常问题,极大提高了控制器的稳定性。