APP下载

应用以太网总线的嵌入式软件远程升级系统设计及实现

2022-11-09李浩张亚琳关冰

微型电脑应用 2022年10期
关键词:嵌入式软件下位二进制

李浩, 张亚琳, 关冰

(1.中国运载火箭技术研究院, 北京 100076;2.北京时代民芯科技有限公司, 北京 100076)

0 引言

随着物联网和5G等技术的发展,嵌入式软件的应用场景也越来越广泛,承担的功能也越来越复杂,软件交付后也可能需要进行功能升级[1-2]。以DSP(digital signal processing)为代表的嵌入式软件开发,通常采用基于JTAG(joint test action group)的仿真器连接升级模式[3],这种方法在实验室环境下应用比较方便,但是在软件固化到嵌入式硬件平台后维护比较复杂,操作非常不便,必须将硬件平台进行拆装后再进行升级,明显增加了运维的成本。

本文针对嵌入式软件远程升级的需求,设计基于以太网总线的远程升级系统,只需要1台笔记本就可以在不拆装硬件平台的前提下实现软件升级。考虑嵌入式软件升级过程的可靠性与稳定性,设计指令-回令确认及三次重传机制解决升级过程中可能出现的丢帧、错帧和乱帧问题,设计有限状态机及分区存储机制保证升级失败系统也可以正常启动,在保证软件升级速度的同时显著提升可靠性。此外,设计上位机软件对升级过程进行可视化监控,操作更加便捷。

1 总体方案设计

基于以太网总线的嵌入式软件远程升级系统由上位机、交换机和下位机3部分组成,拓扑结构见图1。系统的通信中枢是交换机,用于上位机与不同下位机之间指令、回令的传输。系统的发起方是上位机,通过参数配置后开始嵌入式软件的远程升级,并对升级的过程进行实时监控。系统的接收方是下位机,接收到上位机的升级指令后进行状态迁移、指令校验和升级实现。

图1 远程升级系统拓扑结构

需要说明的是下位机运行的嵌入式硬件平台中至少有一个版本的下位机软件,远程升级系统才能正常运行。当某下位机嵌入式软件需要升级时,上位机软件选择最新版本的软件,通过交换机将软件分包传输到下位机,下位机校验通过后将软件存储到Flash中。升级后系统可以选择将固化到Flash的软件回读到上位机,用于进一步的校核确认。系统重启后,如果升级成功,下位机将运行最新版本的软件,否则将运行上一版本的软件,基于以太网总线的远程升级过程如图2所示。

图2 基于以太网总线的远程升级过程

系统中上位机、交换机及每一个下位机都具有独一无二的IP地址和端口,在系统中作为唯一的ID用于身份识别,本文设计的系统中有1个上位机、4个下位机及1个交换机。具体分配的IP地址及端口如表1。

表1 远程升级系统地址分配表

2 总线协议设计

设计上位机与下位机之间的通信协议,采用实时性更高、基于无连接服务的UDP通信协议,除了帧内容区中包含有效数据外,还增加了帧头、帧尾、校验和等确认位域以实现对总线通信链路错误的检测,采取指令-回令的协议应答机制作为超时重传的通信协议基础,采用分包机制对大数据量的二进制文件进行传输。以太网协议的指令格式见表2,回令格式见表3。

(a) 帧头:固定帧头为0x5A5A5A5A,用于判断帧的开始;

(b) 帧长度:本帧的数据长度;

(c) 帧类型:本帧的数据类型,其中0表示升级第一帧,1表示升级中间数据帧,2表示升级最后一帧,3以上标识其他类型;

表2 以太网协议-指令

表3 以太网协议回令

(d) 二进制文件的大小:待升级软件的大小,单位是B,帧类型的值为0~2时有效;

(e) 二进制文件的时间:待升级软件的最后修改时间,比如2107151057表示2021年7月15日10点57分,帧类型的值为0~2时有效;

(f) 二进制文件的类型:待升级软件的类型,0表示Core0软件,1表示Core1软件,以此类推,帧类型的值为0~2时有效;

(g) 二进制文件的CRC:待升级软件的校验码,本文采用CRC16的方式进行校验,帧类型的值为0~2时有效;

(h) 帧号:当前帧的编号,帧类型的值为0~2时有效;

(i) 帧内容区:通信协议帧的具体内容,帧类型的值为1时有效,固定长度1 200 B,采用分包传输的方式传输二进制文件,最后一帧不满1 200 B的部分填充为0,回令的帧内容区含义为对指令的内容和升级的过程进行判断,固定长度是4 B,状态码的具体含义见表4;

(j) 帧校验和:对本帧数据前N-4个字节进行CRC校验,采用CRC16的方式进行校验;

(k) 帧尾:固定帧尾为0x6B6B6B6B,用于判断帧的结束。

表4 状态码设计

3 上位机软件设计

