IAP:物联网终端软件升级技术
摘要:IAP是利用自己的程序代码实现升级程序(新的APP)从外部接口(可以是串口、I2C、SPI、网口等等)写入到flash中,再通过flash读写操作,将新的APP覆盖原有APP程序,在重新从新的APP入口位置启动我们的应用程序,同时也负责IAP代码的修改和迭代。
现在升级已经成为IoT领域边缘升级的基本技术,广泛被现在流行的OTA技术就是其中之一。因为物联网终端会和互联网技术相关,软件迭代速度会比传统制造业高很多,这样就对非现场升级提出了要求,在行业内形成以OTA为主流的升级方式及升级标准。
物联网终端多使用的经济型的MCU,这个类的MCU一般有三种程序写入方式:
ISP:In System Programing
- 在系统编程(使用芯片提供的引导程序(Bootload)加上外设接口进行烧录)
IAP:In applicating Programing
- 在应用编程(软件自身实现在线电擦除和编程的方法,不使用任何工具。程序通常分成两块,分别为引导程序和应用程序)
ICP:In Circuit Programing
- 在电路编程(使用JTAG/SWD接口进行烧录,如J-Link烧录器和J-Flash软件配合使用)
ICP、ISP都是用在厂家在调试过程烧录程序和成片烧录程序的芯片编程方法,在制成后一般利用IAP的方式更加自由的对自己的芯片就行升级。
IAP
若由ROM执行程序,如支持IAP的单芯片能够运用自修改代码进行程序升级,也能对负责IAP功能的代码进行修改或删除从而失去IAP功能。IAP不需要芯片厂家给出特殊的支持,只需要提供FLASH操作、通信接口操作、中断矢量偏移操作和复位操作就可以了。
IAP的原理与实现
IAP是利用自己的程序代码实现升级程序(新的APP)从外部接口(可以是串口、I2C、SPI、网口等等)写入到flash中,再通过flash读写操作,将新的APP覆盖原有APP程序,在重新从新的APP入口位置启动我们的应用程序,同时也负责IAP代码的修改和迭代。
在这里,首先在我们的代码空间,一部分的是我们用于升级的程序IAP,另一部分是我们的应用程序APP,例如如下图进行分配:IAP通过ISP或是ICP方式进行烧录,APP初版通过三种方式进行烧写,在需要升级时通过IAP进行升级。

我们先来看看 Cortex正常的程序运行流程,如下图所示:内部闪存(FLASH)地址起始于 0x08000000,一般情况下,程序文件就从此地址开始写入。
此外芯片是基于Cortex-M内核的微控制器,其内部通过一张“中断向量表”来响应中断,程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序完成启动,而这张“中断向量表”的起始地址是 0x08000004。
当中断来临,芯片的内部硬件机制亦会自动将 PC 指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断服务程序。
芯片复位后,先从 0X08000004 地址取出复位中断向量的地址,并跳转到复位中断服务程序,如图标号①所示;在复位中断服务程序执行完之后,会跳转到我们的main 函数,如图标号②所示;而我们的 main 函数一般都是一个死循环,在 main 函数执行过程中,如果收到中断请求(发生重中断),此时芯片强制将 PC 指针指回中断向量表处,如图标号③所示;然后,根据中断源进入相应的中断服务程序,如图标号④所示;在执行完中断服务程序以后,程序再次返回 main 函数执行,如图标号⑤所示

当基于IAP设计的程序启动流程如下图:芯片复位后, 还是从 0X08000004 地址取出复位中断向量的地址,并跳转到复位中断服务程序,在运行完复位中断服务程序之后跳转到 IAP 的 main 函数,如下图标号①所示,在执行完 IAP 以后(即将新的 APP 代码写入预先定义的 FLASH,灰底部分。
新程序的复位中断向量起始地址为 0X08000004+N+M),跳转至新写入程序的复位向量表,取出新程序的复位中断向量的地址,并跳转执行新程序的复位中断服务程序,随后跳转至新程序的 main 函数,如下图标号②和③所示,同样 main 函数为一个死循环,并且注意到此时芯片的 FLASH,在不同位置上,共有两个中断向量表。
main 函数执行过程中,如果 CPU 得到一个中断请求, PC 指针仍强制跳转到地址0X08000004 中断向量表处,而不是新程序的中断向量表,如下图标号④所示;程序再根据我们设置的中断向量表偏移量,跳转到对应中断源新的中断服务程序中,如图标号⑤所示;在执行完中断服务程序后,程序返回 main 函数继续运行,如图标号⑥所示。这样就完成程序设计和跳转的动作。

LiteOS的OTA方案
LiteOS是利用华为云实现物联网终端的升级的工作,底层的原理与上面介绍的移植,不过因为是物联网,所以程序是通过Wi-Fi、4G、NB等无线通讯技术下载到芯片实现软件的升级,具体可以在博客检索相关关键词获取,有很多对应的解释。大致原理如下图:分为SOTA和FOTA两种技术,即固件和软件都可以分别进行升级操作,然后将程序编译好的bin文件,通过华为云IoT平台进行打包发送到物联网终端进行升级操作。

