Nordic SDK15.3.0 DFU

weixin_30588675發表於2020-04-05

Nordic SDK15.3.0 DFU

 

剛剛到手新的SDK版本,先來研究下空中升級。

 

編譯模板工程 secure_bootloader 出現幾個錯誤,先找到第一個錯誤,一個一個解決:

 

一、根據提示,第一個錯誤大概的意思是,祕鑰無效,請查閱xxx然後去生成產品祕鑰。

..\..\..\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"

 

解決步驟:

1、下載nrfutil.exe

https://github.com/NordicSemiconductor/pc-nrfutil/releases

 

2、使用祕鑰生成.pem檔案

nrfutil keys generate private.pem

 

3、使用命令讀出祕鑰中的內容,並且用它替換掉源工程的dfu_public_key.c中的內容。

nrfutil keys display --key pk --format code private.pem

 

重新編譯,發現該問題解決。下一個錯誤提示:

 

二、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

 

解決步驟:

1、下載micro_ecc,放在D:\Nordic\nRF5_SDK_15.3.0_59ac345\external\micro-ecc\micro-ecc檔案下;

下載micro_ecc 的地址:

https://github.com/kmackay/micro-ecc

 

2、進入D:\Nordic\nRF5_SDK_15.3.0_59ac345\external\micro-ecc\nrf52hf_keil\armgcc編譯(執行make);

 

此時編譯,就沒有錯誤了。

 

三、嘗試燒錄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

 

解決方案:

1、 使用programmer擦除FLASH

2、 然後使用Add HEX file先後燒錄協議棧和bootloader.hex

3、 發現廣播名DfuTarg的裝置。判斷為bootloader燒錄成功。

 

四、接下來生成用來空中升級的應用程式。步驟如下:

1、 編譯源工程ble_app_buttonless_dfu

2、 使用命令生成空中升級包

nrfutil pkg generate --hw-version 52 --sd-req 0xb7 --application-version 4 --application app.hex --key-file key.pem app_dfu_package.zip

3、 用nrf connect 的 Bluetooth low energy連線藍芽進行空中升級

4、 升級完成重新掃描,發現裝置藍芽名變為 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

 

轉載於:https://www.cnblogs.com/lqy-/p/10832657.html