【Nordic】nRF52810 OTA升级(二)–DFU如何使用

相关文章

1.《【Nordic】nRF52810 OTA升级(一)–DFU环境搭建》
2.《【Nordic】nRF52810 OTA升级(二)–DFU如何使用》
3.《【Nordic】nRF52810 OTA升级(三)–DFU理论分析》

1.前言

本篇文章是基于《【Nordic】nRF52810 OTA升级(一)–DFU环境搭建》基础上,来实现DFU OTA升级固件功能。

2.生成micro_ecc_lib_nrf52.lib库

Nordic在使用DFU进行OTA升级时会使用ECC校验认证固件,所以在DFU的工程中需要生产micro_ecc_lib_nrf52.lib

  1. 将上一篇文章介绍下载的micro-ecc-master源码复制到SDK目录下的external\micro-ecc中,并重命名为micro-ecc
    在这里插入图片描述
    在这里插入图片描述

  2. 打开Cygwin命令行
    在这里插入图片描述

  3. cd到micro-ecc工程目录:nRF5_SDK_17.0.2_d674dde\external\micro-ecc\nrf52nf_keil\armgcc
    在这里插入图片描述

  4. 执行make命令
    在这里插入图片描述
    这里因为没有找gcc工具出现报错,修改文件:nRF5_SDK_17.0.2_d674dde\components\toolchain\gcc\Makefile.windows

    GNU_INSTALL_ROOT := C:/Program Files (x86)/GNU Tools ARM Embedded/9 2019-q4-major/bin/
    GNU_VERSION := 9.2.1
    GNU_PREFIX := arm-none-eabi
    

    修改为gcc实际安装目录:

    GNU_INSTALL_ROOT := D:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2020-q4-major/bin/
    GNU_VERSION := 10.2.1
    GNU_PREFIX := arm-none-eabi
    

    再次执行make,编译成功。
    在这里插入图片描述
    在这里插入图片描述

3.生成dfu_public_key.c并加入

  1. 生成私钥
    在D盘新建一个文件夹,命名为key,在cmd命令中输入以下内容:nrfutil keys generate D:\key\private.key指令,生成私钥文件private.key
    在这里插入图片描述

    注意:要保存好私钥private.key,以后每个新固件升级时,都要先通过这个私钥进行签名,一旦丢失,DFU将无法进行

  2. 生成公钥
    输入生成公钥指令:nrfutil keys display --key pk --format code D:\key\private.key --out_file public_key.c
    在这里插入图片描述
    在桌面上生产公钥public_key.c
    在这里插入图片描述
  3. 将公钥加入工程
    将公钥public_key.c改名为 dfu_public_key.c,并将该文件替换掉目录nRF5_SDK_17.0.2_d674dde\examples\dfu下的dfu_public_key.c
    在这里插入图片描述

4.编译bootloader

因为我这里使用的nRF52810平台,所以选择dfu bootloader路径如下:
nRF5_SDK_17.0.2_d674dde\examples\dfu\secure_bootloader\pca10040e_s112_ble\arm5_no_packs
在这里插入图片描述
编译成功:
在这里插入图片描述

5.烧录bootloader和SoftDevice hex文件

使用jlink烧录bootloaderSoftDevice

  • 烧录bootloader
    nRF5_SDK_17.0.2_d674dde\examples\dfu\secure_bootloader\pca10040e_s112_ble\arm5_no_packs\_build\nrf52810_xxaa_s112.hex
  • 烧录SoftDevice
    nRF5_SDK_17.0.2_d674dde\components\softdevice\s112\hex\s112_nrf52_7.2.0_softdevice.hex

烧录完后,使用手机安装的nRF ConnectAPP搜索BLE,出现DfuTarg说明进入了bootloader模式。因为没有烧录application hex,所以直接进入了bootloader模式。
在这里插入图片描述

6.nRF Connect APP进行OTA升级

升级application的固件为前面工程编译的固件:nRF5_SDK_17.0.2_d674dde\examples\ble_peripheral\ble_app_uart\pca10040e\s112\arm5_no_packs\_build

  • 制作 OTA升级包
    nrfutil pkg generate --hw-version 52 --application-version 1 --application nrf52810_xxaa.hex --sd-req 0x0103 --key-file D:\key\private.key dfufile.zip
    在这里插入图片描述

  • 将OTA升级包dfufile.zip拷贝到手机

  • 连接BLE DfuTarg
    在这里插入图片描述

  • 点击右上角的DFU小图标,选择ZIP文件dfufile.zip
    在这里插入图片描述

  • 升级中…
    在这里插入图片描述

  • 升级成功,出现application ble的名称Nordic_UART,如下图:
    在这里插入图片描述

7.出现的错误

  • 错误1

    ..\..\..\..\..\components\libraries\crypto\backend\micro_ecc\micro_ecc_backend_ecc.h(52): error:  #5: cannot open source input file "uECC.h": No such file or directory
      #include "uECC.h"
    ..\..\..\..\..\components\libraries\bootloader\dfu\nrf_dfu_validation.c: 0 warnings, 1 error
    

    错误分析:
    提示未找到uECC.h头文件
    解决办法:
    参考2.生成micro_ecc_lib_nrf52.lib库就可以解决该问题。

  • 错误2

    compiling dfu_public_key.c...
    ..\..\..\dfu_public_key.c(20): error:  #35: #error directive: "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it"
      #error "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it"
    ..\..\..\dfu_public_key.c: 0 warnings, 1 error
    

    错误分析:
    没有有效的dfu加密公钥
    解决办法:
    参考3.生成dfu_public_key.c并加入就可以解决该问题。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值