何与舟,王东升
(航空工业南京机电液压工程研究中心 电子工程部,江苏 南京 211106)
航空机电控制器软件部署在航空飞行器内各机电控制器中,当控制器交付装机后,可能需要消除新发现的缺陷或进行系统需求变更,常常需要进行软件升级。传统的升级方法是将控制器从航空飞行器上拆卸下来、开盖、连接仿真器重新烧录软件,该方法操作复杂、维护效率低,且存在对控制器造成破坏的风险。
本文通过对多种航空机电控制软件升级策略、BOOT方式、文件格式等进行比较和分析,研究出一套利用航空机电控制器现有通信接口,通过通信数据处理、配置项ID确认、程序升级指令判定、应用程序固化、校验、重传、标志擦除等机制实现软件原位在线升级的方案,试验效果较好。
从在线升级软件功能与应用软件的相对逻辑关系来分,常见的软件在线升级策略有如下三种:
策略一:将在线升级软件(BOOT软件)与应用软件分别存储在不同的存储器中,通过硬线开关选择处理器运行的程序存储器,若是要运行应用程序则选择应用软件存储器,若是要进行在线升级则选择BOOT软件存储器,升级设备通过与BOOT软件的交互实现应用软件的在线升级。该策略优点为BOOT软件与应用软件完全解耦,没有任何交联,方便进行独立的维护和管理;缺点是需要为在线升级功能增加额外的硬件存储器,同时,通过单根外部硬线选择执行程序存储器的方法可靠性低,若该硬线上存在干扰,将导致软件运行出现不可预知的结果,且该隐患在控制器整个上电期间一直存在。
策略二:将BOOT软件作为功能模块嵌入到应用程序中,当需要进行软件升级时,调用该功能模块,擦除原有程序,并通过通信接口接收更新的程序,固化到存储器中。该策略的优点为无需增加额外的硬件开销,将BOOT软件与应用软件整合为单一软件,实现简洁,维护管理方便;缺点为应用软件中包含擦除自身软件的功能,存在安全隐患,另外,升级若失败,下电后将无法再次进行在线升级,只能通过开盖、用仿真器JTAG接口重新烧录软件,因此,策略二在实施上可靠性较弱。
策略三:将BOOT软件与应用软件作为独立的软件,但存储在同一片存储器的不同区域,当需要在线升级时,升级设备通过通信接口与应用软件进行交互,应用软件检测到新的在线升级请求后,设置在线升级标志,并重启处理器进入BOOT程序,BOOT程序检测到升级标志后,将停留在BOOT程序中,并通过通信接口完成软件在线升级。与策略一、二相比,该策略不增加额外硬件负担,实施方法可靠、稳定。本方案选择第三种升级策略。
策略三中提及的BOOT软件有两种实现方式,一种是采用芯片厂商自带的BOOT软件,另一种是完全自主开发。
芯片自带的BOOT软件一般支持RS422、CAN、IIC等多种升级方式,通过在处理器上电瞬间配置IO管脚的不同状态来选择升级方式,省去了BOOT软件的开发工作,只要满足其通信协议即可实现软件的在线升级,但升级协议和升级机制均只能按照其固定逻辑进行。在实际应用过程中,无法灵活满足各种应用场景的需要,尤其是对硬件看门狗喂狗的不支持,常常会给使用芯片自带BOOT进行软件升级带来挑战。
为了解决芯片自带BOOT在使用过程中存在的问题,本方案选择开发自主BOOT软件,虽然增加了工作量,但带来的好处也是显而易见的。首先,可以满足任何场景的在线升级需要,利用控制器现有通信接口即可进行升级;同时在机制上也更加灵活,可以选择在任意时间点、以认为的更加安全的方式进行软件在线升级。
常见的嵌入式IDE工具生成的目标文件格式多为ELF、OUT等,比如Code Composer V5.5使用的是OUT格式,由于对上述格式文件的解析太过复杂,因此在线升级软件过程中使用较多的文件格式为HEX文件或者BIN文件。
HEX文件格式的缺点是可能出现中间地址不连续的情况,这就导致在做程序校验时,相同的程序逻辑有可能出现不一样的校验结果。而BIN文件相较于HEX文件,更加直白和简洁,在FLASH中存储的数据是什么,BIN文件保存的数据就是什么,在整个升级过程中,无需额外的文件解析工作,收到的文件数据就是程序文件。本方案中的升级文件采用BIN文件格式。
航空机电控制器在线升级软件通过RS422接收上位机(升级设备)发送的升级指令和待升级的应用软件代码文件,将该代码固化到DSP中,实现对控制器应用软件的在线升级,并向升级设备上传控制器在线升级过程中的实时状态,如图1所示。
图1 航空机电控制器在线升级原理图
系统模式设计见表1,其转换关系如图2所示。
图2 模式转换图
表1 系统模式
软件在线升级具体流程如下:升级设备通过RS422将升级指令发送给控制器的应用软件;应用软件接收到在线升级指令后,将在线升级标志(OFP)置为有效并复位;复位后先运行BOOT软件,BOOT软件识别到OFP标志有效后,停留在BOOT软件中,查询升级设备发送代码中的软件配置项标识(CSCI ID),如果不是本控制器的代码则空等待,如果是本控制器的代码则擦除原先旧的应用程序代码,并把待升级的应用程序代码固化到控制器的DSP中。
BOOT软件在升级过程中,将升级的状态实时地通过RS422上传给升级设备。升级完成后,升级设备发送退出在线加载状态的指令,BOOT软件接收到该指令后,清除OFP加载标志并等待下电,重新上电后运行应用软件。
BOOT软件的跳转流程如图3所示,加载程序流程如图4所示。
图3 BOOT软件跳转流程
图4 加载程序流程
升级设备和控制器之间的通信采用RS422方式,8位有效位,1位校验位,1位停止位。升级文件目标码格式采用BIN格式。升级设备与控制器的通信帧格式如表2、表3所示。
表2 升级设备发送给控制器的通信帧格式
表3 控制器回传给升级设备的通信帧格式
在线升级软件采用多重校验的方法保证数据的可靠性。在数据传输过程中,对每包数据进行校验和验证。另外,为保证整个软件升级过程中的一致性,升级设备将待升级软件的CRC16校验码发送给控制器,控制器在升级过程中计算CRC16校验码,并与升级设备发送的校验码比对,如果一致,则升级成功;否则重新执行在线升级。
通过升级设备对航空机电控制器软件进行在线升级测试,运行结果见图5。在升级设备依次执行选择程序、配置端口后,向控制器发送升级程序。升级过程中,升级设备接收到控制器升级软件回传的“传输中”、“传输成功”、“固化中”、“固化成功”、“校验中”、“校验成功”等信息。经过检查,升级软件接收到的配置项ID、CRC校验码均与升级设备发送的一致,控制器软件升级成功。
图5 在线升级运行结果
本文研究并实现了一套利用航空机电控制器现有通信接口,不额外增加硬件,通过通信处理以及ID和指令确认、固化、校验、重传等程序结构设计,实现航空机载软件原位在线升级的方案,极大地方便了软件升级工作,节省了维护成本。该方案通用性高,多重数据校验等安全性设计保障了升级软件的可靠性和准确性,目前已在多型飞行器上应用,具有良好的应用前景。