本系列的文章將會引導使用者如何在使用勁達的nRF52832系列模組編寫程式時,設置並啟用 Secure DFU OTA(空中升級) 的功能。
主題:使用nRF52832架設DFU OTA功能 (以SDK版本16.0.0為例)
DFU:Device Firmware Update;裝置韌體升級
OTA:Over the air;空中升級
IC: nRF52832
DK: PCA10040(對應到nRF52832)
SDK: 16.0.0
SD: s132_nrf52_7.0.1_softdevice.hex
IDE: Keil C
PC: Win 10
Secure DFU OTA 的系列文章會有兩篇,分別涉及:
Part 1: Bootloader和Application
Part 2: 合併檔案並執行DFU OTA (文章連結)
本篇文章主題為 Part 1: Bootloader和Application。
nRF52832用SDK16.0.0做Secure DFU(OTA)的方法如下:
Bootloader
路徑: ..\nRF5_SDK_16.0.0_98a08e2\examples\dfu\secure_bootloader\pca10040_s132_ble\arm5_no_packs
在nRF52832,開發者需先崁入ECC(Elliptic Curve Cryptography)至bootloader。
步驟1:Bootloader的’micro_ecc_lib_nrf52.lib’檔案,能在以下路徑找到:
步驟2. 解壓’micro-ecc-master.zip’到下列(建議新增一個micro-ecc資料夾)路徑。
步驟3. 執行’ gcc-arm-none-eabi-7-2018-q2-update-win32.exe’。
步驟4. Win10設環境變數依序設置如下圖:
步驟5. 開啟DOS,在下列armgcc路徑執行”make” 指令,就會產生’micro_ecc_lib_nrf52.lib’。
步驟6. 在資料夾: nRF_micro-ecc ,加入產生的’micro_ecc_lib_nrf52.lib’檔案。
步驟7. 在建構bootloader時, 會因缺少public key產生錯誤。
步驟8:在Bootloader裡面產生public key檔案的做法
A. 到DOS的下列路徑:..Python27 Scripts
B. 執行以下指令:
nrfutil keys generate private.pem
nrfutil keys display --key pk --format code private.pem --out_file public_key.c
步驟9:將public_key.c的pk[64]內容(下圖上半部分紅框)覆蓋到dfu_public_key.c(下圖下半部分)內
※註:記得存取以下3個自動產生的檔案:
private.pem
public_key.c
dfu_public_key.c
步驟10:重新構建Bootloader的程式碼,並得到 nrf52832_xxaa_s132.hex 檔案。
Application
在構建Application前, 在Application內與DFU相關的程式碼 & 設定皆需增加或修改:
步驟1:打開C/C++並加入3個定義,分別為:
BL_SETTINGS_ACCESS_ONLY
NRF_DFU_SVCI_ENABLED
NRF_DFU_TRANSPORT_BLE=1;
步驟2. 在C/C++欄位內加入Include path(如紅框內所示)
步驟3. 在Project內增加檔案(請參考下方圖1 & 圖2)
並新增2個Group(nRF_DFU與nRF_SVC,請參照下方圖3 & 圖4,按右鍵add group)。
步驟4. Application的main.c檔(..\examples\ble_peripheral\ble_app_uart\main.c)內
須增加下列幾張圖內的程式碼。
(程式碼請參考..\examples\ble_peripheral\ ble_app_buttonless_dfu內的main.c)
步驟5. Application的sdk_config.h檔
(路徑:..\examples\ble_peripheral\ble_app_uart\pca10056\s140\config\ sdk_config.h)內容需修改。
步驟6. 為能順利執行後續的DFU功能,Target內的IRAM1值要做修正:
如上圖,在檢查*p_app_ram_start值後,
需在Target欄位內將IRAM1原始值 0x20002AD8 0xD528 修改成正確值 0x20002AE8 0xD508,後續程式才能正確執行。(如下圖)
步驟7. 重新構建Application的程式碼,並得到 nrf52832_xxaa.hex檔案。
步驟8. 產生bootloader的setting檔案的做法, 得到nrf52832_bootloader_secure_settings.hex檔案。
nrfutil settings generate --family NRF52 --application nrf52832_xxaa.hex--application-version 3 --bootloader-version 2 --bl-settings-version 1 nrf52832_bootloader_secure_settings.hex --no-backup
※本系列第二篇 - Part 2: 合併建構完成的檔案 的說明文章預計於下周(2024年9月4日)刊登,敬請期待。
Technical guidelines provided by R&D Manager: Mr. MW Lee
Edited by Sales Manager: Ms. Mandy Chao