使用IAP在应用编程轻松更新固件

2018-02-08 11:04:02编辑:冀凯 关键字:IAP

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


先来理解两个概念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被破坏,也能轻松解决更新问题


关键字:IAP

来源: ZLG致远电子 引用地址:http://www.eeworld.com.cn/qrs/article_2018020844704.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:继电感业务后,世强宣布代理TT Electronics电阻产品
下一篇:AWorks IoT生态系统

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32F030 IAP升级研究

     在使用SMT32F103的时候,发现STM32是可以通过串口实现在线升级的(当然也可以通过文件的形式升级,原理都是一样的),正好在使用STM32F030,所以就想能不能在STM32F030上做一个在线升级的功能,通过一天的捣腾,还是搞出来了。后面想想了,还是把整个过程写成文档的形式分享出来。因为网上的资料都是零散的。     主要的参考资料:          《AN4657-STM32Cube_IAP_using_UART》      
发表于 2018-07-10 21:36:09

STM32f030 boot iap升级时keil配置注意事项

最近使用了一款Cortex-M0内核的芯片STM32F030CC,发现它中断向量表的重映射方法与STM32F10x系列的有所区别,在这里记录与分享一下。由于需要通过IAP进行固件升级,所以芯片的FLASH里面要烧录两份代码:一个Boot loader, 一个用户应用程序。理所当然的,在用户应用程序中,必须得重新映射中断向量表。可是在ST提供的固件库里,我却没有发现类似于stm32f10x固件库中的voidNVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)接口。     浏览了一下Cortex-M0
发表于 2018-07-10 21:33:26
STM32f030 boot iap升级时keil配置注意事项

IAP一个实例---LPC2214的IAP实现方案

引  言IAP即在应用中编程,对于嵌入式产品,指在不影响产品正常运行的情况下实现应用程序的更新。许多ARM芯片都提供该操作接口,相对于ISP(在系统编程)方式,具有方便灵活且不需要借助专用boot装载程序或工具的特点,而且在不影响嵌入式产品正常运行的情况下即可完成应用程序的动态升级。在工业控制领域尤其是电力系统控制领域中,嵌入式产品必须保证连续、稳定、可靠地运行,由各种原因导致的应用程序的更新都必须在产品正常运行过程中完成,因此许多用户对相关产品的IAP功能都有明确的要求。LPC2214是Philips公司推出的一款32位ARM7TDMI-S工业用微控制器。内置256 KB高速Flash,128位宽度接口/加速器可以实现
发表于 2018-06-27 20:43:43
IAP一个实例---LPC2214的IAP实现方案

LPC17XX之IAP升级

远程升级流程:协议升级。(1)IAP升级会使用芯片内部的RAM空间的顶部 32个字节(2)当前程序状态寄存器(CPSR):4个条件代码标志(负标志N,零标志N,进位标志C,溢出标志v),2个中断禁止位(IRQ和FIQ),5个当前处理器模式进行编码的位,一个用于指示当前执行指令的位(3)片内Flash系统分布:IAP代码位于BOOT扇区,所以IAP不允许对BOOT扇区进行写擦除操作(4)使用IAP将SRAM中的数据编程到FLASH时,只能使用片内部局部总线上的SRAM。(5)存储数据的对齐方式,如果一个数据是从偶地址开始存储,则是半字对齐,否则非半字对齐。如果一个数据是从被4整除的地址开始对齐,则是字对齐,否则是非半字对齐
发表于 2018-06-27 20:38:03
LPC17XX之IAP升级

LPC1768 IAP写入bin格式程序不能启动的解决办法

在为LPC1768做一个CAN总线在线升级功能的时候,使用IAP功能,将KEIL转换生成的bin文件写入lpc1768内部flash的起始地址,然后跳转到这个位置启动。自动跳转时能够正常启动,但是一复位或者断电重启就不能启动了,查找原因并求助论坛网友得到了问题原因和解决办法。程序写入内部flash时需要计算bin文件前28个字节的校验和(32位),然后将这个校验和替换bin文件第28到31字节的值,bin文件其他部分不变。计算方法:/******************************************************************* 名称    :LpcCodeChecksum
发表于 2018-06-27 20:34:07

关于LPC1768的IAP随笔

单片机的程序需要自升级,现在的IAP程序大多数的做法都是,上电先启动一个小程序,我们称之为boot程序,然后该程序会和其它的控制器或者PC进行交互,一般有串口方式,通过交互通信口将新的程序发送给MCU,由MCU对FLASH进行自编程,完成后断电或者重启即可,整个升级工作完成。本例结合LPC1768的IAP来讨论程序的转移。从之前的博客《关于LPC1768的存储地址、运行地址、向量地址》可以知道,MCU上电后,总是从0x00000000地址开始运行程序。那么boot程序往往也是从0地址开始运行。boot程序本质上也是一段普通的应用的程序,之所以叫boot程序,是因为该程序的功能主要是供引导和升级用,MCU真正要实现用的功能的程序
发表于 2018-06-27 20:32:46
关于LPC1768的IAP随笔

小广播

何立民专栏

单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved
ע39ַ ͼag콢 lolͶעʲô agֳ Űע ggٷ ɳַ ɳ Ű 7777 վٷվ GNSǮ Ԫƴ Ѷ1.5ֲ mgϷˮʱ ȫƶ Ѷ չ˾ Ȥζ ag Ǯ bbinհײ˴ȫ bbinϷͲʽ gnsվ 940 ճ淶 羺 ƱϷԪ ע mgЩ