机智云OTA过程MCU端程序设计学习(一)

1.写在前面:

    一般利用云端更新MCU端固件的机制是:云端通过一个能联网的模块(例如wifi,4G等)将固件信息传输到MCU端。整个过程也就是 云端(TCP)-->模块(串口)-->MCU。当然这其中还涉及到固件完整性的校验,传输过程的稳定性等等。通过接受双方会选择校验机制确保固件的一致性,例如CRC、MD5、Hash等。

2.关于机制云与STM32的固件更新的说明

  首先将STM32划分为四个区域:

    Bootloader:存储 Bootloader 固件,MCU 上电后首先运行该固件。
 FLAG:存储有关升级的相关标志位,Bootloader 和 APP 都需要操作该区域。
 APP:存储用户程序固件。
 APPBAK:临时存储云端下发的新固件,升级固件的一个过渡存储区。

3. 再谈谈我对这个固件更新过程的认识

     说白了就是对内部flash的操作,首先接受云端的固件存储在固件备份区,然后进行加密校验,校验通过就将标志区的有新固件更新的标志置位;校验不通过就将备份区的固件擦除,通知云端。

MCU重启后会运行boot程序,通过读取标志区的信息判断有没有固件需要更新。有就进入更新流程,没有就跳转到app程序。

在这个过程中要注意MD5值的校验和flash地址的计算,每次分片数据的大小是由MCU端决定的,这样就保证了计算偏址的灵活性。

下面是机智云官方提供的流程图

机智云OTA过程MCU端程序设计学习(一)_第1张图片

 

4.STM32的启动文件

机智云提供的文档里关于STM32启动过程的描述如下:

 机智云OTA过程MCU端程序设计学习(一)_第2张图片

总结下来就是:

 STM32的内核复位后从0x80000004出取出复位中断服务入口地址,进而跳转到main函数。

AREA    |.text|, CODE, READONLY 

; Reset handler
Reset_Handler   PROC
EXPORT  Reset_Handler             [WEAK]
IMPORT  __main
IMPORT  SystemInit
LDR     R0, =SystemInit
BLX     R0              ;BL表示跳转到R0地址,跳转前将下一条指令地址保存在LR       
LDR     R0, =__main     ;LDR表示从存储器加载一个字到寄存器
BX      R0              ;BX表示跳转到R0地址不用返回
ENDP

这里需要注意的是:复位中断服务程序的地址在栈顶地址偏移4字节的位置,后面实现地址跳变的时候会用到。
 

好了,基本的概念和一些需要关注的点就介绍完了。下篇文章我们学习app部分的程序设计思路。

你可能感兴趣的:(随笔记录,OTA,STM32,机智云)