51822 QFAA dfu sdk12.3 路程

几经折腾,将路程写了下来

application demo : experimental_ble_app_buttonless_dfu

bootloader demo:dfu / bootloader_secure

目标:

    Sensor + dfu

1. bootloader hex文件生成:

a .在当前目录下生成一个唯一的私钥(private_key.pem):
nrfutil keys generate private_key.pem

b.利用私钥,可以生成一个公钥:
nrfutil keys display --key pk --format code private_key.pem --out_file dfu_public_key.c

c. 将dfu_public_key.c  替换demo dfu_public_key.c 文件

d. 编译生成bootloader hex文件

2.  DFU zip文件生成

 本文使用预编译的nrfutil.exe,放到C:\nordic\nrfutil中,并将该目录加入系统环境变量,方便在cmd中调用。所需文件可以在nordic nRFgo studio 安装的目录下找到,可以拷贝这文件夹里面的内容到你自己定义的地方,随意生成你所需的文件:

Nordic Semiconductor\nrf5x\bin

生成升级包至少需要以下文件和信息:
新固件文件
私钥文件
芯片型号
支持的softdevice版本号
应用程序版本号
假设新固件为app.hex,私钥文件为private_key.pem,芯片型号为nRF51,softdevice版本号为S130_nrf51_2.0.1,固件版本号为0x02,
最终生成的升级包文件为dfu_pkg.zip,那么对应的命令为:
nrfutil pkg generate --application app.hex --hw-version 51 --sd-req 0x87 --application-version 0x02 --key-file private_key.pem dfu_pkg.zip

命令中各参数含义很直观,值得一提的是--sd-req这个参数,它表示固件运行所需的softdevice版本,0x5A表示softdevice S132_nrf52_5.1.0。

0x87 表示:S130_nrf51_2.0.1

获得sd-req的数值至少有以下几种途径:
1)通过命令nrfutil pkg generate --help查看
2)在线文档中查看
3.)烧录一个BLE程序,在nrfgo Studio中查看
 

3. 烧录生产产品:(softdevice ,bootloader , application , setting  )

a. 各个文件分别烧录 (注意烧录的顺序)

nrfutil settings generate --family NRF51 --application nrf51422_xxac.hex  --application-version 23 --bootloader-version 25 --bl-settings-version 1 settings.hex

nrfjprog.exe --eraseall --family NRF51
nrfjprog.exe --program s130_nrf51_2.0.1_softdevice.hex --family NRF51
nrfjprog.exe --program nrf51422_xxac_s130.hex --family NRF51
nrfjprog.exe --program nrf51422_xxac.hex  --family NRF51
nrfjprog.exe --program settings.hex --verify --reset --family NRF51

b. 合成一个文件烧录进行烧录
1)生成setting文件
nrfutil settings generate  --family NRF51  --application nrf51422_xxac.hex  --application-version 2 --bootloader-version 2 --bl-settings-version 1 settings.hex
2)合成文件:
mergehex --merge s130_nrf51_2.0.1_softdevice.hex  nrf51422_xxac_s130.hex --output SD_BL.hex
mergehex --merge SD_BL.hex nrf51422_xxac.hex --output SD_BL_APP.hex
mergehex --merge SD_BL_APP.hex settings.hex --output all.hex

Note :

1. 读取setting.hex 烧录在机器的位置如下,我修改了bootloader-version , 一次24,一次25 ,将整个芯片读取出来,找到了变动的位置如下,可以确定setting.hex的信息保存在地址0x3FC00 :

 

我的意图:

同一个软件,根据不同的setting 数据,接不同的硬件,问题在于,我如何读取setting 数据:

#include "nrf_dfu_types.h"

const nrf_dfu_settings_t * bootloader_settings = (const nrf_dfu_settings_t *) BOOTLOADER_SETTINGS_ADDRESS;

如下则获取app版本信息:

bootloader_settings->app_version

 

2.睡眠和低功耗相抵触处理

https://blog.csdn.net/weixin_40204595/article/details/81003823

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值