概要
硬件:nrf52832_xxAA最小核心板
软件:
Bootloader:\nRF5_SDK_17.1.0_ddde560\examples\dfu\secure_bootloader\pca10040_s132_ble_debug
App:\nRF5_SDK_17.1.0_ddde560\examples\ble_peripheral\ble_app_buttonless_dfu\pca10040\s132
softdevice:\nRF5_SDK_17.1.0_ddde560\components\softdevice\s132\hex\s132_nrf52_7.2.0_softdevice.hex
Log打印工具:j-Link RTT Viewer
参考文章:
Nordic nRF5 SDK开发环境搭建(nRF51/nRF52芯片平台):https://www.cnblogs.com/iini/p/9043565.html
详解蓝牙空中升级(BLE OTA)原理与步骤:https://www.cnblogs.com/iini/p/9314246.html
生成密钥
安装PC版nrfutil,离线版nrfutil工具安装方法:https://www.cnblogs.com/jayant97/p/17819404.html
nrfutil下载地址:https://developer.nordicsemi.com/.pc-tools/nrfutil/
poweshell不需要安装,win10系统自带。
使用命令.\nrfutil.exe,可以看到nrfutil可以正常运行了
把nrfutil.exe所在目录放在Windows环境变量中
生成您自己的私钥。键入以下命令行:
nrfutil.exe keys generate private.key
根据您的私钥生成您的公钥
nrfutil keys display --key pk --format code private.key --out_file public_key.c
private.key:
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIFtroj5HFncEr6pgq/tyizy8KEptySZLZK4c6luFfRLooAoGCCqGSM49
AwEHoUQDQgAEgdL6jmtvGHzEMZ6qQxwDFqfzjjWV6eR92l+dSMT+z0epXi5waRm3
kb1afkOUaGlIC5NmwBEAj5PvdM+BM/uRtg==
-----END EC PRIVATE KEY-----
public_key.c
/* This file was automatically generated by nrfutil on 2024-04-18 (YY-MM-DD) at 20:25:05 */
#include "stdint.h"
#include "compiler_abstraction.h"
/** @brief Public key used to verify DFU images */
__ALIGN(4) const uint8_t pk[64] =
{
0x47, 0xcf, 0xfe, 0xc4, 0x48, 0x9d, 0x5f, 0xda, 0x7d, 0xe4, 0xe9, 0x95, 0x35, 0x8e, 0xf3, 0xa7, 0x16, 0x03, 0x1c, 0x43, 0xaa, 0x9e, 0x31, 0xc4, 0x7c, 0x18, 0x6f, 0x6b, 0x8e, 0xfa, 0xd2, 0x81,
0xb6, 0x91, 0xfb, 0x33, 0x81, 0xcf, 0x74, 0xef, 0x93, 0x8f, 0x00, 0x11, 0xc0, 0x66, 0x93, 0x0b, 0x48, 0x69, 0x68, 0x94, 0x43, 0x7e, 0x5a, 0xbd, 0x91, 0xb7, 0x19, 0x69, 0x70, 0x2e, 0x5e, 0xa9
};
在nRF5_SDK_17.1.0_ddde560_PDOA\examples\dfu下,进行替换
public_key.c 替换dfu_public_key.c
生成引导加载程序
bootloader修改点:
引导加载程序需要 uECC 库来解密签名。uECC 是一个外部库,可以从 github 下载。不想构建和使用 uECC,可以使用已经预编译的 Oberon 库,使用此库,您无需自己下载和构建 uECC,也无需获得需要确认的额外许可证。要使用 Oberon,请在 sdk_config.h 中更改以下内容:
将 NRF_CRYPTO_BACKEND_MICRO_ECC_ENABLED 改为 0
将 NRF_CRYPTO_BACKEND_NRF_SW_ENABLED 改为 0
将 NRF_CRYPTO_BACKEND_OBERON_ENABLED 改为 1
并删除micro_ecc_lib_nrf52.lib 文件。
因为是最小系统核心板,所以这里注释掉,不然无法升级
然后编译生成Hex文件,将协议栈和bootloader.hex文件分别烧入最小系统板中
然后复位后通RTT查看Log
使用手机软件nRF connect查看
生成DFU数据包
将ble_app_buttonless_dfu.hex制作成DFU数据包
使用命令查看
nrfutil pkg generate --help
nrfutil pkg generate --hw-version 52 --application-version 1 --application ble_app_buttonless_dfu.hex --sd-req 0x101 --key-file private.key app_dfu_package.zip
然后直接升级就行了