3.1 界面设计

利用LabWindows/CVI开发平台设计上位机监控软件,该平台的优点是控件资源丰富,具备很好的虚拟仪器工具支持,支持C语言开发,广泛应用于测控领域[4]。上位机界面主要由以下几部分组成:初始化基本设置、XML配置、文件选择、运行状态、接受内容、发送内容、数量统计、返回上级。上位机软件界面如图3所示。

图3 上位机软件界面示意图

(a) 初始化基本设置主要完成上位机IP地址和端口、下位机IP地址和端口、Internet地址族和传输层协议栈的设置;

(b) XML配置用于远程升级总线协议的加载、修改和保存,通过配置XML文件可以在不改变软件代码的情况下实现通信协议的改变,XML的部分内容如下:

〈Number id="01"〉

〈Name〉帧头〈/Name〉

〈Length〉4〈/Length〉

〈DefaultValue〉5A5A5A5A〈/DefaultValue〉

〈/Number〉

(c) 文件选择用于待升级的软件和需要回传的软件绝对目录的选择;

(d) 进度条是对远程升级的进度进行监控;

(e) 运行状态是对远程升级的状态进行监控;

(f) 接受内容是对接收的协议数据进行显示;

(g) 发送内容是对发送的协议数据进行显示;

(h) 数量统计是对发送的协议帧和接收的协议帧数量进行显示;

(i) 返回上级是返回上级目录。

3.2 流程设计

当用户完成嵌入式软件的文件选择,点击装订按钮后,主要执行如下流程:

(a) 打开嵌入式软件的二进制文件,获取软件的大小、时间、类型及CRC信息,读取文件中的二进制数据到缓存区;

(b) 根据第2节设计的总线通信协议完成第一帧的组帧,采用超时重传的方式发送第一帧,确保传输的可靠性,具体重传过程见图4;

(c) 开始中间数据帧的组帧和发送,发送方式与第一帧相同;

(d) 开始最后一帧的组帧和发送,发送方式与第一帧相同;

(e) 升级过程中异常信息在状态栏进行打印,升级的进度条根据当前发送的帧数实时更新。

图4 基于以太网的指令-回令-结果超时重传流程图

4 下位机软件设计

4.1 有限状态机设计

采用有限状态机的设计理念描述下位机嵌入式软件的工作流,利用有限状态机的事件触发转移机制,根据不同的测试指令完成状态的迁移[5],设计下位机软件的工作过程。状态机实现的过程要点如下:

(a) 状态:软件当前所处的阶段称为状态,包括初始状态、终止状态及其他可能处于的阶段;

(b) 事件:触发状态发生迁移的条件称为事件,当事件发生时,软件会响应事件,发生状态迁移,从当前状态迁往新状态;

(c) 动作:软件状态迁移后执行的工作称为动作,动作执行完毕后,可保持当前状态,也可以迁移到新状态;

(d) 状态机:从初始状态开始,到终止状态停止,连接软件的所有中间状态,并标注事件和动作,这样的状态转移过程称为状态机。

根据下位机嵌入式软件的系统功能,设计实现了5个动作、7个事件、5种状态,并形成1个状态机,具体内容如图5所示。

图5 下位机软件状态机

(a) 动作1:进行软件及硬件初始化;

(b) 动作2:进行以太网指令解析;

(c) 动作3:进行业务逻辑处理;

(d) 动作4:执行下位机软件的升级;

(e) 动作5:进行异常处理和状态上报;

(f) 事件1:动作1完成;

(g) 事件2:以太网指令解析结果是非升级指令;

(h) 事件3:业务逻辑后T,本软件设置为120 s;

(i) 事件4:以太网指令解析结果是升级指令;

(j) 事件5:与事件4相同;

(k) 事件6:检测到系统异常,如栈溢出、内存越界访问等;

(l) 事件7:与事件6相同;

(m) 初始状态:下位机软件启动后的状态,执行动作1,检测到事件1时迁移到空闲状态;

(n) 空闲状态:下位机软件等待工作指令的状态,执行动作2,检测到事件2时则迁移到工作状态,检测到事件4时则迁移到升级状态;

(o) 工作状态:下位机软件执行业务逻辑的状态,执行动作3,检测到事件3时则迁移到空闲状态,检测到事件5时则迁移到升级状态,检测到事件6时则迁移到终止状态;

(p) 升级状态:下位机软件进行软件升级的状态,执行动作4,检测到事件7时则迁移到终止状态,为了保证升级过程中不被干扰,软件进入升级状态时只执行升级动作,不进行业务处理,只能迁移到终止状态,不能迁移到工作状态和空闲状态;

(q) 终止状态:下位机软件出现异常时的状态,执行动作5,终止状态不进行任何状态的迁移;

(r) 状态机:上述的状态、事件、动作及状态转移过程。

