nordic nRF52 DFU 流程 (附bootloader不能Jlink debug仿真的解决办法)

教程汇总

前期的工具安装根据官网教程来,下面从生成钥匙串开始
建议以下代码都在一个dfu文件夹内操作,便于管理

我用的是nRF52832芯片,SDK是17.0.2的版本,softdevice是17.2.0,Windows系统用powershell进行cmd操作

第一步 生成私钥 private key

在dfu文件夹地址内运行代码(后面也是一样的):

nrfutil keys generate private.key
第二步 生成公钥 public key

运行代码:

nrfutil keys display --key pk --format code private.key --out_file public_key.c
第三步 使用bootloader工程生成bootloader.hex
  1. 工程文件地址: [nRF5 SDK]/examples/dfu/secure_bootloader/…
    如果用的是debug的app,则需要使用 dfu/secure_bootloader_debug下的,否则会导致无法仿真
  2. 打开ses工程之后,用刚刚生成的publi_key.c里的内容替代工程文件内的dfu_public_key.c里的内容
  3. build solution(或者按F7),之后在output里找到hex文件,改名为bootloader.hex文件,然后复制到dfu文件夹里
第四步 生成app.hex文件

这个应该不用多说,就是咱们自己写的build一下,然后去output里拿hex文件,改成app_v1.hex移动到dfu文件夹里

第五步 生成settings.hex文件

运行代码:

nrfutil settings generate --family NRF52 --application app_v1.hex --application-version 1 --bootloader-version 1 
	--bl-settings-version 2 settings.hex

成功运行之后的页面应该类似这样:

Note: Generating a DFU settings page with backup page included. This is only required for bootloaders from nRF5 SDK 15.1 and newer.
If you want to skip backup page generation, use --no-backup option.
Generated Bootloader DFU settings .hex file and stored it in: bl_settings.hex
Bootloader DFU Settings:
* File:                     bl_settings.hex
* Family:                   nRF52
* Start Address:            0x0007F000
* CRC:                      0xF11E7E13
* Settings Version:         0x00000002 (2)
* App Version:              0x00000001 (1)
* Bootloader Version:       0x00000001 (1)
* Bank Layout:              0x00000000
* Current Bank:             0x00000000
* Application Size:         0x000220CC (139468 bytes)
* Application CRC:          0xD2D2371D
* Bank0 Bank Code:          0x00000001
* Softdevice Size:          0x00000000 (0 bytes)
* Boot Validation CRC:      0x530E99B0
* SD Boot Validation Type:  0x00000000 (0)
* App Boot Validation Type: 0x00000001 (1)
第六步 合并所有文件生成烧录hex

运行代码:

mergehex --merge settings.hex bootloader.hex s132_nrf52_7.2.0_softdevice.hex app_v1.hex 
	--output full_app_v10.hex

成功后显示类似这样:

Parsing input files.
Merging file "settings.hex" into output.
Merging file "bootloader.hex" into output.
Merging file "s132_nrf52_7.2.0_softdevice.hex" into output.
Merging file "app_v10.hex" into output.
Storing merged file.
第七步 生成升级文件包.zip

修改app代码后,从output拿到 app_v2.hex文件,移动到dfu文件夹。
运行代码:

nrfutil pkg generate --hw-version 52 --application-version 2 --application app_v2.hex --sd-req 0x0101 --sd-id 0x0101 --key-file private.key dfu_app_v2.zip 

关于sd-req和sd-id的代码,可以从softdevice的release note中找到,我这里用的是s132_nrf52_7.2.0的:

可以从softdevice的release not文件找到sd-req和sd-id





不能用Jlink仿真的解决办法

情况描述

  1. 用官方提供的buttonless_dfu工程文件下的hex文件(bootloader+setting+softdevice+app)烧录板子之后,可以用Jlink在ses里面进行实时仿真。
  2. 根据教程生成自己的key pair、bootloader.hex、app.hex、settings.hex,然后一起合成(merge)最终的hex文件,烧录成功。
  3. 再根据步骤2里的教程生成升级文件包(.zip),用nRF Connect也可以成功DFU。
  4. 这个时候连接Jlink 发现不能仿真了,烧录app可以成功,但是板子因为无法识别起始地址导致无法正确启动app程序。

解决办法

找了一些文章试了试也不能解决问题,于是Nordic的官方社区提问。通过回复,发现是因为我的app是用debug的设置,而bootloader用的是release版本设置。用bootloader_debug的工程文件再重做一遍步骤2里的教程就没问题了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值