附录:
华为LiteOS官方表述升级参考链接:https://support.huaweicloud.com/usermanual-iothub/iot_01_0027.html
本文分享自华为云社区《物联网终端软件升级技术---IAP(因芯片类型较多,本文仅针对STM32的Cortex-M系列)》,原文作者:o0龙龙0o 。
IAP:物联网终端软件升级技术的更多相关文章
- EPON ONU软件升级的若干优化方案
1 说明 目前EPON ONU软件升级主要有IP方式(如SNMP/TR069)和TFTP+OAM两种.前者需占用大量IP地址,且配置ONU的IP地址需要手工操作,给业务开通和系统维护带来较大不便:后者 ...
- 【swupdate文档 三】SWUpdate: 嵌入式系统的软件升级
SWUpdate: 嵌入式系统的软件升级 概述 本项目被认为有助于从存储媒体或网络更新嵌入式系统.但是,它应该主要作为一个框架来考虑,在这个框架中可以方便地向应用程序添加更多的协议或安装程序(在SWU ...
- 以软件定义物联网芯片,以技术融合推动LPWAN2.0泛在物联
作为数字化产业重要的基础设施之一,物联网迎来了黄金发展期.物联网通信技术通过数据的采集.分析.输出,从浅层次的互联工具和产品深化,到成为重塑生产组织方式的基础设施和关键要素,正深刻地改变着传统产业形态 ...
- TODO:软件升级的那些事
TODO:软件升级的那些事 软件升级,指软件从低版本向高版本的更新.由于高版本常常修复低版本的部分BUG,所以经历了软件升级,一般都会比原版本的性能更好,得到优化的效果,用户也能有更好的体验. 最近常 ...
- JLink软件升级到4.92之后,Jlink不能用了
JLink软件升级到4.92之后,Jlink不能用了 情景描述: Jlink软件升级到4.9 ...
- MTM量身定制系统 - 富友ERP产品 - 信息化推动服装行业管理软件升级
MTM量身定制系统 - 富友ERP产品 - 信息化推动服装行业管理软件升级 国内第一款量体定制管理系统 结合富友软件10年服装行业经验和多家大型量身定制企业管理经验,推出的 ...
- NSIS:制作软件升级安装包
原文 NSIS:制作软件升级安装包 相信不是每个人写的软件都只发布一次就可以了,肯定要有修改和维护的情况发生.在这种情况下,您可能就需要一个软件的升级安装包了. 现在,我们就来一步步把这个安装包做 ...
- 某MDU产品OMCI软件升级加速方案
说明 本文基于某GPON MDU产品的当前情况,提出OMCI升级的加速方案. 因时间仓促和水平限制,文中难免存在错漏和不足之处,敬请指正. 一 问题提出 根据G.988标准相关描述,软件升级过程可分 ...
- STM32+IAP方案 实现网络升级应用固件
关注了这个概念有些日子了,这段时间总算有机会实战==网络升级应用固件,这里记录下遇到的问题,及解决方案. 原理与网上流传的串口作为传输手段 一致:不同之处,无非我这里使用了网络设备传输.==(lwip ...
- C语言学习书籍推荐《C语言接口与实现:创建可重用软件的技术》下载
<C语言接口与实现:创建可重用软件的技术>概念清晰.实例详尽,是一本有关设计.实现和有效使用C语言库函数,掌握创建可重用C语言软件模块技术的参考指南.书中提供了大量实例,重在阐述如何用一种 ...
随机推荐
- Shuffle 题解
Shuffle 题目大意 给定一个长度为 \(n\) 的 01 序列 \(a\),你可以进行至多一次以下操作: 选定 \(a\) 的一个连续段,满足连续段内恰好有 \(k\) 个 \(1\),将该连续 ...
- [ABC201D] Game in Momotetsu World 题解
Game in Momotetsu World 题目大意 在一个 \(n\times m\) 的网格中,存在红色和蓝色两种格子,红色格子用 - 表示,蓝色格子用 + 表示. 现在 Takahashi ...
- tunm二进制协议在python上的实现
tunm二进制协议在python上的实现 tunm是一种对标JSON的二进制协议, 支持JSON的所有类型的动态组合 支持的数据类型 基本支持的类型 "u8", "i8& ...
- Redis平台-整合PHP
1.Redis的相关介绍: 定义: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合 ...
- 聊聊RNN与seq2seq
seq2seq模型也称为Encoder-Decoder模型.顾名思义,这个模型有两个模块--Encoder(编码器)和Decoder(解码器).编码器对输入数据进行编码,解码器对被编码的数据进行解码. ...
- Git、GitHub、Gitlab的区别以及与SVN的比较
概念解析 Git Git是一个开源的分布式版本控制系统(Version Control System,VCS),可以有效.高速地处理项目版本管理. 版本控制是一种记录一个或若干文件内容变化,以 ...
- 有一种浪漫,叫接触Linux
大家好,我是五月. 嵌入式开发 嵌入式开发产品必须依赖硬件和软件. 硬件一般使用51单片机,STM32.ARM,做成的产品以平板,手机,智能机器人,智能小车居多. 软件用的当然是以linux系统为蓝 ...
- 【uniapp】【外包杯】学习笔记day06 | 微信小程序导航栏的制作并推送的到码云【黑】
先创建分支 格式化快捷键 shift+alt+f
- h5移动端使用video实现拍照、上传文件对象、选择相册,做手机兼容。
html部分 <template> <div class="views"> <video style="width: 100vw; heig ...
- WPF DataGrid真正意义上开箱即用的原生可动态更新全选状态的DataGridCheckBox
本文由 飞羽流星(Flithor/毛茸茸松鼠先生/Squirrel.Downy)原创,欢迎分享转载,但禁止以原创二次发布原位地址:https://www.cnblogs.com/Flithor/p/1 ...