nRF52832 DFU空中升级

2018年9月11日

SDK版本:nRF5_SDK_15.0.0_a53641a
SoftDevice版本:s132_nrf52_6.0.0

官方论坛中有官方人员写了Blog说明:Getting started with Nordic's Secure DFU bootloader, a step by step guide

DFU: Device Firmware Upgrade

前期准备

sdk12以后,DUF功能对升级文件进行了ECDSA签名加密,防止误升级未授权的程序.

nRF52832使用micro-ecc开源软件实现ECDSA

安装make

为了使用sdk中micro-ecc的安装脚本,需要安装make及git

安装git

不多说,这个应该都已经装好了

安装micro-ecc

以上两个安装后,直接执行sdk路径中的[SDK]\external\micro-ecc\build_all.bat脚本即可安装micro-ecc

安装nrfutil

签名需要秘钥,需要使用nrfutil生成秘钥.

nrfutil在nRFgo Studio工具安装路径中有,但是版本非常低(0.x.x),为了使用最新版本,自己安装一个.

nrfutil是一个python工具,所以需要先安装Python下载地址,注意:必须使用2.7以上版本,但是不能使用3.0以上版本,也就是2.7-3.0之间的版本~

python安装完成后,在python路径使用python -m pip install nrfutil安装nrfutil

目前(2018年9月11日)安装的最新版本为3.5.1.

nrfutil会安装在python路径下的Scripts文件夹内,如果不配置nrfutil的环境变量,需要到此文件夹执行nrfutil命令(不建议).

生成秘钥文件

这些命令可以在sdk文档 nRF5 sdk-Libraries-Bootloader and DFU modules-Device Firmware Update process-Working with keys 中也有说明.

生成自己的私钥:
nrfutil.exe keys generate private.pem
根据私钥生成公钥:
nrfutil.exe keys display --key pk --format code private.pem --out_file public_key.c

会在当前路径下生成文件public_key.c,需要将此文件内数组uint8_t pk[64]复制到bootloader工程的相应位置,一般在dfu_public_key.c中

烧录协议栈、应用层、bootloader

生成bootloader setting

这个文件包含了app version,bootloader version,hw version

命令如下:注意hex文件名称

nrfutil.exe settings generate --family NRF52 --application nrf52832_xxaa.hex --application-version 0 --bootloader-version 0 --bl-settings-version 1 bootloader_settings.hex

合并hex文件:

合并BootLoader文件和softdevice文件:

mergehex.exe --merge nrf52832_xxaa_bootloader.hex s132_nrf52_4.0.2_softdevice.hex --output production_final1.hex 

将上一个合并文件与app程序合并:

mergehex.exe --merge production_final1.hex nrf52832_xxaa_app.hex --output production_final2.hex

将上一个合并文件与配置settings 文件合并:

mergehex.exe --merge production_final2.hex bootloader_settings.hex --output production_final.hex

之后可以删除中间生成的两个hex文件

del production_final1.hex
del production_final2.hex

最后的production_final.hex文件就是我们需要烧录的文件了.

烧录hex文件

使用nRFgo 擦除flash,使用program application烧录这个文件即可,烧录完成后可以看到flash有softdevice application 及bootloader,且程序已经可以正常运行

生成DFU 升级文件

Application

先是应用层
执行命令:

nrfutil pkg generate --hw-version 52 --sd-req 0xa8 --application-version 0xff --application nrf52832_xxaa_app.hex --key-file private.pem nrf52832_xxaa.zip

其中 --sd-req 参数为SoftDevice的Firmware ID,可以使用nRFgo烧录SoftDevice后,在flash表中看到

Region 0 (SoftDevice)
Size:152kB
Firmware:
Unknown(Id:0x00a8)

最后的id即为需要的值

生成的nrf52832_xxaa.zip即为我们需要的文件

DFU

这些命令可以在sdk文档 nRF5 sdk-Libraries-Bootloader and DFU modules-Device Firmware Update process-Validation 中查询到.
文件生成后就可以DFU升级了

使用自己设置的方式使nrf52832进入DFu模式,手机使用nRF Connect软件连接DFU的蓝牙设备(默认名称为DFUTARG),点击右上角DFU按钮,选择zip文件,选择上一步的zip文件即可升级,升级完成nrf52832自动重启运行新固件.

DFU 手机操作截屏.png

总结

将以上命令总结一下,下次用的时候就直接在这里复制了

@echo off

copy "D:\Documents\Desktop\nRF52832\nRF5_SDK_15.0.0_a53641a\examples\dfu\secure_bootloader\pca10040_ble\arm5_no_packs\_build\nrf52832_xxaa_s132.hex" "bootloader.hex"
copy "E:\Program\nRF5\nRF52832_Test\_build\nrf52832_xxaa.hex" "nrf52832_xxaa_app.hex"

set path=C:\Python27\Scripts
::生成bootloader setting文件
nrfutil.exe settings generate --family NRF52 --application nrf52832_xxaa_app.hex --application-version 0 --bootloader-version 0 --bl-settings-version 1 bootloader_settings.hex

::合并bootloader softdevice
"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\mergehex.exe" --merge bootloader.hex "D:\Documents\Desktop\nRF52832\s132_nrf52_6.0.0\s132_nrf52_6.0.0_softdevice.hex" --output production_final1.hex
::再合并application 
"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\mergehex.exe" --merge production_final1.hex nrf52832_xxaa_app.hex --output production_final2.hex
::合并bootloader setting
"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\mergehex.exe" --merge production_final2.hex bootloader_settings.hex --output production_final.hex

::删除中间文件
del bootloader_settings.hex
del production_final1.hex
del production_final2.hex


::"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\nrfjprog" -f NRF52 --eraseall
::"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\nrfjprog" f NRF52 --program "production_final.hex" --verify
::"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\nrfjprog" -f NRF52 --reset

nrfutil pkg generate --hw-version 52 --sd-req 0xa8 --application-version 0xff --application nrf52832_xxaa_app.hex --key-file private.pem nrf52832_xxaa_app.zip
pause

你可能感兴趣的:(nRF52832 DFU空中升级)