基于弹载嵌入式软件在线更新方法研究

2023-01-09 11:27张永鹏
火控雷达技术 2022年4期
关键词:嵌入式软件上位嵌入式

张永鹏

(1.中国电子科技集团公司第三十八研究所 合肥 230088; 2.孔径阵列与空间探测安徽省重点实验室 合肥 230088)

0 引言

现有弹载产品中包含大量的DSP、FPGA等嵌入式模块,在产品生产交付后,伴随着产品功能、性能的升级改进,需要对内部嵌入式软件进行更新。传统嵌入式软件一般采用专用编程线缆及相应的仿真器连接芯片后对软件进行更新,此方法需专人操作且操作复杂、灵活性低[1-3]。

本文以某弹载雷达嵌入式DSP芯片TMS320C6713(简称C6713)为例,提供一种可靠性高、操作便捷的嵌入式软件在线更新方法,实现弹载产品嵌入式软件高效的软件在线更新。此方法极大地提升了弹载产品软件在线更新的可靠性、安全性和操作便捷性,具有良好的工程应用价值。

1 在线更新机理

1.1 在线更新原理

嵌入式软件为了支持在线自更新任务,需要在系统中单独设计一个区别于正常工作程序模块,专用于嵌入式软件更新的在线更新程序模块,如图1所示。系统正常工作启动时通过BootLoader程序(即引导程序)选择启动工作程序模块,此时在线更新程序模块处于阻塞状态,当需要进行软件在线更新时,工作程序模块接收外部在线更新控制指令,完成在线更新状态置位(FLASH地址“0x90070000”存储在线更新标识),同时嵌入式DSP软件通过调用Jump(0)函数,将嵌入式软件重新转入起始0地址开始执行,即可实现进行嵌入式DSP的自复位。复位后,自动重新运行BootLoader程序,此时BootLoader程序根据在线状态启动在线更新程序模块,此时可接收外部待更新的工作程序文件,并将程序文件写入到工作程序模块的FLASH储存地址中,即可完成工作程序模块的在线更新操作[4-7]。

图1 在线更新系统架构示意图

1.2 自启动原理

C6000系列没有自带的FLASH存储器,需要通过EMIF总线与外扩的FLASH储存芯片进行通信,因此将程序文件通过EMIF写入到外扩的FLASH中,系统上电复位后,再通过FLASH进行引导自启动,C6713启动时通过EDMA自动将FLASH起始地址的前1KB内容搬移到内部的RAM中,并自动执行该段程序。基于C6713的启动机制,将BootLoader程序文件写入FLASH的起始地址的前1 KB的地址区中,BootLoader程序主要功能是将FLASH中存放的在线更新程序或工作程序搬移到C6713的RAM/SDRAM中,再通过调用Jump()跳转程序,跳转到程序起始地址,即可执行该段软件程序[8-12]。

2 软件设计流程

2.1 在线更新系统架构

基于高可靠、易操作的设计原则,C6713的软件在线更新主要分为两部分:第一部分为嵌入式软件模块,此模块主要包含3个子程序模块,分别为BootLoader程序模块、在线更新程序模块和工作程序模块,主要实现C6713的嵌入式系统的引导、软件在线更新及正常工作;第二部分为PC端可视化在线更新上位机,主要完成软件程序文件的生成及“一键式”嵌入式系统的软件在线更新。

如图2所示,弹载嵌入式系统的软件在线更新主要由可视化在线更新上位机、RS422串口通信模块和嵌入式系统组成。可视化在线更新上位机通过RS422通信模块与嵌入式系统进行相互通信,完成在线更新指令和待更新程序文件的上传等操作;嵌入式系统与可视化在线更新上位机进行数据的交互,根据在线更新指令完成在线更新状态的切换,并对接收程序数据文件的正确性、有效性进行判断,最终完成软件程序文件的在线FLASH擦写操作。

图2 在线更新系统架构示意图

2.2 嵌入式软件设计

基于系统在线更新高可靠性、安全性的设计需求,将C6713外挂的软件程序存储FLASH划分为4个独立的程序区,分别为BootLoader程序区、在线更新程序区和工作程序区,其中工作程序区还分为当前工作程序区和旧工作程序区。FLASH存储区划分如图3所示,其中BootLoader程序区为64KB,在线更新程序区为320KB,前工作程序区和旧工作程序区均为736KB。

