×
嵌入式开发 > 详情

基于IAP的STM32程序更新技术

发布时间:2020-07-09 发布时间:
|

引言

嵌入式系统的开发最终需要将编译好的代码下载到具体的微控制器芯片上,而不同厂家的微控制器芯片有不同的下载方式。随着技术的发展和应用需求的更新,用户程序加载趋向于在线编程的方式,越来越多的芯片公司提供和开放了用户更新程序的接口与方式,以提高整个系统的可靠性和可维护性。ST公司基于CortexM3内核的STM32系列产品得到了广泛应用,在许多基于STM32系列产品的开发过程中不可避免要进行用户程序的加载。本文在介绍IAP技术原理基础上,详细论述使用该技术在STM32F103ZE芯片上实现用户在线更新功能的方法,并具体分析其中可能发生异常的原因。

1背景综述

1.1主要程序更新方式

目前,除了直接通过仿真器或烧录器进行程序更新方式外,主要有Bootloader技术、ISP技术以及IAP技术3种更新程序的方法。

(1) Bootloader技术

引导加载程序,是指系统加电时,控制器将一段存储在外部非易失性存储器中的代码载入到内部高速存储器单元(如片内RAM)中执行的过程。

(2) ISP(In System Programming)技术

MCU内部自带Bootloader,通过指定的方式激活,通过通信接口下载或擦除用户代码。需要有外部介入,静态的,在用户代码没有运行时进行下载。

(3) IAP(In Application Programing)技术

单片机内部具有一些可擦写的非易失存储器,如Flash。在微控制器独立运行时,用户利用自己编写的烧写程序通过通信下载或擦除自己的代码。注意不具备IAP功能的单片机并不能对Flash的数据进行修改。无需外部介入,动态的,在用户代码运行时进行下载。

1.2STM32系列简介

STM32系列微控制器基于CortexM3内核,并在其架构上进行了多项改进,包括在提升性能的同时提高了代码密度的Thumb2指令集,以及大幅度提高中断响应的紧耦合嵌套向量中断控制器,从而大大提高了处理速度,降低了系统功耗。使用新内核的Thumb2指令集,设计人员可以把代码容量降低45%,几乎把应用软件所需内存容量降低了一半。此外,STM32提供丰富的外围接口,目前广泛应用到工业用及家用安全设备、消防和暖气通风空调系统等,以及家电、消费电子、低功耗的可便携式设备等。本文以STM32F103ZE为例来研究及使用IAP技术。

2IAP技术

2.1IAP技术原理

首先人为设定单片机内部存储区分为两块:其中一块称为Boot区,用于存储IAP功能程序代码;另外一块称为常态存储区,用于存储除IAP功能外的所有程序代码。IAP技术指的是, MCU在运行的状态下,通过程序(PC)指针不断读取需要执行的程序指令。正常情况下,PC指针只在常态存储区内移动,并读取指令,如图1所示。当用户需要更新或升级程序时,程序指令会将PC指针跳转至Boot区。这段存储区的指令代码的功能是,通过通信等方式接收用户需要更新的程序数据,并通过校验确认接收到的程序数据正确后,根据约定的方式写入常态存储区,如图2所示。当完成用户程序更新后,PC指针再跳回到常态存储区,开始执行存储在其上的用户程序,这样便实现了IAP功能。

图1通过PC指针读取程序指令 图2更新存储区代码



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
一只老鸟的嵌入式ARM学习心得