串口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。
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 模块组成架构
(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底层已经帮你设置好。
命令行
(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
(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