nrf52832 DFU詳細步驟 SDK13

原鏈接 https://blog.csdn.net/jdsnpgxj/article/details/80772727

其它的鏈接

https://blog.csdn.net/weixin_38051349/article/details/80074799 nRF52832 DFU 過程記錄之一

https://blog.csdn.net/sinat_23338865/article/details/52295156  nrf51822/52832學習筆記之官方DFU過程梳理
https://blog.csdn.net/oqqdake12/article/details/53928601 Nordic52832 Secure DFU

https://blog.csdn.net/jdsnpgxj/article/details/80772727  nrf52832 DFU詳細步驟 SDK13

https://blog.csdn.net/wulazula/article/details/78130954  Nordic  52832 SDK 14 Secure DFU Procedure

---nordic 52832空中升級筆記

https://blog.csdn.net/weixin_40204595/article/details/80592770  Nordic 52832 —— OTA 流程源碼分析(一)

https://blog.csdn.net/zhanghuaishu0/article/details/77162461  nRF52832 — DFU升級
https://devzone.nordicsemi.com/blogs/685/common-faq-on-dfu/

https://devzone.nordicsemi.com/tutorials/9/

1. 以下是我測試的環境,大家的環境和我的有不同也不需要太擔心,隨機應變。 
環境: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開發板
2. 在做空中升級過程中可能遇到的問題
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錯誤
3. 安裝所需的軟件
(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

4. 安裝步驟
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文件。(我用的是方法2)

 

以上兩種方法都是用到了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, 等信息。
進入\examples\dfu\bootloader_secure\pca10040\arm5_no_packs\_build 執行nrfutil.exe settings generate --family NRF52 --application nrf52832_xxaa_bootloader.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文件,開始升級
      

 

 

我自己的命令

nrfutil.exe settings generate --family NRF52 --application nrf52832_bootloader_sdk13_s132.hex --application-version 3 --bootloader-version 1 --bl-settings-version 1 bootloader_settings.hex


mergehex.exe --merge nrf52832_bootloader_sdk13_s132.hex s132_nrf52_5.0.0-1.alpha_softdevice.hex --output production_final1.hex 


 mergehex.exe --merge production_final1.hex nrf52832_buttonless_sdk13_s132.hex --output production_final2.hex
  
 mergehex.exe --merge production_final2.hex bootloader_settings.hex --output production_final.hex
    
 del production_final1.hex; del production_final2.hex
    
    nrfjprog -f NRF52 --eraseall
    nrfjprog -f NRF52 --program "production_final.hex" --verify
    nrfjprog -f NRF52 --reset
    
    NRF_DFU_HW_VERSION
  nrfutil pkg generate --hw-version 52 --sd-req 0x90 --application-version 0xff --application nrf52832_buttonless_sdk13_s132.hex --key-file private.pem nrf52832_buttonless_sdk13_s132_00.zip
    
  nrfutil pkg generate --hw-version 52 --sd-req 0x90 --application-version 0xff --application nrf52832_buttonless_sdk13_s132.hex --key-file private.pem nrf52832_buttonless_sdk13_s132_11.zip

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章