基于IAP的STM32程序更新技术

发布者:等放假的zr0最新更新时间:2021-07-01 来源: eefocus关键字:IAP  STM32  程序更新技术 手机看文章 扫描二维码
随时随地手机看文章

引言


嵌入式系统的开发最终需要将编译好的代码下载到具体的微控制器芯片上,而不同厂家的微控制器芯片有不同的下载方式。随着技术的发展和应用需求的更新,用户程序加载趋向于在线编程的方式,越来越多的芯片公司提供和开放了用户更新程序的接口与方式,以提高整个系统的可靠性和可维护性。


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更新存储区代码


2.2IAP技术关键点


通过研究IAP技术实现用户程序更新的过程,不难发现,在更新过程中必须保证PC指针在Boot区移动,而不能随意跳转至常态存储区。基于这个要求,结合微控制器原理可以得出需要特别注意的几个关键点。


(1) 禁止中断


毫无疑问,中断会使得PC指针跳转至中断服务程序入口地址,因此,在进入Boot区前需要禁止所有中断。


(2) 禁用底层外围接口


对于有些外围接口,比如当采用ADC+DMA的方式进行多通道A/D采样时,采样过程会按照预先设置的通道顺序进行A/D采样。若在PC指针跳转至Boot区前没有禁用,则更新完程序跳回常态存储区时,其存储A/D通道值就可能发生错位的情况。


(3) 使用实时操作系统


如果使用具有抢占式RTOS(即硬实时操作系统),则需要禁止所有任务,并且屏蔽所有的信号量及邮箱,以防止激活某个任务,导致PC指针跳转至常态存储区。


(4) 使用看门狗


在考虑导致PC指针跳转的原因时,看门狗很容易被忽略,而且很多芯片的看门狗一旦使能就不能禁用,所以不能通过禁用的方法达到目的。最安全的方法是,在Boot区中也加入看门狗的喂狗指令。特别要注意的是,当需要擦除、写入大量Flash数据时,需要对其过程所需时间进行定量的估计,有必要时可以在这个过程中多次喂狗。


(5) 存储空间分配


Boot区以及常态存储区的大小可以人为分配,一般而言,尽可能使常态存储区最大化,因为产品的功能是在该区域得到体现;而Boot区尽可能使其代码简洁,避免使用中断以及复杂的底层驱动及算法。


2.3IAP技术实现


(1) 关闭相关中断及禁用相关外围接口

定时器中断、SysTick中断、A/D中断、外部I/O中断等。


(2) 设定跳转地址

typedef void (*pFunction)(void);

INT32U JumpAddress;//定义IAP入口地址pFunction Jump_To_Application;//定义指向IAP入口地址程序的函数指针

JumpAddress=*(vu32*)(IAP_ADDR + 4);

Jump_To_Application=(pFunction) JumpAddress;


(3) 喂狗并执行跳转

IWDG_ReloadCounter();//喂狗

__set_MSP(*(__IO uint32_t*) IAP_ADDR);//初始化用户应用程序的堆栈指针

Jump_To_Application();


(4) IAP代码(Boot区代码)

只需要驱动用到的底层接口,尽量不使用中断,尽可能少地占用存储空间,同时需要适时地喂狗。另外对该系列Flash操作会有所不同,比如STM32F103ZE执行擦除操作时,一页为2 KB,而SMT32F103VC6等芯片一页为1 KB,使用其他型号芯片时需要具体查阅相关数据手册。


3总结


本文从分析IAP技术原理入手,详细论述了利用IAP技术实现用户程序更新的要点。另外,可以想象,如果Boot区加入TCP/IP协议连入互联网,即可借助网络对产品进行在线升级,既可提高系统的可维护性,又可降低产品的维护成本,必将在未来得到更为广泛的应用。


关键字:IAP  STM32  程序更新技术 引用地址:基于IAP的STM32程序更新技术

上一篇:STM32启动代码分析问题
下一篇:STM32F系列单片机内部FLASH编程

推荐阅读最新更新时间:2024-11-17 13:19

