当前位置:首页 期刊杂志

基于实时操作系统的车载ECU 双分区软件空中下载升级技术

时间:2024-06-19

周 恒, 梁贵友, 柳 旭, 张建平, 周时莹, 王 腾, 马 骉

(中国第一汽车集团有限公司 智能网联开发院,长春 130013)

随着汽车智能化、网联化的发展,OTA功能已成为智能网联汽车发展的必然趋势[1-3]。常见OTA升级架构是云服务器端通过TBOX 将升级包下载至车端缓存,由升级主控节点对网络架构中控制器按照刷写流程进行升级更新[4-5]。陈祖锐等[6]采用将升级程序直接刷写在应用程序分区的升级技术,其局限性在于当应用程序升级失败后,原分区里的程序已被擦除导致没有程序可正常运行,控制器将始终处于引导加载程序(Boot Loader)中无法正常工作。针对没有可执行的回滚程序问题,王栋梁等[7]采用在网关内部Flash 中存储当前版本的技术,当升级失败时网关会调用Flash 中的软件再次进行刷写,此技术只针对RTOS传统实时操作系统的控制,并且存在网关内存空间大且回滚逻辑繁琐的缺点。严娟等[8]针对网关自升级将Flash 划分为两个相同区域,两者功能上完全一样互为备份,升级时只针对其中一个区域进行升级,失败时利用另一个区域进行回滚,但是只针对Linux、QNX 和安卓等智能操作系统的控制器,RTOS 传统控制器并没有此类升级技术。

因此,针对现有RTOS 控制器只有1个分区[9],且升级失败造成无程序可回滚的问题,提出了一种双分区升级技术[10-11]。考虑控制器内存空间大小不同,设计了同面启动和异面启动升级技术。

该技术具有以下贡献:

(1)针对如何管理分区的问题,设计了启动信息用于标识双分区属性信息,选择对应的分区进行刷写升级、启动或回滚;

(2)在原芯片的基础上通过外扩存储器实现同面启动的双分区升级技术,避免了芯片重新选型及硬件设计,减少了开发的工作量;

(3)设计了一种新的升级包选择下载、安装启动及回滚的异面启动双分区升级技术,优化了升级包制作和刷写流程,可以快速实现分区切换和软件回滚。

1 双分区定义

1.1 存储空间分区

双分区控制器除了引导加载程序分区外,一般需要激活分区(Active Slot)存放当前执行应用程序,备份分区(Backup Slot)存放回滚旧版本程序,此外,还需要一个启动信息(Slot Info)分区,用于存储激活分区和备份分区的相关属性信息,硬件存储空间如图1所示。

1.2 控制器启动方式

引导加载程序需要根据启动信息来判断当前激活分区并引导启动对应的应用程序。该启动信息将在应用程序的有效性判断、下载刷新完成或版本回滚时进行必要的状态切换。启动信息关键属性见表1。

表1 启动信息关键属性

1.3 升级包的组成

对于纯软件实现双分区的控制器,一般会有两个起始地址不同的应用程序分区,升级时需要两个功能相同但起始地址不同的应用程序。将两个不同地址的应用程序通过编译合并后,生成一个大小为两个程序分区的文件用于控制器的选取升级,如图2所示。

图2 双分区升级包组成

2 双分区升级技术

2.1 同面启动升级技术

同面启动升级技术要求每次下载刷新及启动始终在片内Flash 的激活分区进行,设计的升级技术流程如下。

(1)控制器默认出厂设置时激活分区和备份分区的软件版本一致。

(2)控制器收到主控节点发送的0x31 01 FF 00擦除程序区指令时[13],需先对比激活分区和备份分区程序版本号,如果不一致则需将激活分区中的程序复制到备份分区中。外扩存储器升级包下载流程如图3所示。

图3 外扩存储器升级包下载流程

(3)升级包下载刷新到激活分区后,启动信息属性信息更新,控制器会先判断激活分区程序有效性,如果激活分区程序有效,启动激活分区程序,并上报本次OTA任务升级成功。

(4)当激活分区程序无效或安装失败时,利用备份分区程序复制到激活分区实现软件版本回滚,升级流程及启动信息属性更新变化如图4所示。

图4 同面启动升级流程

2.2 异面启动升级技术

异面启动是目前主流升级技术,控制器内存空间满足双分区要求,主要分为基于SWAP AB 和基于非SWAP AB的双分区升级技术。

2.2.1 基于SWAP AB技术的下载流程

SWAP AB 技术是指利用地址重映射技术[13-15]将激活分区和备份分区的物理内存地址进行互换,保证了激活分区的地址始终保持固定,所以升级的重点在于如何管理下载刷新和分区切换,设计的升级下载流程如下。

