NRF52832 DFU功能
使用nrfutil工具生成私钥和公钥
- 默认使用的加密算法是ECDSA_P256_SHA256
- 生成私钥指令: nrfutil.exe keys generate private.key
- 根据私钥生成公钥:nrfutil keys display –key pk –format code private.key –out_file public_key.c
编译Bootloader:
- 到该目录下\nRF5_SDK_15.3.0_59ac345\external\micro-ecc 运行build_all.bat编译micro-ecc
- 把生成的公钥public_key.c替换掉\nRF5_SDK_15.3.0_59ac345\examples\dfu该目录下的dfu_public_key.c
- 编译\nRF5_SDK_15.3.0_59ac345\examples\dfu\secure_bootloader\pca10040_ble该工程生成经过添加自己公钥的bootloader的hex文件
测试bootloade:
经过上面的步骤就可以把softdevice和bootloader烧录进52832中,正常情况下打开手机nrftoolbox手机app可以搜索到DfuTarg的BLE设备
- 使用jlink时候用如下指令来进行烧录
nrfjprog -f NRF52 –program ./softdevice_s132.hex–chiperase
nrfjprog -f NRF52 –program ./bootloader.hex
注意:烧录bootloader的时候不要加擦除指令和直接使用make flash进行写入,用jflash工具加载bootloader的hex会发现在0x0-0x1000第一页地址包含的有数据,而这个地址也是存放MBR的区域,如果带擦除写入就会造成MBR被擦除进而也无法进入bootloader
- 也可以用daplink+pyocd来进行烧录,烧录指令如下:
pyocd -t nrf52 -ce ./softdevice_s132.hex
Pyocd -t nrf52 -se ./bootloader.hex
生成DFU.zip包:
升级pack需要包含:升级hex文件、init数据、包签名
- 准备app的hex文件,编译自己的应用程序,并确保该应用程序可以在没有bootloader的时候能正常运行
- 把前面生成的私有密钥private.key和和app.hex放在同一个目录下
- 使用指令来生成zip文件:
nrfutil pkg generate –hw-version 52–sd-req 0xB7 –application-version 0x01 –application app.hex –key-fileprivate.key dfu_app.zip
- 对指令参数的解释:
- –hw-version: nrf52就填52
- –application-version: 应用程序版本号,升级时版本号要大于等于原固件的应用版本号
- –sd-req: soft_device版本号,S132 SoftDevice v6.1.1(v15.3.0)对应的编号为:0xB7,对应的编号可以使用该指令查询nrfutil pkg generate –help
- –application: app的hex文件
- –key-file: 私钥文件,用来给升级包进行签名
测试DFU功能:
bootloader和dfu_app.zip都准备好久可以进行dfu测试了
- 烧录softdevice:nrfjprog -f NRF52 –program ./softdevice_s132.hex –chiperase
- 烧录bootloader:nrfjprog -f NRF52 –program ./bootloader.hex
- 把dfu_app.zip发送到手机nrf toolbox应用程序中
- 从手机nrf toolbox找到dfutarg的设备,并进行dfu升级