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升级

您可能还喜欢...