双单片机嵌入式设备远程升级方案设计

2022-10-14 13:51刘孟臣张珊珊姬丹丹
科技创新与生产力 2022年9期
关键词:接收端报文嵌入式

刘孟臣,张珊珊,姬丹丹

(中电装备山东电子有限公司,山东 济南 250109)

随着社会的发展,各行各业大量使用了嵌入式电子设备,如道路上的高清数字监控摄像头、远程水文监控设备、智能电能表、智能采集终端等。这些设备的软件升级维护是常态,设备一旦安装,拆卸十分繁琐,这就要求其必须能够远程在线升级。嵌入式设备一般是基于单片机/DSP/ARM 开发的,远程在线升级实际是对其程序进行远程升级。

在实际使用中,出于种种设计考虑,会出现在同一个嵌入式设备上配置两个单片机的场景,两个单片机协同实现完整的设计功能。比如两个单片机,一个完成管理功能,另一个完成计量功能。这种使用双单片机的嵌入式设备往往只有一个单片机能与外部主站通信,很多文章已经对这类能直接与外部通信的单片机的远程升级方式进行了详细的介绍,而对于同时使用两个单片机且只有一个单片机能与外部通信的场景介绍的较少。本文将主要讲述这种场景下嵌入式设备的远程升级实现方案。

1 双单片机嵌入式设备结构介绍

本文介绍的双单片机嵌入式设备主要包括1 个主单片机、1 个从单片机、1 个远通信模组、1 个片外FLASH 存储器以及相关外围器件,见图1。两个单片机中主单片机可以与外部设备通信,从单片机只与主单片机通信。由于外围设备不是本文研究重心,因此不做过多说明。在该嵌入式设备中,主单片机与从单片机通过串口连接,主单片机通过SPI 总线与扩展的片外FLASH 存储器连接,主单片机还通过串口与远程通信模组(即4G 通信模块)连接。主单片机通过远程通信模块以TCP 连接的方式与远方主站保持永久连接。

图1 双单片机嵌入式设备系统框图

2 双单片机嵌入式设备远程升级原理

不管是主单片机还是从单片机,其程序都由启动程序(Bootloader)和用户程序两部分组成。Bootloader 具备数据传输、读写Flash、擦除、校验等功能。Bootloader 执行完成后进入用户程序开始运行,用户程序是实现用户设计功能的部分。

由第95 页图2 可以看出,该嵌入式设备的Bootloader 和用户程序均存储在单片机的片上Flash内,同时在主单片机片上Flash 上留有存储升级标志的位置。升级标志用于升级主单片机程序时Bootloader 判断是否需要拷贝升级文件,Bootloader启动过程中会读取升级标志所在地址的数据值,如果升级标志被置位,则Bootloader 会先把片外Flash上存储的升级程序拷贝到用户程序区,从而完成程序更新。由于本文介绍的场景中从单片机无法直接与外部通信,所以两个单片机的Bootloader 功能也做个差异化处理,以下进行详细介绍。

图2 Flash 存储空间划分

2.1 远方主站介绍

设备通过远程通信模组以TCP 连接的方式与远方主站建立通信连接,远程升级功能由远方主站和嵌入式设备共同实现。在远方主站操作远程升级时,需要选择升级设备类型、升级文件以及填写升级文件的版本信息。

升级设备类型分为主单片机和从单片机。主站需要将升级设备类型写入升级启动报文下发给终端,并且主站要通过设备类型来判断如何抄读设备版本信息。如果设备类型为主单片机,主站将在设备重新登录时抄读版本信息;如果设备类型为从单片机,则主站在升级文件下发完成后,等待一个预先设定的延时,再使用透抄的方式去抄读从单片机版本信息。这个预先设定的延时大于主单片机给从单片机传输升级文件的时间,可根据实际情况设定。

升级文件就是所要升级的设备对应的升级程序文件,一般使用的都是bin 格式的二进制文件。

升级文件的版本信息是指升级包的软件版本号、软件版本日期等,用于同主站抄读回的设备软件版本信息进行对比,以此判断设备是否升级成功。

2.2 主单片机升级流程

主单片机远程升级时,通过用户程序接收升级文件,接收完成后,重启进入Bootloader,由Bootloader 将升级文件搬运到用户程序区,完成主单片机程序升级。主单片机升级流程见图3。

图3 主单片机升级流程

当需要升级主单片机程序时,远方主站通过无线网络下发升级启动报文,主单片机通过升级启动报文中的信息判断需要升级主单片机还是从单片机。确认需要升级主单片机后,主单片机先擦除外部Flash 里划分的主单片机升级程序缓存区数据,然后将收到的升级文件数据存储到主单片机升级程序缓存区中。

待升级文件传输完成后,主单片机写升级标志到升级标志存储区,然后主单片机重启进入Bootloader。

Bootloader 启动时先读取升级标志存储区的数据,判断是否需要升级用户程序。当Bootloader 读取到升级标志后,便会擦除用户程序区旧的用户程序,然后将外部Flash 上存储的主单片机升级程序拷贝到片上Flash 的用户程序区。升级程序拷贝完成后,Bootloader 再擦除升级标志,然后启动到用户程序。

用户程序启动后,设备重新登录到远方主站。当远方主站接收到升级设备登录后,主动读取设备软件版本信息,与升级前填写的文件版本信息进行比对,如果一致,则认为升级成功,否则认为升级失败。升级失败后主站从下发升级启动报文处尝试重新升级。

2.3 从单片机升级流程

从单片机远程升级时,主单片机负责将接收到的升级文件发给从单片机,从单片机的Bootloader负责接收升级文件,完成从单片机远程升级。

