nRF52832等 nRF52系列SDK13固件升級:DFU詳細(xì)步驟
芯片型號:nRF52832
模塊型號:RF-BM-ND04
一. 以下是我測試的環(huán)境:
環(huán)境:win7,64位,IAR集成開發(fā)環(huán)境
Sdk:nRF5_SDK_13.0.0_04a0bfd
協(xié)議棧:s132_nrf52_4.0.2_softdevice.hex
Bootloader工程:secure_dfu_ble_s132_pca10040
application工程:ble_app_buttonless_dfu_pca10040_s132
硬件平臺:pca10040開發(fā)板
二. 在做空中升級過程中可能遇到的問題
1.缺少uECC.h文件
2.缺少micro_ecc_lib_nrf52.lib文件
3.出現(xiàn)報(bào)錯:#error "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it"
4.升級過程中出現(xiàn):fw version錯誤
三. 安裝所需的軟件
(1)gcc-arm-none-eabi-4_9-2015q3-20150921-win32.exe:
https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q3-update
根據(jù)提示安裝 4.9-2015-q3-update 版本的 GCC compiler toolchain for ARM
(2)make-3.81.exe:
http://gnuwin32.sourceforge.net/packages/make.htm
(3)python-2.7.12.amd64.msi
https://www.python.org/downloads/
(4)nRFgo Studio
主要提供nrfjprog.exe和mergehex.exe
這兩個軟件在nRFgo Studio的安裝目錄下找到
C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin
安裝之后用cmd輸入nrfjprog和mergehex,查看是否安裝可用
(5)oreutils-5.3.0.exe:
http://gnuwin32.sourceforge.net/packages/coreutils.htm
四. 安裝步驟
1.安裝編譯環(huán)境:
(1)雙擊安裝make-3.81.exe ,
(2)安裝coreutils-5.3.0.exe,
(3)安裝gcc-arm-none-eabi-4_9-2015q3-20150921-win32.exe
把路徑Path : C:\Program Files (x86)\GNU Tools ARM Embedded\4.9 2015q3\bin;C:\Program Files (x86)\GnuWin32\bin添加到環(huán)境變量
(4)安裝python-2.7.12.amd64.msi。
雙擊python-2.7.12.amd64.msi安裝 ,安裝完畢后,把python的路徑加入到環(huán)境變量中
C:\Python27\
C:\Python27\Scripts
進(jìn)入命令行窗口,并到Python路徑,輸入python -m pip install nrfutil等待安裝完成
nrfutil會被安裝到C:\Python27\Scripts目錄下, 我安裝的nrfutil版本是3.3.0,后面安裝可能會更新,所以可能會遇到版本兼容問題。nrf studio的安裝目錄下也有這個軟件,可以拿來代替。
2.解決缺少uECC.h文件問題
(1)下載micro-ecc:
直接用我下載好的或到官網(wǎng)下載micro-ecc :https://github.com/kmackay/micro-ecc
注意:官網(wǎng)上下載的文件夾名稱的名字要改成micro-ecc
(2)把micro-ecc文件夾復(fù)制到nRF5_SDK_13.0.0_04a0bfd\external\micro-ecc目錄下
(3)打開micro-ecc目錄可以看見uECC.h
3.解決缺少micro_ecc_lib_nrf52.lib的問題
(1)方法1:雙擊批處理文件nRF5_SDK_13.0.0_04a0bfd\external\micro-ecc\build_all.bat即可生成lib文件;
(2)方法2:也可以進(jìn)入nRF5_SDK_14.0.0_3bcc1f7\external\micro-ecc\nrf52_keil\armgcc路徑,輸入make 生成lib文件。
以上兩種方法都是用到了micro-ecc\nrf52_keil\armgcc\makefile
把生成的micro_ecc_lib_nrf52.lib添加到工程即可。
4. 解決編譯報(bào)錯問題
編譯過程中會出現(xiàn)報(bào)錯:#error "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it",看報(bào)錯就知道這是缺少秘鑰造成的,這個故意報(bào)錯,需要大家添加一個秘鑰上去。
打開cmd命令行,鍵入一下指令
nrfutil.exe keys generate private.pem
nrfutil.exe keys display --key pk --format code private.pem --out_file public_key.c
這樣生成的秘鑰就保存在 public_key.c中,打開public_key.c。把數(shù)組pk復(fù)制到報(bào)錯的位置。
5. 燒錄協(xié)議棧、應(yīng)用層、bootloader
(1)先要生成bootloader setting, 這個文件包含了app version ,bootloader version , hw version, 等信息。
執(zhí)行nrfutil.exe settings generate --family NRF52 --application nrf52832_xxaa_app.hex --application-version 3 --bootloader-version 2 --bl-settings-version 1 bootloader_settings.hex

(2)合并所有文件,注意自己的hex文件名。
合并BootLoader文件和softdevice文件:mergehex.exe --merge nrf52832_xxaa_bootloader.hex s132_nrf52_4.0.2_softdevice.hex --output production_final1.hex
將上一個合并文件與app程序合并:mergehex.exe --merge production_final1.hex nrf52832_xxaa_app.hex --output production_final2.hex
將上一個合并文件與配置settings 文件合并:mergehex.exe --merge production_final2.hex bootloader_settings.hex --output production_final.hex
刪除:del production_final1.hex
刪除:del production_final2.hex
最后生成燒錄文件production_final.hex
(3)燒錄一個文件即可,燒錄前先用nRFgo Studio擦除芯片。
nrfjprog -f NRF52 --eraseall
nrfjprog -f NRF52 --program "production_final.hex" --verify
nrfjprog -f NRF52 --reset
這時打開手機(jī)app nRF Connect即可看到程序中設(shè)置的藍(lán)牙名稱的設(shè)備了。
(4)打包OTA所需的zip文件。這里只介紹升級應(yīng)用層,至于升級bootloader和協(xié)議棧下次有空再研究。
執(zhí)行nrfutil pkg generate --hw-version 52 --sd-req 0x98 --application-version 0xff --application nrf52832_xxaa_app.hex --key-file private.pem nrf52832_xxaa_app.zip
--sd-req 0x98 : 0x98是 協(xié)議棧版本,如下圖所示

--application-version 0xff :0xff是應(yīng)用層版本。
--key-file private.pem 這個是"解決編譯報(bào)錯問題 "中生成的秘鑰文件。
6. 手機(jī)空中升級的實(shí)現(xiàn)
(1)連接藍(lán)牙
(2)點(diǎn)擊圓圈處

(3)發(fā)送請求,設(shè)備將復(fù)位并進(jìn)入bootloader狀態(tài)。

(4)發(fā)送完以后,可以看到名為DFUTARG的設(shè)備,說明此時設(shè)備進(jìn)入bootloader 狀態(tài)。連接藍(lán)牙DfuTarg設(shè)備。

(5)點(diǎn)擊右上角的DFU按鈕,選擇zip文件,開始升級