1. 程式人生 > 其它 >Nordic DFU 使用教程

Nordic DFU 使用教程

技術標籤:nordic物聯網

Nordic DFU 操作步驟

需要安裝各種工具,詳情見自查資料。

大概流程為:重啟裝置進入Bootloader,然後連線通過藍芽連線Bootloader進行DFU,傳送升級包檔案。

1. 下載編譯micro-ecc

github 上下載 micro-ecc 原始碼,然後通過 msysgcc進行編譯。

編譯前修改 components\toolchain\gcc\Makefile.windows 中工具的路徑和版本號。注意路徑最後面需要加 /

得到 external\micro-ecc\nrf52nf_keil\armgcc\micro_ecc_lib_nrf52.lib

庫檔案。

2. 生成 private keypublic 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.cexample\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

服務,將不能再次進行升級。DFU服務是用來將裝置重啟至Bootloader的。

5. 新增DFU服務

在自己的工程中新增 DFU 服務。

  • 新增對應檔案

    image-20210208145154231.
  • 新增路徑

    包括但不限於以下路徑。具體參照自查資料內容,以及編譯時的報錯提示自行新增路徑。

    image-20210208145121002.
  • 新增標頭檔案

    //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