功能三: 远程更新板子固件
我们前面已经预先在百度的 BOS 上放了新的固件, 并且获得了固件下载的地址是: XXXXXXX
保持 STM32F769DK 板正常运行, 并已连接到百度 IOT 服务器
在 MQTT.fx 的 publish 窗口,发布新固件信息到主题: $baidu/iot/shadow/{deviceName}/update。
比如,推送信息如下:{
“desired”: {
“sw_version”:”00030300”,
“downloading_link” : “https://xxxxxxxxxxxxxxxxxxxxx.xxxxx_APP_v0_3_3.cvt”
}
}
“sw_version”, 就是要下载的固件的版本。版本格式为:主版本号:+副版本号+测试版本号+00, 应该和 version.h 中的版本对
应。比如:有一个软件版本如下:
#define FW_VERSION_MAJOR 1
#define FW_VERSION_MINOR 1
#define FW_VERSION_PATCH 0
那么在推送信息中的版本号应该写: “01010000” 。
STM32F769DK 板子收到推送的新固件信息后,进行解析, 并与当前 QSPI 中的版本进行比较。如果比当前 QSPI 中的版本
新,则自动进行下载。
下载完成后,提示当前有新版本可用。如果需要更新 MCU, 请按蓝色 USER 按键。
用户按下蓝色 USER 按键后,程序复位。开始执行 bootloader 程序。
在 bootloader 程序中会将新的固件从 QSPI FLASH 烧写到 MCU 片上的 FLASH 中。 然后跳转执行。
在烧写固件前, 程序会检查固件的完整性。如果发现固件被损坏,则不烧写。直接跳转执行老的程序,并且会在 QSPI 的
INFO 区做相应记录。 重新从云端下载好的固件来覆盖已被损坏的固件。
|