图3 FLASH存储区划分示意图

BootLoader程序区的前4KB存储二级引导程序,该程序实现将存储在BootLoader程序区4KB~64KB的三级引导程序搬移到内存中运行,即实现了C6713的FLASH自启动。三级引导程序根据程序切换状态将在线更新程序区或工作程序区的FLASH地址的代码数据搬移到内存中,再跳转到相应程序入口地址;在线更新程序区用于存储在线更新程序模块,该程序实现与可视化在线更新上位机间的通信,并对工作程序区FLASH地址上存储的工作程序代码数据进行擦写操作;当前工作程序区用于存储最新版本的工作程序代码数据,用于嵌入式系统的正常工作使用;旧工作程序区用于存储前一版本的工作程序代码数据,用于嵌入式系统工作程序的备份和异常情况工作程序版本恢复。

同时,在线更新程序仅可更新“当前工作程序区”和“旧工作程序区”的程序数据,不可更新“BootLoader程序区”和“在线更新程序区”的程序数据,BootLoader程序和在线更新程序仅在出厂时进行更新,以保障该两段软件程序代码的正确性和完整性。在对“工作程序区”的代码数据进行更新过程中,将已存储的于“当前工作程序区”的前一版本的工作程序代码数据向“旧工作程序区”进行搬移,实现了工作程序代码数据的备份,在工作程序更新失败、代码数据错误、FLASH局部数据损坏等异常情况下,“当前工作程序区”的代码数据无法正常工作,在三级引导搬移当前工作程序区数据时,判断程序数据异常可重新搬移旧工作程序区的备份代码数据,避免异常程序对系统造成损坏。因此,通过对工作程序的备份设计,可有效地提高系统的可靠性和安全性。

2.2.1 BootLoader程序设计

C6713复位后,通过EDMA自动将存储在FLASH起始地址的前1KB的BootLoader程序搬移到C6713内部RAM中运行,完成了C6713的FLASH的自启动及后续工作/在线更新程序的搬移和跳转。

BootLoader程序的设计流程如下:首先完成系统时钟、EMIF总线及中断等初始化;其次,通过EMIF读取存储在FLASH地址“0x90070000”的更新状态标识字,并对该地址的标识字进行有效性校验;若该标识有效则根据此有效标识判断本次进入正常工作态或在线更新态若无效则进入在线更新态;若该标识字无效,因在线更新软件属于出厂软件,故则本次在线更新态,并反馈相应状态。

进入正常工作态后,软件执行流程如下:

1)首先读取FLASH存储器中“当前工作程序区”的新版本程序代码数据,并对读取的数据内容进行CRC32校验,并与存储的校验值进行判断;

2)若新版本代码数据有效,则将该代码数据搬移到C6713中的RAM/SDRAM内存中,并跳转到该程序的入口地址上,执行新版本的工作程序;

3)若新版本代码数据无效,则读取FLASH存储器中“旧工作程序区”的前一版本程序代码数据,并判断数据内容的有效性;

4)若前一版本代码数据有效,则将该代码数据搬移到C6713中的RAM/SDRAM内存中,并跳转到该程序的入口地址上,执行前一版本的工作程序;

5)若前一版本代码数据无效,则转入在线更新态。

进入在线更新态后,软件执行流程如下:

1)读取FLASH存储器中“在线更新程序区”的在线更新程序代码数据;

2)将读取的代码数据搬移到C6713中的RAM/SDRAM内存中,并跳转到该程序的入口地址上,执行在线更新程序。

BootLoader程序执行流程如图4所示。

图4 BootLoader程序执行流程

2.2.2 在线更新程序设计

在线更新程序通过与可视化在线更新上位机间进行通信,接收上位机下传的待更新代码程序数据,将接收到的完整、正确的程序代码数据更新,并将前一版本的代码数据进行备份。为提高在线更新过程中的可靠性、安全性,对各个数据包进行握手、重传、校验等方式进行处理;同时,完成所有代码数据的接收后,并对整个程序文件数据进行特殊的CRC32位校验,确保上传程序数据文件的正确性和有效性;进一步,对写入FLASH地址的数据回读后与待写入的数据进行对比,确保FLASH写入数据的准确。