下位机软件开发时可以采用基于裸机或者基于实时操作系统的设计模式:如果是基于裸机,在以太网中断中获取信息并进行判断,通过置标志的方式实现主循环不同状态的迁移;如果是基于实时操作系统,在以太网任务中获取信息并进行判断,通过信号量或者消息队列等方式实现不同状态任务的迁移。

4.2 主备分区设计

嵌入式软件升级的Flash分区有2种方案:第一种是直接覆盖,第二种是主备分区。第一种方案在进行软件升级时,先把二进制文件缓存在到DDR存储器上,完成校验后烧写到Flash,并将上一版本的二进制文件覆盖。该方案的优点是占用存储空间少、流程简单,但是也存在可靠性不高的问题:如果在软件升级过程中因为外部干扰导致升级异常,在重新上电后嵌入式软件将无法正常启动,并无法与上位机通信,只能用传统JTAG(joint test action group)挂接仿真器的方式升级软件,带来额外的工作。第二种方案是在进行软件升级时,先把二进制文件缓存到DDR存储器上,完成校验后烧写到Flash,但是保留上一版本的二进制文件,将最新的软件烧写到备分区。该方案的确定占用存储空间大、流程复杂,但是能够在升级出错的情况下正常启动,可靠性显著提高。

对2种方案的优劣势进行分析,本文采用主备分区的方案对存放二进制文件的Flash空间进行了重新编排,如图6所示。在Flash存储区之后设计了3个二进制文件存储区,其中:一个存储区用于存放当前要启动的最新二进制文件,称为主分区;一个存储区用于存放上一版本的二进制文件,称为备分区;一个存储区用于存放第一次烧写的二进制文件,称为零分区。主分区和备分区存放内容不是一成不变的,将随着软件的更新而动态交替变化。此外,单独设计一个参数存储区,供Boot Loader程序识别哪个是主分区,哪个是备份区,是否需要启用零分区,便于嵌入式软件的引导。

图6 下位机FLASH存储布局

当Boot Loader引导主分区文件失败后,将寻找备分区的文件进行引导,如果再次引导失败,将寻找零分区的文件进行引导。通过主备分区、异常检测及主动回滚机制,当嵌入式软件升级过程遇到了异常时,也可以正常实现软件的引导,显著提高了软件远程升级的可靠性。

4.3 升级流程设计

下位机软件进入到升级状态后,工作流程如下:

(a) 软件收到每一帧数据后根据第3节通信协议进行校验。如果校验通过则执行发送回令,并执行(b),如果校验不通过则执行(f)。

(b) 判断该帧类型。如果是第一帧,转到(c);如果是中间数据帧,转到(d);如果是最后帧,转到(e);如果是其他帧,执行(f)。

(c) 如果是第一帧,读取帧协议中的二进制文件长度、时间及类型信息,并将这些信息写到Flash中,并根据帧协议中的长度大小擦出Flash的扇区。

(d) 如果是中间数据帧,读取本帧的长度,并将内容缓存到DDR3中。

(e) 如果是最后帧,将DDR3中缓存的数据写到Flash的相应区域中,对Flash中的数据进行CRC校验,与最后帧中的CRC结果进行比对。

(f) 判断当前出错的类型:帧头校验错误、Flash读异常、Flash写异常或者Flash擦异常等,并发送到上位机监控软件。

5 试验结果

本设计试验验证的下位机软件运行环境是TMS320C6678开发板,TMS320C6678是一款多核DSP处理器芯片,片内集成8个C66x内核[6],本系统中主要运行下位机嵌入式软件,挂接一路网口用于与上位机监控软件的通信。交换机采用工业级交换机,上位机软件运行在商用笔记本。

对嵌入式软件1进行远程升级测试,上位机监控升级过程如图7所示,Wireshark监控升级过程如图8所示。测试结果表明上位机界面结果显示正常,以太网软件升级方法经验证有效可行。

图7 上位机监控远程升级过程示意图

6 总结

本文针对嵌入式软件固化后升级流程复杂的问题,提出了一种基于以太网总线的远程升级方案,对通信协议、升级流程、上位机及下位机软件的可靠性增强设计,显著地降低升级难度,提高升级的效率和可靠性。本文提出的方法在基于TMS320C6678 DSP的嵌入式软件升级系统中进行了验证,实验结果表明方法设计正确,具有一定的通用性和实操性,可以推广到其他嵌入式系统中。

猜你喜欢

嵌入式软件下位二进制
用二进制解一道高中数学联赛数论题
基于UDS协议的CAN BootLoader的开发与验证
有用的二进制
嵌入式软件测试数据传输稳定性检测方式分析
基于安全性分析的嵌入式软件测试
有趣的进度
基于STM32和Zigbee的mini宠物智能喂养系统的设计
发射机房监控系统之下位机
基于VPRS方法的汽车嵌入式软件品质评估
嵌入式软件在计算机软件开发过程中的运用