IAP:物联网终端软件升级技术

举报
o0龙龙0o 发表于 2021/03/09 14:12:05 2021/03/09
【摘要】 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 函数执行,如图标号⑤所示

1801693-20201010151708252-1332827481.png

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

LiteOS的OTA方案

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

附录:

华为LiteOS官方表述升级参考链接:https://support.huaweicloud.com/usermanual-iothub/iot_01_0027.html

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。