nRF52 BLE OTA DFU

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 按钮,选择升级镜像文件,等待升级后重启即可。

附: 参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容