nRF52832等 nRF52系列SDK13固件升級:DFU詳細步驟
芯片型號:nRF52832
模塊型號:RF-BM-ND04
一. 以下是我測試的環境:
環境:win7,64位,IAR集成開發環境
Sdk:nRF5_SDK_13.0.0_04a0bfd
協議棧:s132_nrf52_4.0.2_softdevice.hex
Bootloader工程:secure_dfu_ble_s132_pca10040
application工程:ble_app_buttonless_dfu_pca10040_s132
硬件平臺:pca10040開發板
二. 在做空中升級過程中可能遇到的問題
1.缺少uECC.h文件
2.缺少micro_ecc_lib_nrf52.lib文件
3.出現報錯:#error "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it"
4.升級過程中出現: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
根據提示安裝 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.安裝編譯環境:
(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添加到環境變量
(4)安裝python-2.7.12.amd64.msi。
雙擊python-2.7.12.amd64.msi安裝 ,安裝完畢后,把python的路徑加入到環境變量中
C:\Python27\
C:\Python27\Scripts
進入命令行窗口,并到Python路徑,輸入python -m pip install nrfutil等待安裝完成
nrfutil會被安裝到C:\Python27\Scripts目錄下, 我安裝的nrfutil版本是3.3.0,后面安裝可能會更新,所以可能會遇到版本兼容問題。nrf studio的安裝目錄下也有這個軟件,可以拿來代替。
2.解決缺少uECC.h文件問題
(1)下載micro-ecc:
直接用我下載好的或到官網下載micro-ecc :https://github.com/kmackay/micro-ecc
注意:官網上下載的文件夾名稱的名字要改成micro-ecc
(2)把micro-ecc文件夾復制到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:也可以進入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. 解決編譯報錯問題
編譯過程中會出現報錯:#error "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it",看報錯就知道這是缺少秘鑰造成的,這個故意報錯,需要大家添加一個秘鑰上去。
打開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。把數組pk復制到報錯的位置。
5. 燒錄協議棧、應用層、bootloader
(1)先要生成bootloader setting, 這個文件包含了app version ,bootloader version , hw version, 等信息。
執行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
這時打開手機app nRF Connect即可看到程序中設置的藍牙名稱的設備了。
(4)打包OTA所需的zip文件。這里只介紹升級應用層,至于升級bootloader和協議棧下次有空再研究。
執行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是 協議棧版本,如下圖所示
--application-version 0xff :0xff是應用層版本。
--key-file private.pem 這個是"解決編譯報錯問題 "中生成的秘鑰文件。
6. 手機空中升級的實現
(1)連接藍牙
(2)點擊圓圈處
(3)發送請求,設備將復位并進入bootloader狀態。
(4)發送完以后,可以看到名為DFUTARG的設備,說明此時設備進入bootloader 狀態。連接藍牙DfuTarg設備。
(5)點擊右上角的DFU按鈕,選擇zip文件,開始升級