因为只有主单片机和主站建立通信连接,所以主站需要采用透抄的方式才能获取到从单片机软件版本信息。此处所说的透抄,是主站使用事先约定好的报文格式给主单片机发送透抄报文,主单片机收到透抄报文后,会将报文内容转发给从单片机。从单片机把要抄读的数据回复给主单片机,然后主单片机再把从单片机回复的数据组帧回复给主站,从而实现主站抄读从单片机数据。从单片机升级流程见图4。

图4 从单片机升级流程

当需要升级从单片机程序时,远方主站通过无线网络下发升级启动报文,主单片机通过升级启动报文中的信息判断需要升级主单片机还是从单片机。确认需要升级从单片机后,主单片机先擦除外部Flash 里划分的从单片机升级程序缓存区数据,然后将收到的升级文件数据存储到从单片机升级程序缓存区中。

待升级文件传输完成后,主单片机给从单片机发送切换工作模式命令,让从单片机切换到boot 模式,以开始升级。

从单片机重启进入boot 模式,即进入Bootloader 程序运行。先擦除从单片机片上Flash 用户程序区原程序数据,然后响应主单片机模式切换成功。模式切换成功后,主单片机从外部Flash 里的从单片机升级程序缓存区读取升级文件,分多帧将升级文件发给从单片机。从单片机的Bootloader 负责接收主单片机发送的升级文件,并将升级文件直接写入从单片机片上Flash 用户程序区。

待升级文件发送完成后,主单片机给从单片机再次发送切换工作模式命令,让从单片机切换到正常运行模式。

由于远程升级从单片机不会导致设备重新登录远方主站,所以升级从单片机时远方主站采用延时抄读版本信息的方式来验证升级结果。远方主站在给设备下发完升级文件后,会进入延时等待状态。此处所设延时要大于主单片机给从单片机传输升级文件的时间。待延时结束后,远方主站透抄从单片机软件版本信息,与升级前填写的文件版本信息进行比对,如果一致,则认为升级成功,否则认为升级失败。同样的,升级失败后主站从下发升级启动报文处尝试重新升级。

3 文件传输流程

上文介绍了整体的远程升级流程,下文将详细介绍主站给设备传输文件的详细过程。文件传输过程不可避免的会由于通信异常、数据错误等原因出现数据接收不完整的情况,从而影响传输准确性和传输效率。为了解决这一问题,本文采用的文件传输方式支持断点续传,传输出错时将以最快的速度补全缺失的数据块,保证升级成功率和升级效率。为方便描述,这里将远方主站称为启动端,将与主站通信的主单片机称为接收端。文件传输流程图见第97 页图5。

图5 中正常的文件传输过程共分为4 个步骤,分别是启动升级、文件传输、文件完整性校验以及程序版本校验,除此之外还有各个步骤出现异常后的跳转方式。

图5 文件传输流程

步骤1:启动端根据设置的每帧报文长度将升级文件划分成多个数据块,启动端开始下发升级启动报文。启动报文除了通知接收端启动升级外,还包含升级文件的特征信息,其中包括文件名、文件大小、文件块总数以及文件的校验和信息。接收端在收到升级启动报文后,判断要升级的设备类型,是升级主单片机还是从单片机,然后擦除Flash 里对应地址范围的数据。同时保存文件的特征信息,用于接收完成后检验。

步骤2:启动端开始按设定大小将文件块依次发送给接收端,每帧传输报文中还包含当前文件块序号。接收端接收到文件块后,除了存储文件块内容,还会记录接收到的文件块序号。

步骤3:当所有文件块下发完成后,启动端请求接收端返回接收到的文件块信息,核对接收端接收到的文件内容是否完整。如果接收端接收到了所有文件块,首先应对接收到的文件进行校验,如果文件校验和与升级启动报文里下发的校验和一致,接收端将重启进入Bootloader 开始更新用户程序。如果文件校验和不一致,则不会进行后续程序更新操作。

步骤4:启动端读取接收端软件版本信息,判断接收端是否升级成功。

如果步骤1 或步骤2 中由于连接中断、通信忙碌等原因无法继续,则会进入等待阶段。待通信恢复正常后,转到步骤3 执行。

如果步骤3 中启动端发现接收端接收的文件块不完整,首先判断是否因步骤2 文件传输中断导致的,如果是则会返回步骤2,按顺序补发接收端缺失的文件块。如果不是传输中断则返回步骤1,重新启动升级。

如果步骤4 启动端读取接收端软件版本与升级文件的软件版本不一致,认为升级失败,则返回步骤1 重新启动升级。

以上文件传输方案实现了支持断点续传的升级,可以大大提高远程升级成功率和升级效率,避免了由于缺失某个或某几个文件块而重新开始文件传输的烦恼。

4 结束语

本文设计了一种双单片机嵌入式设备的远程升级方案,详细介绍了远方主站功能、主/从单片机升级流程以及文件传输流程,对于主/从单片机Bootloader 程序的差异化设计、升级文件的断点续传同样做了详细说明。该远程升级技术同样可以扩展到其他多单片机或者主从设备的远程升级场景中,具有广泛的应用前景和较高的使用价值。

猜你喜欢
接收端报文嵌入式
基于J1939 协议多包报文的时序研究及应用
以太网QoS技术研究及实践
基于IMX6ULL的嵌入式根文件系统构建
基于光载波携能的制导武器无线携能通信研究
基于扰动观察法的光通信接收端优化策略
基于Python的汽车CAN总线报文格式转换系统的设计与实现
基于报文类型的限速值动态调整
手机无线充电收发设计
基于盲波束形成的MIMO雷达稳健参数估计
高校图书馆开展嵌入式信息素质教育的思考