STM32F769DK 云端固件升级例程使用说明
1.前言
对于一个物联网应用,远程监控设备状态、远程更新设备固件都是其要包含的典型基本功能。本示例在百度天工 IoT 平台和
STM32F769 探索板上实现了上述功能,并有以下特性:
支持 MQTTHTTP 协议
支持安全传输(TLS)支持应用数据的 Json 格式解析
后台下载固件(不影响前台应用程序运行)
断点续传
固件完整性检查
支持一键恢复出厂默认固件在本示例中,STM32F769DK 板可以通过板载以太网接口或者外接的 WIFI 模块连接到百度天工
IoT 平台,与其建立 MQTT 连接:将板上的 LED 灯状态、软件版本等信息上传到云端,并可接收云端下发的 LED 控制命令、
新固件版本和下载地址。根据接收到新固件下载地址,通过 HTTP 协议从对应的服务器下载新固件。下载完成后程序通过
LCD 屏向用户提示可用的新版本信息,用户可以通过用户按键启动新固件的升级。下载和升级过程支持固件完整性校验。
在此例程中,我们用到了百度 IoT 平台和对象存储(BOS)服务。首先需要在 IoT 平台上创建 MQTT 服务,百度 IoT 平台相当于
MQTT 服务器,STM32F769DK 板相当 MQTT 客户端。在本示例中,还用到了一个 PC 端工具 MQTT.fx,作为另一个 MQTT
客户端来向 STM32F769DK 板推送固件升级消息,接收 STM32F769DK 板发送到云端的消息并进行显示。
远程下载的固件需要保存在百度云 BOS 服务器上,然后就可以获取到对应的下载链接。这个下载地址信息,通过 PC 上的
MQTT 客户端 MQTT.fx 进行推送,STM32F769DK 板收到消息后,从百度的 BOS 服务器下载新固件。
本例程提供了 IAR 的工程。
2.系统框图
1.通过有线连接到云端
2.通过 wifi 连接到云端
3.存储区域划分
本示例用外部 QSPI Flash 保存从云端接收到的新固件和程序运行的状态。QSPI Flash 的功能区域划分如下:
地址 0 开始的 64K 字节:Info 区域,用来保存程序运行的状态以及接收到的固件下载地址和版本号等。
地址 0x00010000 开始的 4M 字节:Default Firmware 区域,用来保存默认的应用程序固件。通常可以将第一版稳定
的应用程序,烧写到 Default 区域中,用作“恢复板子出厂设置”。
地址 0x00410000 开始的 4M 字节:Download Firmware 区域,用来保存在 OTA 过程中从云端下载的当前新固件。
STM32F769 MCU 的内部 Flash 分为两部分:
地址 0x08000000 开始是 Bootloader 程序:板子复位后,先执行的是 Bootloader 的程序,之后再跳转到应用程序。
bootloader 程序会根据用户操作决定是否将 QSPI Flash 中的固件更新到 MCU 内部 Flash 中。
地址 0x08010000 开始,保存用户应用程序:它除了用户自己的功能程序之外,还包括与云端通信,以及从云端下
载新固件的程序。
4.运行环境
4.1 硬件连接部分
需要的硬件:
一块 STM32F769I-DISCO 开发板,一根 micro USB 线