Nordic DFU 使用教程
Nordic DFU 操作步驟
需要安裝各種工具,詳情見自查資料。
大概流程為:重啟裝置進入Bootloader,然後連線通過藍芽連線Bootloader進行DFU,傳送升級包檔案。
1. 下載編譯micro-ecc
從 github
上下載 micro-ecc
原始碼,然後通過 msys
的 gcc
進行編譯。
編譯前修改 components\toolchain\gcc\Makefile.windows
中工具的路徑和版本號。注意路徑最後面需要加 /
。
得到 external\micro-ecc\nrf52nf_keil\armgcc\micro_ecc_lib_nrf52.lib
2. 生成 private key
和 public key
nrfutil keys generate D:\DFU\private.pem
nrfutil keys display --key pk --format code D:\DFU\private.pem --out_file D:\DFU\dfu_public_key.c
替換生成的 dfu_public_key.c
到 example\dfu\
路徑下。
3. 編譯燒寫 Bootloader
編譯工程 example\dfu\secure_bootloader\pca10040_ble\arm5_no_packs
。然後燒錄Softdevice和App。將掃描到 DfuTarg
4. 升級檔案打包
需要查表確認 --sd-req
引數,保證 FWID 和 協議棧版本對應,否則升級過程中,將Disconnecting。拷貝編譯好的升級包檔案 nrf52810_xxaa.hex
,到 D:\DFU\
目錄。
nrfutil pkg generate --hw-version 52 --application-version 1 --application nrf52810_xxaa.hex --sd-req 0x0103 --key-file private.pem dfufile.zip
此時,可以連線 DfuTarg 裝置進行升級,可以升級成功。但是由於我們的App中未新增 DFU
5. 新增DFU服務
在自己的工程中新增 DFU 服務。
-
新增對應檔案
-
新增路徑
包括但不限於以下路徑。具體參照自查資料內容,以及編譯時的報錯提示自行新增路徑。
-
新增標頭檔案
//for dfu #include "nrf_power.h" #include "nrf_bootloader_info.h" #include "ble_dfu.h" #include "nrf_dfu_ble_svci_bond_sharing.h" #include "nrf_svci_async_function.h" #include "nrf_svci_async_handler.h" // for dfu end
-
新增全域性巨集定義
BL_SETTINGS_ACCESS_ONLY NRF_DFU_SVCI_ENABLED NRF_DFU_TRANSPORT_BLE=1
-
新增程式碼
程式碼參考
ble_app_buttonless_dfu
工程程式碼。 -
升級檔案生成指令碼
:: 拷貝App del D:\DFU\nrf52810_xxaa.hex del D:\DFU\dfufile*.zip copy ..\arm5_no_packs\_build\nrf52810_xxaa.hex /d D:\DFU\ cd /d D:\DFU\ :: 製作升級包 nrfutil pkg generate --hw-version 52 --application-version 1 --application nrf52810_xxaa.hex --sd-req 0x0103 --key-file private.pem dfufile_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.zip :: pause