IAP:物联网终端软件升级技术
摘要:IAP 是利用自己的程序代码实现升级程序(新的 APP)从外部接口(可以是串口、I2C、SPI、网口等等)写入到 flash 中,再通过 flash 读写操作,将新的 APP 覆盖原有 APP 程序,在重新从新的 APP 入口位置启动我们的应用程序,同时也负责 IAP 代码的修改和迭代。
本文分享自华为云社区《IAP:物联网终端软件升级技术》,原文作者:o0 龙龙 0o 。
物联网终端多使用的经济型的 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
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/f8f3649ad10297d19c6de4ce2】。文章转载请联系作者。
评论