STM32 模块篇-温湿度传感器模块(DHT11)实验
5.03 温湿度传感器模块实验 5.03.1 概述 DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8 位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11 传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP 内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20 米以上,使其成为各类应用甚至最为
[单片机]
<font color='red'>STM32</font> 模块篇-温湿度传感器模块(DHT11)实验
STM32时钟初始化函数SystemInit()详解
花了一天的时间,总算是了解了SystemInit()函数实现了哪些功能,初学STM32,,现记录如下(有理解错误的地方还请大侠指出): 使用的是3.5的库,用的是STM32F107VC,开发环境RVMDK4.23 我已经定义了STM32F10X_CL,SYSCLK_FREQ_72MHz 函数调用顺序: startup_stm32f10x_cl.s(启动文件) SystemInit() SetSysClock () SetSysClockTo72() 初始化时钟用到的RCC寄存器复位值: RCC_CR = 0x0000 xx83; RCC_CFGR = 0x0000 0000;RCC_CIR = 0x0000 0000
[单片机]
<font color='red'>STM32</font>时钟初始化函数SystemInit()详解
ucosii在stm32上的移植详解5
详解1-4把移植过程都已经介绍了。接下来的工作是验证移植是否ok以及如何基于移植好的ucosii开发应用程序。前一个问题可以说是后一个问题的特殊情况,一般我们会创建两个简单的任务,看看任务切换是否成功来验证移植是否ok,因为任务切换可以说是ucosii最核心的功能。 任务代码(main.c): static void task1(void *p_arg) { for (;;) { led_on(LED_0); OSTimeDly(500); led_off(LED_0); OSTimeDly(500); } } static void t
[单片机]
stm32 外部中断的使用(含实例)
中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大大增加,而且中断的设置也更加复杂。今天就将来探讨一下关于STM32中的中断系统。 1 基本概念 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字
[单片机]
STM32的GPIO 输出—使用固件库点亮LED
硬件设计 在本教程中STM32 芯片与LED 灯的连接见图1,这是一个RGB 灯,里面由红蓝绿三个小灯构成, 使用PWM控制时可以混合成256 不同的颜色。 图1 LED 硬件原理图 这些LED 灯的阴极都是连接到STM32 的GPIO引脚,只要我们控制GPIO引脚的电平输出状态,即可控制LED 灯的亮灭。若您使用的实验板LED 灯的连接方式或引脚不一样,只需根据我们的工程修改引脚即可,程序的控制原理相同。 软件设计 为了使工程更加有条理,我们把LED 灯控制相关的代码独立分开存储,方便以后移植。在“工程模板”之上新建“bsp_led.c”及“ bsp_led.h”文件,其中的“bsp”即BoardSupport
[单片机]
<font color='red'>STM32</font>的GPIO 输出—使用固件库点亮LED
基于STM32单片机连接射频si4438模块的方案设计
SI4438射频模块参数: 1、频率范围:425-525MHz 2、数字接收信号强度指示(RSSI) 3、64字节收发数据寄存器(FIFO) 4、跳频功能 等! 使用SI的WDS工具生成代码 1、选择仿真模式 2、芯片选择si4438 B1模式 3、Radio Configuration ApplicaTIon 4、Select ApplicaTIon 1、Select Project 选择BidirecTIonal packet ,双向通信模式 2、Configure project 配置工程 Frequency and power: 频率和功率的设置, base freq基频,中心频率, Channel spac
[单片机]
基于<font color='red'>STM32</font>单片机连接射频si4438模块的方案设计
关于STM32自举程序原理和使用详细解析
很很多单片机都有自举程序,像支持STC单片机使用串口下载,这种其实也是单片机内部集成了一段自举程序。 那你,你了解自举程序吗?下面结合STM32给大家分享一下关于自举程序的知识。 1关于自举程序 STM32中内嵌了一段自举程序,可能很多人不知道。 那段自举程序存放在System memory(系统存储器)中,我们通过配置启动,选择启动系统存储器就可以运行这段程序。 2STM32启动配置 STM32有三种启动模式: Main Flash memory:主FLASH System memory:系统存储器 Embedded SRAM:内置SRAM 三种模式是通过不同配置来实现,一般通过BOOT引脚和BOOT位来配置启动模式。
[单片机]
关于<font color='red'>STM32</font>自举<font color='red'>程序</font>原理和使用详细解析
ST推四套价格低廉STM32评估及开发工具 均由第三方开发
Hitex、IAR、Keil和Raisonance公司的评估及开发工具与ST的量产的ARM Cortex-M3内核微控制器同步上市 中国,2007年10月15日 — 意法半导体(纽约证券交易所代码:STM)今天推出四套价格低廉的评估及开发工具,这些工具是由ST的主要的第三方软件供应商开发的,支持ST最近推出的基于具有突破性的ARM Cortex-M3内核的STM32微控制器。这些开发入门工具的开发厂商分别是Hitex、IAR、Keil和Raisonance,通过使用这些开发工具,用户可以轻松了解STM32的特性和功能,只需很少的时间和资金就能开始正式的应用程序开发,这些开发工具的价位在109美元到239美元之间。 全系列产品
[新品]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved