历史上的今天
返回首页

历史上的今天

今天是:2025年02月04日(星期二)

2018年02月04日 | IAP技术帮助STM32进行程序更新

2018-02-04 来源:eefocus

    前 言

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

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

    2 IAP技术

    2.1 IAP技术原理

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

通过PC指针读取程序指令

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

    2.2 IAP技术关键点

    通过研究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.3 IAP技术实现

    (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协议连入互联网,即可借助网络对产品进行在线升级,既可提高系统的可维护性,又可降低产品的维护成本,必将在未来得到更为广泛的应用。


推荐阅读

史海拾趣

HN Electronic Components GmbH & Co Kg公司的发展小趣事

背景:HN Electronics成立于20世纪90年代初,正值全球电子市场快速崛起的时期。公司由一群在半导体领域拥有丰富经验的工程师创立,他们看到了智能手机和消费电子产品市场的巨大潜力。

发展:初期,HN Electronics专注于研发高性能的电源管理芯片,通过技术创新解决了当时市场上存在的能效低、发热量大等问题。公司迅速获得了业界的认可,并与几家知名手机制造商建立了合作关系。

关键事件:1995年,HN Electronics成功推出其首款自主研发的电源管理芯片,该产品迅速成为市场热销产品,为公司赢得了第一桶金。

Holt Integrated Circuits公司的发展小趣事

Holt在CAN控制器领域也取得了重要突破。作为世界上第一家将CAN控制器和收发器集成在同一紧凑塑料封装中的公司,Holt的ARINC 825(CAN)数据总线产品为用户提供了极大的便利。这种集成设计不仅减小了产品的体积和重量,还提高了系统的可靠性和稳定性。Holt的这一创新成果,不仅推动了CAN总线技术在航空航天领域的广泛应用,也为其他行业的自动化控制提供了有力支持。

以上五个故事,从不同角度展现了Holt Integrated Circuits公司在电子行业中的发展历程和卓越成就。这些事实不仅证明了Holt在技术创新和市场拓展方面的实力,也为其在未来的发展中奠定了坚实的基础。

EF Johnson Technologies Inc公司的发展小趣事

在电子通信技术的浪潮中,EF Johnson Technologies Inc公司凭借其卓越的研发团队,成功开发出一款新型无线通信设备,该设备在信号稳定性和传输距离上均取得了重大突破。这一技术突破不仅让EF Johnson在市场上获得了显著的竞争优势,也推动了整个行业的技术进步。随着产品的广泛应用,EF Johnson逐渐确立了其在无线通信领域的领先地位。

Elec & Eltek公司的发展小趣事

随着全球对环境保护和可持续发展的重视日益加深,Eltek公司也积极响应这一趋势。在产品研发和生产过程中,Eltek公司始终坚持环保理念,采用环保材料和工艺,减少对环境的影响。同时,Eltek公司还加大了在可再生能源领域的投入力度,积极研发具有更高效率和更低成本的电力电子产品。此外,Eltek公司还积极参与各种环保活动和公益事业,为推动全球可持续发展贡献自己的力量。

以上五个故事虽然是虚构的,但其中所蕴含的发展思路、创新精神和国际化视野是电子行业公司普遍需要关注和借鉴的。希望这些故事能为您提供一些启示和灵感。

谷峰(GOFORD)公司的发展小趣事

随着产品线的不断丰富和技术实力的日益增强,GStek开始积极拓展国内外市场。公司采取多元化的市场策略,针对不同客户群体提供定制化的解决方案。同时,GStek还注重品牌建设,通过参加各类行业展会、举办技术研讨会等方式,加强与业界的交流与合作,提升品牌知名度和影响力。这些努力使得GStek的产品广泛应用于各类电子产品中,包括智能手机、平板电脑、笔记本电脑等移动设备以及家电、工控等领域。

Formosa MS公司的发展小趣事

在电子产品日益追求轻薄化、高效能的大背景下,GStek不断加大研发投入,致力于技术创新和产品研发。公司拥有一支由行业资深专家和年轻技术骨干组成的研发团队,他们紧密跟踪国际前沿技术动态,结合市场需求,不断推出具有自主知识产权的新产品。这些新产品不仅性能优异,而且成本效益显著,深受市场欢迎。通过持续的技术创新和产品升级,GStek在电源管理领域树立了良好的品牌形象。

问答坊 | AI 解惑

Cadence中的psm文件

我前几天下了个Cadence软件,主要是查看芯片封装信息的,其中主要有两个文件,一个是pad格式,可以打开,另一个是psm格式的文件 怎么也打不开。气死了,现在很急,希望哪位高手可以帮助我。。。:Q…

查看全部问答>

MSP430F1系列单片机,串口中断问题

MSP430F149单片机,中断发送函数         我理解的发送过程是这样的,大家先看下这样理解对不对?:首先,代码设置中断标志,UTXIFG1 = 1,程序进入发送中断函数发送一个字节,发送完毕后,MCU自动复位UTXIFG1 = 0, 然后退出 ...…

查看全部问答>

gooogleman 看到该贴请进

gooogleman, 我听论坛的兄弟说你有WINCE下的 SKYPE软件, 不知能发给我一份吗? 我找了好几天了也没找到。急用. 非常感谢. EMAIL:  LHEART@263.NET…

查看全部问答>

对51单片机中断 的一点疑问

程序如下 #include   unsigned int  count=0; unsigned int  count1=0; sbit  P15=P1^5 ;//蜂鸣器 main() { TMOD=0X01;//选择定时器0方式1 TH0=(65536-50000)/256;//定时器置初值,定时50ms ...…

查看全部问答>

嵌入式怎么学呀?

书有很多但讲的都是不同的模块芯片。 1应该先学哪个芯片呀? 2学这个还要一些硬件,应该买哪个合适?都多少钱? …

查看全部问答>

请教下关于自己做来电防火墙存在的问题,拒听的时候老跳出震铃界面2秒左右,然后自动关闭,如何解决呢

拒听的时候怎么老跳出震铃界面2秒左右,然后自动关闭,如何解决呢?拒听理论来说,不应该出现震铃界面呀,但是怎么每次拒听会跳出震铃窗口呢,如何处理呢? 附加代码(知道的请告诉下好么,万分感谢!!!!!): case LINE_APPNEWCALL:    SetRing(F ...…

查看全部问答>

紧急求助!对vxworks/tornado开发比较熟悉的大牛帮帮忙!

选了vxworks的课,结果忙了一学期其他的事情,还有几天交作业了,着急,诚征大牛帮忙。价格面议。手机:13718106015    实验1. 哲学家的晚餐(30%)    实验2. TCP双机通信(40%)    实验内容:安装Tornado UL ...…

查看全部问答>

伺服阀压力闭环是怎样实现的

用伺服阀进行输出压力控制时,采用plc模拟量模块给定伺服阀信号或接受传感器反馈信号。开始时,压力达不到设定值,模拟量输出增加,阀的开度也增大,压力达到设定值时模拟量输出 保持当前值不变了(对于PID控制来说应该是这样的),但只要阀有开 ...…

查看全部问答>

Rt_thread中如何用FinSH shell查看一个线程使用的栈最大深度

请教了:RT中定义堆栈是一个麻烦事,我们要怎样用FinSH shell来查看一个线程使用的栈的最大深度喃? 哪位说说看。。。。。…

查看全部问答>