DFU : Device Firmware Update 即固件升级
DFU可分为两种:
dual bank : 先接收后升级. 优点:升级失败可回滚 缺点:需要额外空间
single bank : 边接收边升级. 优点: 节约空间 缺点:如果出错不能回滚版本
最新SDK(v15.3.0)会根据当前代码空间,自动选择使用dual bank或single bank
Nordic 支持三种升级方式: UART, USB, BLE
Nordic要实现DFU需要两个独立的代码:bootloader 和 app
下面为使用流程:
1. Bootloader
Nordic有两种bootloader: 开放式和安全式
开放式不做安全校验
安全式要做安全校验,只有校验通过的才生效
1.1 生成micro-ecc算法库
加密bootloader会使用到micro-ecc算法,这需要我们手动编译并生成micro-ecc算法库
确保本机装有git和GCC
进入文件夹SDK根目录\external\micro-ecc运行build_all脚本即可自动生成micro-ecc算法库
1.2 生成公钥及私钥
例程位置: SDK根目录\examples\dfu\secure_bootloader
安全式bootloader需要Key
私钥生成命令:nrfutil keys generate priv.pem
公钥生成命令:nrfutil keys display --key pk --format code priv.pem --out_file dfu_public_key.c
priv.pem 就是私钥, 名字可改,生成升级包时需要使用此私钥,必需妥善保管,否则将永远不能升级
dfu_public_key.c 就是公钥
1.3 生成bootloader hex
将生成的公钥dfu_public_key.c覆盖SDK根目录\examples\dfu下的同名文件,并生成bootloader.hex
2. App
生成自己的应用程序,假如取名为: app.hex
3. settings
生成setting
nrfutil settings generate --family NRF52 --application app.hex --application-version 1 --bootloader-version 1 --bl-settings-version 1 settings.hex
4. 生成最终烧录Hex
合并hex: setting, bootloader, softdevice, app
mergehex --merge bootloader.hex settings.hex --output bl_temp.hex
mergehex --merge bl_temp.hex app.hex s132_nrf52_7.0.1_softdevice.hex --output whole.hex
5. 生成升级zip包
nrfutil pkg generate --application app_new.hex --application-version 2 --hw-version 52 --sd-req 0xCB --key-file priv.pem APP_DFU_PACKET.zip
--application表示新固件hex文件
--key-file 表示签名用的私钥文件
--sd-req表示协议栈softdevice版本 可以通过命令nrfutil pkg generate --help获得列表
6. 使用nRFConnect DFU
nRFConnect支持DFU功能,直接选择待升级的升级zip包APP_DFU_PACKET.zip即可完成升级.
具体流程见 强大的辅助软件nRFConnect
7. 手机端DFU
官方提供Android 及 iOS平台的DFU库:
- Android版DFU库:https://github.com/NordicSemiconductor/Android-DFU-Library
- iOS版DFU库:https://github.com/NordicSemiconductor/IOS-Pods-DFU-Library
官方还提供一个开源app nRF Toolbox,内集成多个功能,包含DFU:
- Android版本 https://github.com/NordicSemiconductor/Android-nRF-Toolbox
- iOS版本: https://github.com/NordicSemiconductor/IOS-nRF-Toolbox

本文详细介绍Nordic设备固件升级(DFU)流程,包括dualbank与singlebank的区别、bootloader生成步骤、设置生成、升级包制作及使用nRFConnect进行升级的方法。
1万+

被折叠的 条评论
为什么被折叠?