(1)主控节点根据0x34 请求下载服务的起始地址和字节数,将升级包下载刷新到备份分区。

(2)当升级包下载完成且校验通过后,启动信息属性更新。

(3)控制器在进行重启或升级失败回滚时,利用SWAP AB 技术将备份分区地址与激活分区地址互换,其下载流程如图5所示。

图5 基于SWAP AB技术升级包下载流程

2.2.2 基于非SWAP AB技术的下载流程

所谓非SWAP AB 技术是指控制器硬件上不支持两个物理内存地址的互换,而且控制器的激活分区和备份分区起始地址不同,所以设计的升级技术下载流程如下。

(1)由于控制器激活分区是Slot A 还是Slot B只有控制器可知,所以主控节点内必须包含两个内存地址的升级包,升级包制作过程如图2所示。

(2)在主控节点发送0x31 01 FF 00 擦除指令前,控制器需将启动信息中备份分区的起始地址发给主控节点,由此确保擦除程序是备份分区程序。

(3)擦除成功后,由主控节点判断选择哪部分程序属于备份分区并进行下载刷新。

(4)当升级包下载完成且校验通过后,重启或升级失败进行软件回滚时,启动信息中激活分区和备份分区状态互换,下载刷新过程及启动信息状态变化如图6所示。

2.2.3 异面启动升级流程

升级包刷新成功后再判定激活分区程序有效性,如果激活分区中程序有效,则从激活分区启动执行;如果程序初次判定无效,再次尝试判断,当重复次数达到最大时说明程序无效,需要进行程序回滚。

在进行程序回滚时,控制器需先判断备份分区中的程序有效性,当判定无效次数达到最大时,则回滚失败,控制器功能失效;如果备份分区中程序有效,更新启动信息属性并启动回滚后的激活分区程序。具体异面启动升级流程如图7所示。

图7 异面启动升级流程

3 测试与验证

3.1 测试系统

双分区升级技术测试环境主要分为ECU和上位机诊断仪系统[16-17],系统框图及实物分别如图8~9所示。两系统之间通过USB1、USB2接口进行数据传输模拟主控节点刷新下载,其中,ECU侧有一个KEY 按键控制LED 的闪烁,用于指示app的运行情况。其中,USB1 用于引导加载程序的升级,USB2用于app中的通信。

图8 双分区升级测试框图

图9 双分区升级测试实物

采用STM32H7 系列芯片验证升级技术,其内部Nor Flash的存储空间分区配置见表2。

表2 存储空间分区配置表

3.2 测试验证方案

针对双分区与传统分区升级技术的差异点,设计测试用例时需要重点考虑升级异常时程序回滚功能的有效性、双分区运行的稳定性等,测试类型主要分为正常系和异常系,主要测试用例及方法见表3。

表3 测试用例及方法

测试时先通过搭建的测试系统验证单控制器升级回滚情况,通过后将开发的双分区升级控制器安装到实车上,利用目前上线运营的OTA整套升级系统,以及布置多控制器升级包来验证实车环境下失败程序回滚功能。

3.3 验证结果

根据上述测试内容和方法,利用搭建的系统及实车测试验证结果(表4),每项测试内容至少需要正向测试50 次,且每次测试结果都满足要求才能证明该项功能正常。

表4 双分区升级技术测试内容及结果

测试结果表明,利用启动信息进行分区管理,解决了升级启动分区选择问题;针对外扩存储器不能启动执行的问题,提出软件复制备份的回滚机制,实现了双分区升级技术;针对异面启动中升级包下载的问题,提出备份分区信息读取选择下载技术,解决了下载的升级包与分区不对应的问题。因此,上述技术解决了整个双分区OTA升级流程中的技术难题,实现了RTOS控制器双分区升级。

4 结论

本文提出了车载ECU 双分区升级技术,介绍了同面启动和异面启动的升级刷写流程,通过开发测试系统验证了该技术的有效性,得到的结论如下。

(1)对比异面启动升级中的两种技术,发现具有SWAP AB 技术的芯片实现双分区升级技术的开发较简单,升级包传输时间更少,同时也减少了主控节点的判断逻辑。目前,多数芯片都支持SWAP AB 技术,建议推广使用基于SWAP AB 的异面启动升级技术以实现控制器双分区升级。

(2)同面启动升级中升级前备份或回滚时需要程序进行复制,导致升级过程时间比较长,带给用户体验不如异面启动升级技术,但是其优点在于可基于原芯片实现双分区升级技术,无需重新选型开发。

(3)通过对测试系统及实车不同控制器进行大量的升级测试,验证了控制器双分区升级系统的稳定性和回滚时分区切换的有效性,同时得出控制器升级失败的回滚成功率为100%。因此,该技术的应用从根本上解决了因OTA升级失败而导致车辆控制器功能失效的问题。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!