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


2024年8月20日 星期二

在使用開發板AN7002Q-DB-5340開發時,要如何將Wi-Fi MAC 位址燒錄進AN7002Q模組(模塊)?

想快速上手勁達AN7002模組與nRF5340模組嗎? 我們提供簡單的教學,帶你一步步在AN7002Q-nRF5340開發板(AN7002Q-DB-5340)上燒錄MAC位址。

目前Raytac AN7002Q-DB-5340 開發版上的AN7002Q模組(模塊)在出廠時並沒有燒Wi-Fi MAC address
但當跑NCS v2.60(含)以後版本的 Wi-Fi Scan code/Station code/Shell code… 時,
AN7002Q 模組內必需含有
Wi-Fi MAC address才能讓以上三個功能正常進行。

所以建議依照以下步驟進行:
1.將原始 Wi-Fi radio test code(..\nrf\samples\wifi\radio_test) 燒入 MDBT53
2.再透過下指令, 將
Wi-Fi MAC address寫入AN7002Q模組(模塊)

接著,將原始 Wi-Fi scan code/Station code /Shell code …燒入MDBT53藍芽模組, 功能就會正常。
*每一片 AN7002Q模組(模塊), Raytac都會提供兩組 Wi-Fi MAC addresses(2.4GHz & 5GHz頻段)。
*若您目前有Raytac AN7002Q-DB-5340開發版,但尚未拿到 Wi-Fi MAC addresses

*請與我們聯繫 service@raytac.com


範例解說1. SCAN code:

案例:

當在構建掃描代碼(SCAN code)、並閃存到 AN7002Q-DB-5340開發板上進行測試時,發生了錯誤。


解決方法:

當程式在跑NCS v2.60(含)或以後版本的 Wi-Fi scan code時,AN7002Q 模組(模塊)內的OTP,必需燒
Wi-Fi MAC address,Wi-Fi scan的功能才能正常運作。

(**注意因為是 OTP,值只能寫入 1 次。)

AN7002Q 模組內的OTP要燒錄
Wi-Fi MAC address方法如下:

1.首先必需先將原始的 Wi-Fi radio test code 燒入MDBT53後,再送下列 OTP read command。


wifi_radio_ficr_prog otp_read_params


看到 MAC0與MAC1都是0xFF值,

代表AN7002Q 模組內的OTP在出廠時是沒有燒Wi-Fi MAC address的。



2.自行下載OTP write command, 並將
Wi-Fi MAC address寫入到AN7002Q module內的OTP.

https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/samples/wifi/radio_test/ficr.html

wifi_radio_ficr_prog otp_write_params 0x120 0xDDCCBBAA 0xFFEE

wifi_radio_ficr_prog otp_write_params 0x128 0xDDCCBBAA 0xFFEE


寫入完成後,可用以下的OTP read command 去檢查所寫入的Wi-Fi MAC address值。


wifi_radio_ficr_prog otp_read_params


3.  最後再將原始 Wi-Fi scan code燒回至MDBT53,如此一來,Wi-Fi scan的功能就會正常運作了。


範例解說2. Shell code:

案例:
AN7002Q-DB-5340在跑Shell Code時發生了錯誤


解決方法:
當我們在使用Raytac AN7002Q-DB-5340和nRF5340 DK進行開發時,
由於以上兩者並無外部元件MX25R64 (Serial NOR Flash)。
只有nRF7002DK有此外部 MX25R64元件.

所以當跑原始 Wi-Fi shell code時,程式原設定會啟用SPI NOR

在使用Raytac AN7002Q-DB-5340 開發版時,必需在prj.conf檔案內
自行加上 CONFIG_SPI_NOR=n 來禁用SPI NOR,以確保SPI_NOR或任何依賴於它的配置都被關閉。

修改以上的指令後,
重新編譯及燒錄後shell code的功能(例: Wi-Fi scan/Wi-Fi connect/net ping ..)就會都正常運作了。


Edited by Sales Manager: Ms. Mandy Chao
Technical guidance provided by R&D Manager: Mr. MW Lee
Hardware environment provided by Hardware Engineer: Mr. Kyle Wang


Raytac Corporation 勁達國際電子股份有限公司 
Bluetooth & WiFi module maker based on Nordic nRF54, nRF53, nRF52, nRF7002 solution
BT5.4 &BT5.3 & BT5.2 & BT5.1 Qualified, FCC/IC/CE/Telec/KC/RCM/SRRC/NCC Pre-Certified.
Bluetooth Solution: nRF54, nRF5340, nRF52840, nRF52833, nRF52832, nRF52820, nRF52811, nRF52810, nRF52805, nRF51822
WiFi Solution: nRF7002
http://www.raytac.com
email: service@raytac.com
Tel: +886-2-3234-0208