概述
本文以安信可 Ai-WB2-12F 为例介绍安信可模组从生成 OTA 固件到通过 WiFi 升级固件的全过程。
固件增加 OTA 功能
要开启 OTA,固件必须要包含以下功能:
- 蓝牙或命令行配网功能
- OTA 命令行组件(ota_http_cmd)
我们以demo_ota
项目为例。首先,复制原厂 SDK 的customer_app/system/ota/demo_ota
到安信可 WB2 模组 SDK 的application
目录下,做如下修改:
applications/demo_ota/Makefile
对应行的内容修改如下:
BL60X_SDK_PATH ?= $(BL60X_SDK_PATH_GUESS)/../../../..
BL60X_SDK_PATH ?= $(BL60X_SDK_PATH_GUESS)/../../..
applications/demo_ota/proj_config.mk
中新增:
CONFIG_LINK_ROM=1
对于已经做好配网灯功能的现有项目,我们只需要复制demo_ota
项目中的bl_http_ota.c
和bl_http_ota.h
到现有项目,编译后即可增加 OTA 命令行功能,也可以直接调用其中的 ota_http_cmd()
函数模拟命令行传参调用 OTA 命令行组件进行升级。
生成 OTA 固件
- 构建项目,生成烧录固件:
make -j
- 生成 OTA 固件有两种方法:
- 直接使用
tools/flash_tool/bflb_iot_tool
进行烧录,烧录过程会自动在tools/flash_tool/chips/bl602/ota
目录下生成 6 种 OTA 固件,分别是:- FW_OTA.bin:在编译生成的 bin 的头部追加 4K bytes 的 Boot2 Head
- FW_OTA.bin.hash:在 FW_OTA.bin 尾部追加对其计算的 32 bytes的 Hash 值(sha256)
- FW_OTA.bin.ota:在 FW_OTA.bin 的头部追加 512 bytes 的 OTA Head
- FW_OTA.bin.xz:对 FW_OTA.bin 进行 xz 压缩
- FW_OTA.bin.xz.hash:在 FW_OTA.bin.xz 尾部追加对其计算的 32 bytes 的 Hash 值(sha256)
- FW_OTA.bin.xz.ota:在 FW_OTA.bin.xz 头部追加 512 bytes 的 OTA Head
- 使用
tools/flash_tool/bflb_iot_tool
,在make
结束后生成的烧录命令的基础上加上--build
命令手动生成固件。
搭建 HTTP 服务器
OTA 升级时,固件会从 HTTP 服务器下载 OTA 固件进行升级,因此本机需要先搭建好 HTTP 服务器供模组下载固件。
搭建 HTTP 服务器的过程非常简单,只需要安装好 Python 3,然后在 tools/flash_tool/chips/bl602/ota
下执行以下命令即可:
python3 -m http.server 9090
进行 OTA 升级
烧录好固件:
make flash
用 USB 串口等连接模组,使用 Xshell 或者 Putty 打开串口,波特率 115200,敲回车即可进入模组的命令行,首先启用 WiFi 功能:
stack_wifi
然后使用命令行连接 WiFi:
wifi_sta_connect TEST 12345678
如图,获取到 IP 地址后,我们便可以执行升级操作。执行命令:
ota_http_cmd 192.168.137.1
如图,模组从 HTTP 服务器下载固件并校验,校验成功后开始刷写 Flash。
刷写完成后自动重启进入新固件。