Nordic SDK15.3.0 DFUgit
剛剛到手新的SDK版本,先來研究下空中升級。github
編譯模板工程 secure_bootloader 出現幾個錯誤,先找到第一個錯誤,一個一個解決:app
1、根據提示,第一個錯誤大概的意思是,祕鑰無效,請查閱xxx而後去生成產品祕鑰。less
..\..\..\dfu_public_key.c(29): error: #35: #error directive: "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it"post
解決步驟:this
一、下載nrfutil.exe加密
https://github.com/NordicSemiconductor/pc-nrfutil/releasescode
二、使用祕鑰生成.pem文件component
nrfutil keys generate private.pem
三、使用命令讀出祕鑰中的內容,而且用它替換掉源工程的dfu_public_key.c中的內容。orm
nrfutil keys display --key pk --format code private.pem
從新編譯,發現該問題解決。下一個錯誤提示:
2、uECC.h文件找不到
..\..\..\..\..\components\libraries\crypto\backend\micro_ecc\micro_ecc_backend_ecc.h(52): error: #5: cannot open source input file "uECC.h": No such file or directory
搜索全工程,發現沒有此文件,因而上論壇。
在官網論壇上找到這個錯誤的緣由是沒有micro_ecc庫。
官方DFU空中升級教程
https://devzone.nordicsemi.com/b/blog/posts/getting-started-with-nordics-secure-dfu-bootloader
解決步驟:
一、下載micro_ecc,放在D:\Nordic\nRF5_SDK_15.3.0_59ac345\external\micro-ecc\micro-ecc文件下;
下載micro_ecc 的地址:
https://github.com/kmackay/micro-ecc
二、進入D:\Nordic\nRF5_SDK_15.3.0_59ac345\external\micro-ecc\nrf52hf_keil\armgcc編譯(執行make);
此時編譯,就沒有錯誤了。
3、嘗試燒錄bootloader,發現燒錄失敗。
具體以下:
使用keil進行燒錄,提示Flash Download failed.
使用nrfgo studio進行燒錄,提示this hex file has data in SoftDevice region.
查詢keil中的起始地址配置,也沒看出有問題,因而上官網論壇搜索。
官方人員表示nrfgo studio和keil都不能燒錄bootloader,須要用nrf connect的programmer燒錄。
我試圖找到programmer的使用文檔,無果,不過聽說直接用Add HEX file選擇文件進行燒錄就行了。
官方論壇對文檔的解說:
https://devzone.nordicsemi.com/f/nordic-q-a/41113/nrf-connect-v2-6-1-documentation/159866#159866
解決方案:
一、 使用programmer擦除FLASH
二、 而後使用Add HEX file前後燒錄協議棧和bootloader.hex
三、 發現廣播名DfuTarg的設備。判斷爲bootloader燒錄成功。
4、接下來生成用來空中升級的應用程序。步驟以下:
一、 編譯源工程ble_app_buttonless_dfu
二、 使用命令生成空中升級包
nrfutil pkg generate --hw-version 52 --sd-req 0xb7 --application-version 4 --application app.hex --key-file key.pem app_dfu_package.zip
三、 用nrf connect 的 Bluetooth low energy鏈接藍牙進行空中升級
四、 升級完成從新掃描,發現設備藍牙名變爲 Nordic_Buttonless。升級成功。
附錄:
nrfutil使用方法
nrfutil pkg generate --help
生成加密祕鑰
nrfutil keys generate private.pem
將祕鑰以代碼格式顯示出來:
nrfutil keys display --key pk --format code private.pem
生成空中升級zip包
nrfutil pkg generate --hw-version 52 --sd-req 0xb7 --application-version 4 --application app.hex --key-file key.pem app_dfu_package.zip
注意:
|s112_nrf52_6.0.0|0xA7|
|s112_nrf52_6.1.0|0xB0|
|s112_nrf52_6.1.1|0xB8|
|s130_nrf51_1.0.0|0x67|
|s130_nrf51_2.0.0|0x80|
|s132_nrf52_2.0.0|0x81|
|s130_nrf51_2.0.1|0x87|
|s132_nrf52_2.0.1|0x88|
|s132_nrf52_3.0.0|0x8C|
|s132_nrf52_3.1.0|0x91|
|s132_nrf52_4.0.0|0x95|
|s132_nrf52_4.0.2|0x98|
|s132_nrf52_4.0.3|0x99|
|s132_nrf52_4.0.4|0x9E|
|s132_nrf52_4.0.5|0x9F|
|s132_nrf52_5.0.0|0x9D|
|s132_nrf52_5.1.0|0xA5|
|s132_nrf52_6.0.0|0xA8|
|s132_nrf52_6.1.0|0xAF|
|s132_nrf52_6.1.1|0xB7|
|s140_nrf52_6.0.0|0xA9|
|s140_nrf52_6.1.0|0xAE|
|s140_nrf52_6.1.1|0xB6|
在.zip包中顯示DFU包的內容
nrfutil pkg display package.zip