Nordic DFU 使用教程
Nordic DFU 操作步骤
需要安装各种工具,详情见自查资料。
大概流程为:重启设备进入Bootloader,然后连接通过蓝牙连接Bootloader进行DFU,发送升级包文件。
1. 下载编译micro-ecc
从 github
上下载 micro-ecc
源码,然后通过 msys
的 gcc
进行编译。
编译前修改 components\toolchain\gcc\Makefile.windows
中工具的路径和版本号。注意路径最后面需要加 /
。
得到 external\micro-ecc\nrf52nf_keil\armgcc\micro_ecc_lib_nrf52.lib
库文件。
2. 生成 private key
和 public key
nrfutil keys generate D:\DFU\private.pem
nrfutil keys display --key pk --format code D:\DFU\private.pem --out_file D:\DFU\dfu_public_key.c
替换生成的 dfu_public_key.c
到 example\dfu\
路径下。
3. 编译烧写 Bootloader
编译工程 example\dfu\secure_bootloader\pca10040_ble\arm5_no_packs
。然后烧录Softdevice和App。将扫描到 DfuTarg 设备。
4. 升级文件打包
需要查表确认 --sd-req
参数,保证 FWID 和 协议栈版本对应,否则升级过程中,将Disconnecting。拷贝编译好的升级包文件 nrf52810_xxaa.hex
,到 D:\DFU\
目录。
nrfutil pkg generate --hw-version 52 --application-version 1 --application nrf52810_xxaa.hex --sd-req 0x0103 --key-file private.pem dfufile.zip
此时,可以连接 DfuTarg 设备进行升级,可以升级成功。但是由于我们的App中未添加 DFU 服务,将不能再次进行升级。DFU服务是用来将设备重启至Bootloader的。
5. 添加DFU服务
在自己的工程中添加 DFU 服务。
-
添加对应文件
-
添加路径
包括但不限于以下路径。具体参照自查资料内容,以及编译时的报错提示自行添加路径。
-
添加头文件
//for dfu #include "nrf_power.h" #include "nrf_bootloader_info.h" #include "ble_dfu.h" #include "nrf_dfu_ble_svci_bond_sharing.h" #include "nrf_svci_async_function.h" #include "nrf_svci_async_handler.h" // for dfu end
-
添加全局宏定义
BL_SETTINGS_ACCESS_ONLY NRF_DFU_SVCI_ENABLED NRF_DFU_TRANSPORT_BLE=1
-
添加代码
代码参考
ble_app_buttonless_dfu
工程代码。 -
升级文件生成脚本
:: 拷贝App del D:\DFU\nrf52810_xxaa.hex del D:\DFU\dfufile*.zip copy ..\arm5_no_packs\_build\nrf52810_xxaa.hex /d D:\DFU\ cd /d D:\DFU\ :: 制作升级包 nrfutil pkg generate --hw-version 52 --application-version 1 --application nrf52810_xxaa.hex --sd-req 0x0103 --key-file private.pem dfufile_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.zip :: pause