没有合适的资源?快使用搜索试试~ 我知道了~
首页嵌入式终端IAP断点续传的研究与实现
资源详情
资源评论
资源推荐

嵌入式终端嵌入式终端IAP断点续传的研究与实现断点续传的研究与实现
在阐述IAP技术原理的基础上,以STM32F10X为平台设计并实现了在线及远程断点续传升级方案;该方案方便
快捷,摒弃了传统升级复杂繁琐的过程,并解决了升级过程中意外中断、远程升级传输误码等关键技术问题,
保证嵌入式终端程序正确运行。
引言
在线应用编程(InApplication Programming,IAP)技术是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目
的是为了在产品发布后方便地通过服务通信端口对产品中的固件程序进行更新升级。
目前电力市场的电能数据采集终端、集中抄表终端等设备之间通信都是通过GPRS,在一些偏远或者信号覆盖较少地区GPRS
存在一定的不稳定性,会出现数据传输中断等现象。传统IAP方式没有考虑传输中断和传输误码等问题,采取传统方式对设备
进行升级,如果升级过程中出现中断,不仅导致APP程序区遭到破坏,还会因为升级中断而再次重复升级,产生大量GPRS流
量,因此急需一种行之有效的方法来解决这类问题。
本文将以ST公司的STM32F103RBT6为平台,阐述IAP断点续传的方案及其优化。该方案解决了升级过程中意外中断、远程升
级数据传输误码等关键性技术问题,保证了待升级终端内部应用程序的正确运行。该方案方便快捷,避免了传统应用程序升级
所带来的复杂繁琐过程,节约了大量人力资源,已在电力集抄系统中得到广泛的应用。
1 IAP原理
1.1 STM32F103RBT6芯片简介[1]
STM32F103RBT6是一款以CortexM3为内核的32位CPU,带有20 KB的静态RAM以及128 KB的Flash存储器,最高主频可达
72 MHz,外部拥有丰富的外设资源和通信端口,为在线升级端口提供更多选择。
1.2 传统IAP编程原理
对MCU而言,其程序都是一系列二进制代码,并存储在Flash空间。当MCU上电之后,内核把存储在Flash内部的数据映射到
RAM空间执行。因此在线编程可以看作是MCU对Flash空间的数据进行读/写操作。
图1 传统IAP流程图
传统IAP原理是在用户程序(APP)运行过程中,当接收到升级的命令后,把用户数据保存到EEPROM或上传到主站,然后跳
转到升级区,对APP程序区进行升级,当程序升级完毕,再跳转到APP区执行APP程序。正常情况下,这种升级方法没有问
题;但是当升级过程中出现中断,则整个APP数据区被破坏,即使下次升级成功,中间也会出现一段空白期。在电力仪表中,
这种空白期将产生很大的影响,不仅丢失大量电能表数据,还会对用户产生一系列的影响。
传统升级流程图如图1所示。
1.3 IAP断点续传原理
断点续传能够很好地解决传统升级方式的不足,该方法主要原理是把Flash分成不同区域,每个区域存储不同的数据或者用户
程序。以STM32F103RBT6为例,把内部Flash分成4个区域,如表1[2]所列。
表1 STM32RBT6内部Flash区域划分
图2断点续传流程图
第1个区域为IAP断点续传程序区,当终端上电或接收到升级命令时,程序指针跳转到0x08000000处开始执行,等待接收升级
数据包;第2个区域存储一些升级相关的信息,每个信息表示上一次升级的状态,以结构体形式存放。如:
struct inform{
uint32_t area;//更新区域"H"高区,"L"低区,
uint32_t length;//对应升级包的数据长度
uint32_t crc;//对应数据包的CRC校验和
uint32_t version;//对应数据包的版本号,续传检查版本号
uint32_t number;//上次升级到第几包数据,若升级完成,则为0
};
第3和第4个区域分别存储的是低区用户程序和高区用户程序。这样做的目的是当升级其中一个用户程序时候,即使升级被中



















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0