串口DFU 升级

sdk版本:SDK_v13.1.0

DFU:固件更新(Device Firmware Update)

bootloader模块是为了实现应用程序的加载和启动,另外还可以拓展加密功能、DFU、自定义功能。

实现设备固件的升级可使用无线方式(OTA)或有线方式。本文主要说明使用串口有线方式完成固件升级。

sdk中为用户提供了bootloader示例其中包括安全式/开放式蓝牙bootloader、安全式ANT bootloader、安全式串口bootloader,bootloaer路径:nRF5_SDK_13.1.0_7ca7556\examples\dfu

nrf52 bootloader启动过程:

(1)加载softdevice

(2)初始化softdevice

(3)MBR引导的bootloader地址从UICR寄存器获取检查softdevice并读取UICR寄存器的值,判断是否下载bootloader,如果没有bootloader系统执行应用程序,如果有bootloader,MBR引导执行bootloader,然后bootloader决定是执行引导应用程序还是其他。

备注:

nrf52启动后,MBR负责开启引导,如果bootloader 已经下载,执行bootloader。

串口DFU 升级

 

MBR引导的bootloader地址从UICR寄存器获取。 you must set UICR.BOOTLOADERADDR to the correct value when you program the bootloader.这句话了解一下就可以,因为nrfprog和nrfgostudio底层已经搞定了, 当我们用nrfprog和nrfgostudio下载bootloader时,软件自动写好UICR_BOOTLOADER_START_ADDRESS。

bootloader 模块组成架构

串口DFU 升级

 

(1)nrf_bootloader

功能:引导应用程序。上图自上而下是包含关系。

(2)nrf_dfu

功能:引导接受设备固件并启动传输。

被动进入dfu模式:检测没有有效应用程序

主动进入dfu 模式:Button、GPREGRET寄存器设置特定的值、settings page配置

(3)nrf_crypto

功能:加密库为固件升级加密(安全式),用户通过nrfutil生成公钥和私钥完成加密。

flash内存配置

如下图:当添加bootloader,softdevice,bootloader settings application 时要知道他们不同的内存位置,在使用j-flash,mdk下载时注意。如果使用nrfgo_studio活nrfutil下载时,python底层已经帮你设置好。

串口DFU 升级

命令行

(1)nrfutil生成公私钥对

生成私钥:

nrfutil keys generate priv.pem

生成公钥:

nrfutil keys display --key pk --format code priv.pem --out_file dfu_public_key.c 

(2)生成micro-ecc算法库

安装git和gcc编译器,如何操作网上一堆

(3)生成bootloader_setting文件:

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

app.hex:初始原固件

(4)合成一个包

mergehex --merge bootloader.hex settings.hex --output bl_temp.hex

mergehex --merge bl_temp.hex app.hex s132_nrf52_4.0.2_softdevice.hex --output whole.hex

(5)生成新固件的zip包,通过串口将zip包更新到芯片。

nrfutil pkg generate --application appnew.hex --application-version 3 --hw-version 52 --sd-req 0x98 --key-file priv.pem SDK_app_s132.zip

串口DFU 升级

 

(6)清空内存-下载-重启

nrfjprog --eraseall -f NRF52 nrfjprog --program whole.hex --verify -f NRF52 nrfjprog --reset -f NRF52

 

(7)升级传输固件

nrfutil dfu serial -pkg SDK_app_s132.zip -p COM29 -fc 1-b 115200

 

革命尚未成功,同志还需努力。继续学习:qq:2013462220

相关文章:

  • 2021-06-04
  • 2021-11-06
  • 2022-12-23
  • 2021-10-08
  • 2021-10-09
  • 2022-12-23
  • 2021-07-26
  • 2022-12-23
猜你喜欢
  • 2021-07-29
  • 2021-08-24
  • 2021-12-23
  • 2021-05-29
  • 2022-12-23
  • 2022-12-23
  • 2021-09-19
相关资源
相似解决方案