首页 > 应用 > EDA
[导读]在电子产品出厂前,可以通过离线烧录器,烧录夹具,或者用在线烧录器通过预留的烧录接口轻松将应用代码下载到MCU中。但是,如果产品已售出或不在研发端,又要怎样升级程序呢?今天,这里就给大家介绍通过IAP的在线升级方法。

在电子产品出厂前,可以通过离线烧录器,烧录夹具,或者用在线烧录器通过预留的烧录接口轻松将应用代码下载到MCU中。但是,如果产品已售出或不在研发端,又要怎样升级程序呢?今天,这里就给大家介绍通过IAP的在线升级方法。

本文引用地址: http://www.21ic.com/app/eda/201802/752322.htm

先来理解两个概念ISP和IAP:

1、ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程写入最终用户代码, 而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程;

2、IAP(In-Application Programming) 指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。

IAP编程的实现办法

实现IAP功能,需要在设计产品的时候编写两个程序,第一部分程序是不执行正常的功能的,只是通过某种通信方式(如USB、Uart)接收固件或新的应用程序,执行对第二部分代码的更新,我们称之为Bootloader;第二部分代码是用户的应用代码,实现产品的真正功能。第一部分代码必须事先烧写(通过烧录器或仿真器)到单片机内,第二部分代码可以通过烧录器或仿真器烧录,也可以使用第一部分的IAP功能烧录。当芯片上电后,首先运行第一部分代码,如果不需要更新,则跳转到第二部分代码执行;如果检测到需要更新,则执行更新程序,更新完成后跳转到第二部分代码执行。以STM32为例,如下图:

如上图例子,Bootloader的起始地址存放在0x08000000(也是STM32芯片Flash的起始地址),程序由此执行后,跳转至复位中断入口向量地址,随后跳转到Bootloader的main函数入口, 当检测到需要升级程序,执行更新第二部分应用程序代码到地址为0x08000000 + N的Flash区域,更新完成后,跳转至第二部分应用程序的复位中断向量地址(0x08000004 + N +M), 随后跳转至第二部分应用程序的main函数,在main函数的运行过程中,如果CPU遇到一个中断请求,PC指针强制跳转至Bootloader的中断向量表(上图中0x08000004),而不是第二部分的中断向量表,程序再根据我们设置的中断向量表偏移量,跳转到对应中断源新的中断服务程序中执行,执行完成后返回第二部分应用程序的main函数。

需要注意的地方是:第一部分程序(Bootloader)跳转的地址和第二部分应用程序的起始地址必须要保持一致,相应的中断向量表也要修改,否则程序无法正确运行。

通过IAP在应用编程,在一些产品发布后可以方便地通过预留的通信口(如USB,串口,网络端口或无线传输)对产品中的固件程序进行更新升级。在使用IAP功能之前,芯片必须先通过烧录工具将实现IAP功能的Bootloader烧录到单片机内。如果Bootloader程序被破坏,产品必须返厂才能重新烧写程序,这是很麻烦并且非常耗费时间和金钱的。针对这样的需求,STM32在对Flash区域实行读保护的同时,自动地对用户Flash区的开始4页设置为写保护,这样可以有效地保证IAP程序区域不会被意外地破坏。

ZLG致远电子的P800isp是一款多通道在线脱机烧录器,用户只需将产品的烧录接口预留出来,使用P800isp即可轻松对程序进行一次烧录、二次更新,即使产品Bootloader被破坏,也能轻松解决更新问题

换一批

延伸阅读

[单片机应用] ARM7 LPC2378 远程升级----ISP与IAP

ARM7 LPC2378 远程升级----ISP与IAP

最近本人在学习ARM7的远程升级,在这里将自己的学习过程与大家分享,有错误的地方还请大家指出便于改正! ISP(In-System Programming)即“在系统可编程”,指电路板上的空白器件可以编程......

关键字:IAP ISP

[单片机应用] LPC1768IAP(详解,有上位机)

LPC1768IAP(详解,有上位机)

  之前说了stm32的iap编程,今天天气真好,顺手就来说说lpc1788的iap编程(没看前面的请查看stm笔记下的内容)  首先是flash的算法,lpc1768并没有寄存器来让我们操作flash,他内置了iap的flash算法,在技......

关键字:LPC1768 IAP 上位机

[单片机应用] STM32 IAP(在线更新程序)的使用关键点

 STM32 IAP(在线更新程序)的使用关键点

所谓IAP其实就相当于一个小小的bootloader 用来更新程序的很多产品基本都是程序做好后就直接在产线烧录一次就OK了,但是,但是BUG有时候是无可避免的,经常有产品装好后又要重新拆外壳 取下板子重新上烧录架烧的惨痛......

关键字:STM32 IAP 使用关键点

[单片机应用] ARM7 LPC2378 远程升级----IAP函数

ARM7 LPC2378 远程升级----IAP函数

对于在应用编程( IAP) 来说,应当通过寄存器 r0 中的字指针指向包含命令代码和参数的存储器(RAM)来调用 IAP 程序。 IAP 命令的结果返回到寄存器 r1 所指向的结果表( resulttable)。......

关键字:函数 IAP

[单片机应用] 怎么写stm8的IAP升级的bootloader和app

怎么写stm8的IAP升级的bootloader和app

因为之前写个stm32的IAP升级程序,所以我总结了做IAP升级的三个主要的难点:1、如何设置中断向量,也就是说中断向量的重定向2、如何配置程序的起始地址3、如何从IAP跳转到APP程序4、使用库函数要注意的地方(防止被坑......

关键字:stm8 IAP升级 bootloader app

[单片机应用] LPC43xx系列使用IAP的注意事项

LPC43xx系列使用IAP的注意事项

LPC43xx IAP函数的调用一般MCU的IAP是,厂商固化一段代码在芯片的某个区域,然后告诉你这个代码的入口地址。我们一般可以这么做:typedef void (*IAP_ENTRY_T)(参数列表)#define IAP_ADDR ......

关键字:LPC43xx系列 IAP 注意事项

[单片机应用] STM32F051 IAP源码分享

STM32F051 IAP源码分享

IAP需要有两个工程,第一个是Bootloader,第二个是Application同时将这两份程序放在mcu的flash里的不同位置,启动时自动进入bootloader(可选择)进行iap,成功后跳转至application。那么IAP问题......

关键字:STM32F051 IAP源码

[单片机应用] STM32_IAP详解

STM32_IAP详解

  Iap,全名为in applacation programming,即在应用编程,与之相对应的叫做isp,in system programming,在系统编程,两者的不同是isp需要依靠烧写器在单片机复位离线的情况下编程,需要人工的干......

关键字:STM32 IAP

我 要 评 论

网友评论

芯闻号

热门文章

技术子站

更多

项目外包

更多

推荐博客