介绍通过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被破坏,也能轻松解决更新问题。

精密激光加工技术在运动控制领域的应用研究
无人机的分类和植保无人机动力系统的组成与特点分析
2020年国内全年新增58万座5G基站,电联共建共享成效卓著
如何让您的电子系统实现可靠的安全认证?
高低压配电房智能一体化辅助监控系统
介绍通过IAP的在线升级方法
三维扫描与人工机械零件测绘成本对比分析
压力变送器M5156-C2547U-060BG的使用状况
物联网大数据守护城市生命线
AGV小车如何自动充电
显卡的类型有哪些显卡有哪些插槽
全集成开关放大器SA306的性能特点及应用
PLC在中空吹瓶机中的应用
iPhone8亮金版售价高达8.8万?国内用户必须要买?
高低温湿热试验箱的清洗步骤
以太坊公共区块链生态系统Non-Zero介绍
无线网络不稳定因素分析
II-VI和Coherent的合并将创造一个独特的全球战略领导者
全国首款海陆空通用、卫星手机融合通信产品问世,全域覆盖
SEMICON China 2023| 加速科技将携全系新品重磅亮相,欢迎打卡加速科技展台