基于机智云物联网平台MCU模式基础教程及远程OTA

原标题:基于机智云物联网平台MCU模式基础教程及远程OTA

编写背景:

用户如果将开发了的产品发布上线销售,后期需要更新固件和程序,就需要用到远程OTA固件升级,就能对已发布的产品进行远程升级。

材料准备:

1.机智云4G模组GC211,此模组采用中移模组ML302,需烧录机智云GAgent固件,可在机智云淘宝店铺购买或者联系商务获取,此模组支持网络,移动,联通,电信4G网络,可前往机智云官方和淘宝店铺购买。https://shop159680395.taobao.com/

2.秉火【F103开发板-指南者】

正文:

云端部署

创建新产品,可根据自己需求选择。

添加如下数据点,可根据自己需求

生成STM32F103代码下载备用

简述STM32 启动

ARM7/ARM9 内核的控制器在复位后,CPU 会从存储空间的绝对地址0x000000 取出第一条指令执行复位中断服务程序的方式启动,即固定了复位后的起始地址为0x000000(PC =0x000000)同时中断向量表的位置并不是固定的。然而,Cortex-M3 内核启动有3 种情况:

1、通过boot 引脚设置可以将中断向量表定位于SRAM 区,即起始地址为0x2000000,同时复位后PC 指针位于0x2000000 处;

2、通过boot 引脚设置可以将中断向量表定位于FLASH 区,即起始地址为0x8000000,同时复位后PC 指针位于0x8000000 处;

3、通过boot 引脚设置可以将中断向量表定位于内置Bootloader 区;

Cortex-M3 内核规定,起始地址必须存放堆顶指针,而第二个地址则必须存放复位中断

入口向量地址,这样在Cortex-M3 内核复位后,会自动从起始地址的下一个32 位空间取出复位中断入口向量,跳转执行复位中断服务程序。对比ARM7/ARM9 内核,Cortex-M3 内核则是固定了中断向量表的位置而起始地址是可变化的。

总结一下STM32 的启动文件和启动过程。首先对栈和堆的大小进行定义,并在代码区的起始处建立中断向量表,其第一个表项是栈顶地址,第二个表项是复位中断服务入口地址。

然后在复位中断服务程序中跳转C/C++标准实时库的main 函数,完成用户堆栈等的初始化后,跳转.c 文件中的main 函数开始执行C 程序。假设STM32被设置为从内部FLASH 启动(这也是最常见的一种情况),中断向量表起始地位为0x8000000,则栈顶地址存放于0x8000000处,而复位中断服务入口地址存放于0x8000004 处。当STM32 遇到复位信号后,则从0x80000004 处取出复位中断服务入口地址,继而执行复位中断服务程序,然后跳转main函数,最后进入mian 函数。

分析下OTA 需求,我们将建立两个工程,分别是Bootloader 还有APP,我们将Bootloader下载到FLASH 空间0x8000000 地址处,那么STM32 启动后会首先执行我们的Bootloader 程序,然后就可以按照我们意愿实现OTA 了。

FLASH 区间划分

根据需求,我们将STM32F103VET6 这个芯片Flash 空间划分出4 个区域:Bootloader、FLAG、APP、APP_BAK。四个区间作用描述如下:

 Bootloader:存储Bootloader 固件,MCU 上电后首先运行该固件。

 FLAG:存储有关升级的相关标志位,Bootloader 和APP 都需要操作该区域。

升级标志位(2B)

固件大小(4B)

MD5加密数据(16B)

 APP:存储用户程序固件。

 APPBAK:临时存储云端下发的新固件,升级固件的一个过渡存储区。

STM32F103VET6分区方案如下图所示:

BOOTLOADER分区部分

Bootloader程序流程

Bootloader 的主要职能是在有升级任务的时候将 APPBAK 分区里面的固件拷贝到 APP 区域。当然,这期间需要做很多的工作,比如升级失败的容错等等。具体的流程可以参考图示。需要注意的是,在校验 MD5 正确后开始搬运固件数据期间,MCU 出现故障(包括突然断电),MCU 应发生复位操作(FLAG 区域数据未破坏),复位后重新开始执行 Bootloader,从而避免 MCU 刷成板砖。

Bootloader程序配置

为了方便构架,此处我采用cubemx构建项目,生成keil工程。

创建STM32F103VE项目

配置外部时钟

配置时钟72M

10.在产品的OTA界面进行固件升级,升级配置如下,手动推送需要主动更新,静默推送自动更新,其余按照要求配置即可。

到此本教程结束,如有疑问联系机智云技术支持,15120205205(QQ,微信,电话同号)

FLASH驱动编写

Flash.c

1

复制代码

flash.h

1.

复制代码

APP驱动编写

app.c

1.

复制代码

app.h

1.

复制代码

gagent_md5驱动编写

gagent_md5.c

1.

复制代码

gagent_md5.h

1.

复制代码

免责声明:非本网注明原创的信息,皆为程序自动获取互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如该页面侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件12小时内删除。