2018年9月11日
SDK版本:nRF5_SDK_15.0.0_a53641a
SoftDevice版本:s132_nrf52_6.0.0
官方論壇中有官方人員寫(xiě)了Blog說(shuō)明:Getting started with Nordic's Secure DFU bootloader, a step by step guide
DFU: Device Firmware Upgrade
前期準(zhǔn)備
sdk12以后,DUF功能對(duì)升級(jí)文件進(jìn)行了ECDSA簽名加密,防止誤升級(jí)未授權(quán)的程序.
nRF52832使用micro-ecc開(kāi)源軟件實(shí)現(xiàn)ECDSA
安裝make
為了使用sdk中micro-ecc的安裝腳本,需要安裝make及git
安裝git
不多說(shuō),這個(gè)應(yīng)該都已經(jīng)裝好了
安裝micro-ecc
以上兩個(gè)安裝后,直接執(zhí)行sdk路徑中的[SDK]\external\micro-ecc\build_all.bat腳本即可安裝micro-ecc
安裝nrfutil
簽名需要秘鑰,需要使用nrfutil生成秘鑰.
nrfutil在nRFgo Studio工具安裝路徑中有,但是版本非常低(0.x.x),為了使用最新版本,自己安裝一個(gè).
nrfutil是一個(gè)python工具,所以需要先安裝Python下載地址,注意:必須使用2.7以上版本,但是不能使用3.0以上版本,也就是2.7-3.0之間的版本~
python安裝完成后,在python路徑使用python -m pip install nrfutil
安裝nrfutil
目前(2018年9月11日)安裝的最新版本為3.5.1.
nrfutil會(huì)安裝在python路徑下的Scripts文件夾內(nèi),如果不配置nrfutil的環(huán)境變量,需要到此文件夾執(zhí)行nrfutil命令(不建議).
生成秘鑰文件
這些命令可以在sdk文檔 nRF5 sdk-Libraries-Bootloader and DFU modules-Device Firmware Update process-Working with keys 中也有說(shuō)明.
生成自己的私鑰:
nrfutil.exe keys generate private.pem
根據(jù)私鑰生成公鑰:
nrfutil.exe keys display --key pk --format code private.pem --out_file public_key.c
會(huì)在當(dāng)前路徑下生成文件public_key.c,需要將此文件內(nèi)數(shù)組uint8_t pk[64]復(fù)制到bootloader工程的相應(yīng)位置,一般在dfu_public_key.c中
燒錄協(xié)議棧弓摘、應(yīng)用層痕届、bootloader
生成bootloader setting
這個(gè)文件包含了app version,bootloader version,hw version
命令如下:注意hex文件名稱
nrfutil.exe settings generate --family NRF52 --application nrf52832_xxaa.hex --application-version 0 --bootloader-version 0 --bl-settings-version 1 bootloader_settings.hex
合并hex文件:
合并BootLoader文件和softdevice文件:
mergehex.exe --merge nrf52832_xxaa_bootloader.hex s132_nrf52_4.0.2_softdevice.hex --output production_final1.hex
將上一個(gè)合并文件與app程序合并:
mergehex.exe --merge production_final1.hex nrf52832_xxaa_app.hex --output production_final2.hex
將上一個(gè)合并文件與配置settings 文件合并:
mergehex.exe --merge production_final2.hex bootloader_settings.hex --output production_final.hex
之后可以刪除中間生成的兩個(gè)hex文件
del production_final1.hex
del production_final2.hex
最后的production_final.hex文件就是我們需要燒錄的文件了.
燒錄hex文件
使用nRFgo 擦除flash,使用program application燒錄這個(gè)文件即可,燒錄完成后可以看到flash有softdevice application 及bootloader,且程序已經(jīng)可以正常運(yùn)行
生成DFU 升級(jí)文件
Application
先是應(yīng)用層
執(zhí)行命令:
nrfutil pkg generate --hw-version 52 --sd-req 0xa8 --application-version 0xff --application nrf52832_xxaa_app.hex --key-file private.pem nrf52832_xxaa.zip
其中 --sd-req
參數(shù)為SoftDevice的Firmware ID,可以使用nRFgo燒錄SoftDevice后,在flash表中看到
Region 0 (SoftDevice)
Size:152kB
Firmware:
Unknown(Id:0x00a8)
最后的id即為需要的值
生成的nrf52832_xxaa.zip即為我們需要的文件
DFU
這些命令可以在sdk文檔 nRF5 sdk-Libraries-Bootloader and DFU modules-Device Firmware Update process-Validation 中查詢到.
文件生成后就可以DFU升級(jí)了
使用自己設(shè)置的方式使nrf52832進(jìn)入DFu模式,手機(jī)使用nRF Connect軟件連接DFU的藍(lán)牙設(shè)備(默認(rèn)名稱為DFUTARG),點(diǎn)擊右上角DFU按鈕,選擇zip文件,選擇上一步的zip文件即可升級(jí),升級(jí)完成nrf52832自動(dòng)重啟運(yùn)行新固件.
總結(jié)
將以上命令總結(jié)一下,下次用的時(shí)候就直接在這里復(fù)制了
@echo off
copy "D:\Documents\Desktop\nRF52832\nRF5_SDK_15.0.0_a53641a\examples\dfu\secure_bootloader\pca10040_ble\arm5_no_packs\_build\nrf52832_xxaa_s132.hex" "bootloader.hex"
copy "E:\Program\nRF5\nRF52832_Test\_build\nrf52832_xxaa.hex" "nrf52832_xxaa_app.hex"
set path=C:\Python27\Scripts
::生成bootloader setting文件
nrfutil.exe settings generate --family NRF52 --application nrf52832_xxaa_app.hex --application-version 0 --bootloader-version 0 --bl-settings-version 1 bootloader_settings.hex
::合并bootloader softdevice
"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\mergehex.exe" --merge bootloader.hex "D:\Documents\Desktop\nRF52832\s132_nrf52_6.0.0\s132_nrf52_6.0.0_softdevice.hex" --output production_final1.hex
::再合并application
"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\mergehex.exe" --merge production_final1.hex nrf52832_xxaa_app.hex --output production_final2.hex
::合并bootloader setting
"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\mergehex.exe" --merge production_final2.hex bootloader_settings.hex --output production_final.hex
::刪除中間文件
del bootloader_settings.hex
del production_final1.hex
del production_final2.hex
::"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\nrfjprog" -f NRF52 --eraseall
::"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\nrfjprog" f NRF52 --program "production_final.hex" --verify
::"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\nrfjprog" -f NRF52 --reset
nrfutil pkg generate --hw-version 52 --sd-req 0xa8 --application-version 0xff --application nrf52832_xxaa_app.hex --key-file private.pem nrf52832_xxaa_app.zip
pause