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,如下图所示。

内存分配框架
正常情况下,芯片上电执行在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的设备,可通过推送新版软件来解决;
持续迭代功能,延长设备或产品生命周期;
设备出厂可以一个基础的软件版本,后期可根据需要,可差异化配置。







