当前位置:首页 > 工业控制 > 电子设计自动化
[导读]在电子产品出厂前,可以通过离线烧录器,烧录夹具,或者用在线烧录器通过预留的烧录接口轻松将应用代码下载到MCU中。但是,如果产品已售出或不在研发端,又要怎样升级程序呢?今天,这里就给大家介绍通过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被破坏,也能轻松解决更新问题

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

关注、星标公众号,不错过精彩内容 作者:strongerHuang 微信公众号:strongerHuang 编码器是一种比较常见的产品(也可以理解为传感器),最常见的就是配合电机一起工作,那么,你对编码器有多了解呢? 一...

关键字: 应用编程 编码器 接口

谷歌人工智能工具用于标记图像中的内容,将不再给人们贴性别标签。 周四,《商业内幕》报道称,谷歌的云视觉应用编程接口服务(Cloud Vision API service)将不再给照片中的

关键字: 人工智能 接口 组件 应用编程

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

关键字: iap isp

写在前面:三个周之前,我突然想写一个远程升级的程序。那个时候我只是大概知道IAP的意思是在应用编程,但怎么编,我还一无所知。我给自己定下一个个阶段目标,从最基础的代码一点点写起,解决一个又一个的问题。三个

关键字: iap keil mdk 远程升级

STC89C51、52内部都自带有2K字节的EEPROM,54、55和58都自带有16K字节的EEPROM,STC单片机是利用IAP技术实现的EEPROM,内部Flash擦写次数可达100,000 次以上,先来介绍下IS...

关键字: eeprom iap stc单片机

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

关键字: iap lpc1768 上位机

搞了一天才发现 在MDK设置选项中有个"linker"选项卡 ,需要在Project->Options->Linker中将UseMemoryLayoutfromTargetDialog前面...

关键字: iap STM32 在线更新程序

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

关键字: iap STM32 使用关键点

最近涉及到STM32F0XX的IAP,找了很多相关资料,感觉不是特别清楚,所以综合一些资料分享一下。刚开始做的时候以为很简单,在程序中写了个跳转函数(跳转到System Memory,并运行MCU自己的Bootloade...

关键字: cortex-m0 iap stm32f0xx

//Cortex-M0内核中断向量共有48个。//由于M0内核不具有M3、M4内核的中断向量表重定位功能,须采用以下方式解决IAP向量问题:// 1:复制用户代码中的中断向量表到SRAM首地址// 2: 开启SRAM...

关键字: iap stm32f0 中断向量表 用户程序
关闭
关闭