摘要: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
点击关注,第一工夫理解华为云陈腐技术~