摘要:IAP 是利用本人的程序代码实现降级程序(新的 APP)从内部接口(能够是串口、I2C、SPI、网口等等)写入到 flash 中,再通过 flash 读写操作,将新的 APP 笼罩原有 APP 程序,在从新从新的 APP 入口地位启动咱们的应用程序,同时也负责 IAP 代码的批改和迭代。
本文分享自华为云社区《物联网终端软件降级技术 —IAP(因芯片类型较多,本文仅针对 STM32 的 Cortex- M 系列)》,原文作者:o0 龙龙 0o。
当初降级曾经成为 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
点击关注,第一工夫理解华为云陈腐技术~