1. 概述
运行时,程序运行在App状态。通过指令触发,程序切换到BootLoader状态。在BootLoader下更新App应用,完成后切换回App。
2. OTA DFU
2.0 环境搭建
需要的安装软件:
- SDK: nRF5_SDK_15.2.0_9412b96
- Bootloader: secure_dfu_ble_s140_pca10056
- Application: ble_app_buttonless_dfu_pca10056_s140
- 硬件平台:pca10056开发板
- nRF Studio v1.21.2
- Python 2.7
nrfutil
因为DFU升级过程中,使用了ECC签名和验签,所以需要先生成密钥对。
安装完Python后,输入pip instal nrfutil
指令,安装nrfutil工具。
除了通过Python安装,也可在官方github下载。(推荐此方法)
工具准备完成后,可通运行key_generate.bat
批处理,或如下指令,生成密钥对。
nrfutil keys generate priv.pem
nrfutil keys display --key pk --format code priv.pem --out_file dfu_public_key.c
uECC
编译??过程中会提示缺少uECC.h
文件,可到github上 https://github.com/kmackay/micro-ecc 下载需要的文件。下载完后,文件夹重命名为micro-ecc
,放置到SDK\external\micro-ecc
目录下。
2.1 BootLoader
BootLoader可直接使用官方 secure_bootloader
例程,测试时选择secure_dfu_ble_s140_pca10056
。编译后会提示,未设置公钥。我们把dfu_public_key.c
文件中的公钥数据,拷贝到工程中,再次编译即可。
2.2 App
测试App选择官方例程中的ble_app_buttonless_dfu
,即不需要按键,可通过指令切换实现BootLoader切换。
2.3 固件下载及镜像文件生成
BootLoader工程编译完的固件重命名为:boot.hex。
Application工程代码编译完,重命名为:app.hex。
生成bootloader settings page
Bootloader settings存储在Flash最后一个page,它将决定复位后芯片的行为,比如是进入DFU模式还是应用模式,同时它还包含image的CRC值和版本等信息。如果要求芯片复位后进入application,必须正确生成该bootloader settings hex,生成脚本见“settings_page_generate.bat”
下载softdevice、app和BootLoader
双击 mass_program.bat
脚本,完成烧写过程。
mass_program.bat
脚本内部操作分为两步:合并固件文件;下载合并后的文件。
生成DFU升级镜像
新的应用固件完成后,重命名为:app_new.hex,并复制到脚本目录。运行zip_generate.bat
脚本,会生成DFU的压缩包。
3. OTA 操作流程
测试在手机端,使用 nRF Connect 工具实现OTA。OTA主要包括两步: 切换到BootLoader状态;升级应用。
打开nRF Connect 软件后,扫描、连接到目标设备。打开DFU服务,使能Notification,发送Request,切换到BootLoader状态。
连接蓝牙名为 DfuTarg
的设备,点击右上角的 DFU
按钮,选择升级镜像文件,等待升级后重启即可。