2024年8月28日 星期三

如何產生執行nRF52832 DFU(OTA)所需的 hex/zip 檔 – 步驟說明#1 – Bootloader和Application

本系列的文章將會引導使用者如何在使用勁達的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


nRF52832SDK16.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



Raytac Corporation 勁達國際電子股份有限公司
Raytac Corporation: A Bluetooth, Wi-Fi, and LoRa Module Maker based on
Nordic nRF54; nRF53: nRF52; nRF51; nRF7002
Semtech Specification: SX1262

Bluetooth Specification: BT5.4 ; BT5.3; BT5.2.
Wi-Fi Specification: Wi-Fi 6
LoRa Specification: LoRaWAN

All products are FCC/IC/CE/Telec/KC/RCM/SRRC/NCC Pre-Certified.
http://www.raytac.com
email: service@raytac.com
Tel: +886-2-3234-0208

沒有留言:

張貼留言