在线更新程序执行流程如下:

1)通过RS422串口采用“握手”方式与PC端的可视化在线更新上位机建立连接;

2)通过握手、校验、重传等方式接收可视化在线更新上位机下发的当前程序文件的入口地址、长度、文件特殊校验码等信息,再通过分包形式接收程序代码数据,并将接收的数据存储到SDRAM中进行临时存储;

3)接收完所有代码数据后,对接收的程序代码文件进行特殊校验码校验,并与存储的特殊校验码进行判断,判断接收的代码数据文件是否为该嵌入式软件的程序,确保程序文件的正确性;

4)对各个写入到FLASH地址的数据进行回读,与待写入的数据进行比较,确认写入FLASH数据的一致性;

5)将前一版本工作程序文件搬移到“旧工作程序区”进行备份;

6)完成所有操作后,更新FLASH地址“0x90070000”的更新状态标识字为正常工作态,系统再次启动时可正常进入最新版本工作程序。

在线更新程序设计流程如图5所示。

图5 在线更新程序执行流程

2.2.3 工作程序设计

工作程序主要完成弹载嵌入式系统的正常工作。同时,具备与可视化在线更新上位机间进行通信,可接收上位机下发的在线更新指令,更新FLASH地址“0x90070000”的更新状态标识字为在线更新态,再完成系统的自复位。

2.3 可视化在线更新上位机设计

C6713工作程序通过CCS编译完成后生成的目标文件类型为*.out和*.map文件,无法直接用于C6713的更新使用,需进行格式转换[13-16]。因此,可视化在线更新上位机实现了软件程序文件的格式转换及与嵌入式系统间的通信交互。

软件程序*.out和*.map文件转换*.bin文件的处理流程如下:

1)根据*.map文件获取程序代码RAM和SAMR存储的长度、主函数的入口地址等信息;

2)将*.out文件通过hex6x.exe、*.cmd文件转换到*.hex;(hex6x.exe为TI公司提供文件转换可执行程序;*.cmd文件负责C6713的内存分配。)

3)将*.hex转换到*.bin文件,并计算软件程序文件的特殊校验码;

4)将转换后的*.bin、特殊校验码和读取的*.map文件中的信息拼接成最终可用于在线更新的*.bin文件。

将最终生成好的*.bin文件采用“一键化”操作方式完成与嵌入式系统的信息交互,完成在线更新操作。具体流程如下:

1)在“在线更新上位机”上选择正确的COM串口,点击“连接串口”,实现与嵌入式系统的通信;

2)点击“连接主控”,嵌入式软件由正常工作程序切换更新状态并进行自复位,重新进入BootLoader程序,并根据更新状态启动在线更新程序;

3)进入在线更新程序后,回馈“在线更新上位机”已进入在线更新态;

4)选择待更新的程序文件,点击“烧写主控软件”将数据上传给嵌入式在线更新软件;

5)完成所有数据上传后,发送FLASH烧写指令给在线更新程序,在线更新程序完成待更新代码数据的FLASH擦写和程序备份操作。

在线更新软件流程和上位机界面如图6、图7所示。

图6 可视化在线更新上位机执行流程

图7 可视化在线更新上位机界面

3 结束语

本文提供了一种高可靠性、安全性和操作简洁的嵌入式软件在线更新方法,实现了弹载嵌入式软件快速、便捷的在线更新。对弹载产品嵌入式模块的在线更新带来了极大便利,在实际工程项目中取得了良好的应用效果,对其他嵌入式产品软件在线更新具有一定的参考价值。

猜你喜欢
嵌入式软件上位嵌入式
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
嵌入式软件测试数据传输稳定性检测方式分析
TS系列红外传感器在嵌入式控制系统中的应用
要攻城略地关键要有好筹码,这匹水产动保“黑马”如何能迅速上位?
嵌入式PLC的设计与研究
特斯拉 风云之老阿姨上位
全景相机遥控器嵌入式软件V1.0 相关操作分析
嵌入式单片机在电机控制系统中的应用探讨
基于ZigBee和VC上位机的教室智能监测管理系统
基于Eclipse的航天嵌入式软件集成开发环境设计与实现