摘要: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:物联网终端软件升级技术的更多相关文章

  1. EPON ONU软件升级的若干优化方案

    1 说明 目前EPON ONU软件升级主要有IP方式(如SNMP/TR069)和TFTP+OAM两种.前者需占用大量IP地址,且配置ONU的IP地址需要手工操作,给业务开通和系统维护带来较大不便:后者 ...

  2. 【swupdate文档 三】SWUpdate: 嵌入式系统的软件升级

    SWUpdate: 嵌入式系统的软件升级 概述 本项目被认为有助于从存储媒体或网络更新嵌入式系统.但是,它应该主要作为一个框架来考虑,在这个框架中可以方便地向应用程序添加更多的协议或安装程序(在SWU ...

  3. 以软件定义物联网芯片,以技术融合推动LPWAN2.0泛在物联

    作为数字化产业重要的基础设施之一,物联网迎来了黄金发展期.物联网通信技术通过数据的采集.分析.输出,从浅层次的互联工具和产品深化,到成为重塑生产组织方式的基础设施和关键要素,正深刻地改变着传统产业形态 ...

  4. TODO:软件升级的那些事

    TODO:软件升级的那些事 软件升级,指软件从低版本向高版本的更新.由于高版本常常修复低版本的部分BUG,所以经历了软件升级,一般都会比原版本的性能更好,得到优化的效果,用户也能有更好的体验. 最近常 ...

  5. JLink软件升级到4.92之后,Jlink不能用了

    JLink软件升级到4.92之后,Jlink不能用了                                                       情景描述: Jlink软件升级到4.9 ...

  6. MTM量身定制系统 - 富友ERP产品 - 信息化推动服装行业管理软件升级

    MTM量身定制系统 - 富友ERP产品 - 信息化推动服装行业管理软件升级 国内第一款量体定制管理系统               结合富友软件10年服装行业经验和多家大型量身定制企业管理经验,推出的 ...

  7. NSIS:制作软件升级安装包

    原文 NSIS:制作软件升级安装包 相信不是每个人写的软件都只发布一次就可以了,肯定要有修改和维护的情况发生.在这种情况下,您可能就需要一个软件的升级安装包了.   现在,我们就来一步步把这个安装包做 ...

  8. 某MDU产品OMCI软件升级加速方案

    说明 本文基于某GPON MDU产品的当前情况,提出OMCI升级的加速方案. 因时间仓促和水平限制,文中难免存在错漏和不足之处,敬请指正. 一  问题提出 根据G.988标准相关描述,软件升级过程可分 ...

  9. STM32+IAP方案 实现网络升级应用固件

    关注了这个概念有些日子了,这段时间总算有机会实战==网络升级应用固件,这里记录下遇到的问题,及解决方案. 原理与网上流传的串口作为传输手段 一致:不同之处,无非我这里使用了网络设备传输.==(lwip ...

  10. C语言学习书籍推荐《C语言接口与实现:创建可重用软件的技术》下载

    <C语言接口与实现:创建可重用软件的技术>概念清晰.实例详尽,是一本有关设计.实现和有效使用C语言库函数,掌握创建可重用C语言软件模块技术的参考指南.书中提供了大量实例,重在阐述如何用一种 ...

随机推荐

  1. MUH and Cube Walls 题解

    MUH and Cube Walls 前言 怎么题解区同质化这么严重,16 篇题解全是 差分 + KMP,就没有人写别的做法吗. (好吧其实是我一开始没想到差分才有了这么多奇怪做法) 题目大意 给定两 ...

  2. js数据结构--栈

    <!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...

  3. Istio 入门(七):出入口网关 - 负载均衡和熔断等一系列功能

    本教程已加入 Istio 系列:https://istio.whuanle.cn 目录 5,出入口网关 istio-ingressgateway 部署服务 配置 Gateway 子版本 istio-e ...

  4. C++常见算法&数据结构模版

    各种常见算法 & 数据结构模板 1. 最长不下降子序列(LIS) 1.1 \(O(n^2)\) 做法 点击查看代码 for (int i = 1;i <= n;i++) { cin &g ...

  5. 🔥🔥你以为你了解TCP协议?这些你可能不知道的细节才是关键!

    引言 在之前的内容中,我们已经详细讲解了TCP面试中最常见的问题,如三次握手和四次挥手等.而今天,我们将继续深入探讨TCP协议的其他方面,比如序列号和TCP Fast Open(TFO)等重要细节问题 ...

  6. OA、CRM、SCM、ERP之间的区别和联系是什么?

    当然,各个系统之间要集成.集成之后的东西,不叫做ERP.做ERP的人说叫ERP,做PLM的人说叫PLM,卖OA的人更愿意叫OA.其实,那个集成之后的东西,啥也不叫.   英文名 中文名 百科释义 关注 ...

  7. 2022/07/16暑期集训考试 day1

    T1 取餐号 看到数据范围 直接锁定埃氏筛和线性筛 我打的是一个优化一点的埃氏筛 #include<bits/stdc++.h> using namespace std; #define ...

  8. 使用js写一个音乐音谱图

    我们经常看到在听乐音的时候,会有音谱图随着音乐的节奏不断变化给人视觉上的享受,那么我们通过js来实现以下这个效果,下面是简单的效果图 首先我们需要有一个绘制音频的函数 function draw() ...

  9. RK3588-MPP解码详解

    一. 简介 [RK3588从入门到精通] 专栏总目录 本篇文章进行RK3588-MPP解码的详细解析 二. 环境介绍 硬件环境: ArmSoM-W3 RK3588开发板 软件版本: OS:ArmSoM ...

  10. 图文剖析 big.js 四则运算源码

    big.js,一个小型.快速的用于任意精度的十进制算术的JavaScript 库. big.js 用于解决平常项目中进行算术运算时精度丢失引起的结果不准确的问题.和 big.js 类似的两个库 big ...