基于晶华微SD82F46X芯片的远程升级应用方案

Part.01

概述

随着物联网、工业智能化快速发展,终端设备部署数量大,分布广、维护难度高,传统拆机、返厂、现场通过调试器烧录的固件升级方式已无法满足运维需求,存在必须拆机,人工成本高,批量升级慢,版本管控难等问题。基于Boot+App双分区架构的远程升级(OTA)技术,可通过串口、485、以太网4G/NB-IOT通信方式实现固件远程下发、校验、更新,大幅降低售后成本,提升设备迭代效率,延长设备寿命,是当前嵌入式终端主流升级方案。

Part.02

方案介绍

SD82F466为例,将FLASH的128kB空间分为2个区域Boot和App,Boot分8kB,地址0x00000~0x02000,App分120kB, 地址0x02000~0x1FFFF,如下图所示。

79315cf6-7e9a-11f1-90a1-92fbcf53809c.jpg

内存分配框架

正常情况下,芯片上电执行在Boot区,如果没有程序升级命令,一般会跳出Boot区,进入App程序,所以程序升级一般是由App区域的代码发起,当App收到程序升级命令后就可以跳转至Boot区的Update函数执行对App软件升级。

若升级失败,可重新上电进入Boot,根据程序升级命令执行Update。

Part.03

方案功能说明

3.1 APP功能

App区域主要用于编写应用程序,当程序运行在此区域时收到固件更新命令后,其主要功能为:

设置中断标志位,标志位用于判断程序执行Boot还是App程序的中断;

在收到程序升级命令后跳转至Boot区,以启动升级函数Update。

3.2 Boot功能

在芯片上电时,会先启动Boot程序,首先会对程序升级标志进行检查以确定是否要执行固件升级,如果需要就执行Update,等待接收新固件后对App升级,否则就直接进入到APP执行应用程序。

在整个对App程序升级的方案中,如果中途发生中断,可再次上电进入Boot,检测程序升级标志来进行升级。

需要注意的点:Boot工程里务必需要对芯片中断向量表进行重定向,保证Boot和App程序的中断都能正常执行。

程序升级整体流程如下:

远程升级流程图

3.3 中断向量表重定向说明

因8051的芯片不支持中断向量表的重定向,所以当一个工程里中断发生时只能从默认的中断向量地址开始执行。因Boot和App分别使用两个工程编写,这样一来都会生成各自的中断向量表,当App发生中断时,会进入Boot中断向量表执行Boot区中断,永远不会进入App的中断向量表,这不是我们想要的,因此就必需在Boot工程中做好中断向量表的重定向。

即使完成中断向量表的重定向后,当Boot和App用到了同一个中断时,仅从程序难以判断应该进入哪一个中断,因此程序需增加一个中断跳转的标志,用于判断当前去执行Boot区还是App区的中断,如果执行的是App,那么在中断发生后先跳转至Boot的中断向量表,判断标志变量后,再跳转到App的中断向量表执行,配置步骤如下:

取消Boot工程中的自动生成中断向量表(IDE设置);

将Boot和App工程的XDATA地址都改为从0x8001开始,0x8000地址作为区分执行Boot或App中断向量表;

在Boot工程中的STARTUP.A51文件中,将所有芯片中断向量表重定向,如外部中断地址0053H,则重定向后地址为2000H+0053H;

如果Boot和App程序里都要用到例如外部中断,那么还需进行如下配置:

STARTUP.A51文件中编写以下代码例如:

CSEG AT 0053H

LJMP EXINT1_ISR ;外部中断1

EXINT1_ISR:

PUSH ACC ;保存A寄存器的原有内容

PUSH DPH ;保存DPTR寄存器(高字节)的原有内容

PUSH DPL ;保存DPTR寄存器(低字节)的原有内容

PUSH PSW ;保存PSW(程序状态)寄存器的原有内容

MOV PSW,#0x00;清除PSW程序状态值

MOV DPTR,#0x8000;DPTR寄存器赋值为0

MOVX A,@DPTR ;从XDATA 0x8000地址处读取一个字节,存到A寄存器中

CJNE A,#0x00,APP_EXINT1_ISR ;如果A的值不等于0,则跳转到APP_UART0_ISR标签上;否则不跳转,继续往下执行

; 恢复现场

POP PSW ; 恢复PSW寄存器的原有内容

POP DPL ; 恢复DPTR寄存器的原有内容

POP DPH

POP ACC ; 恢复A寄存器的原有内容

EXTRN CODE(EXINT1_Handler) ;引用boot程序中的EXINT1_Handler函数

LJMP EXINT1_Handler ; 执行boot区的EXINT1中断函数

APP_EXINT1_ISR:

POP PSW

POP DPL

POP DPH

POP ACC

LJMP 0x2053 ; 执行APP区的EXINT1中断函数

Part.04

方案特点

可搭配外部无线+有线方式将App程序发送给芯片进行对App程序的升级;

搭载远程升级方案的设备,无需拆机维修,减少了人工,差旅等成本;

问题可以快速修复,发现软件BUG的设备,可通过推送新版软件来解决;

持续迭代功能,延长设备或产品生命周期;

设备出厂可以一个基础的软件版本,后期可根据需要,可差异化配置。

分享:

扫一扫在手机阅读、分享本文