日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从零开始的nrf52832蓝牙开发--串口DFU

發(fā)布時間:2024/1/18 编程问答 76 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从零开始的nrf52832蓝牙开发--串口DFU 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

????關(guān)注、星標公眾號,直達精彩內(nèi)容

來源:https://blog.csdn.net/qwe5959798/article/details/120152350

在本章之前推薦先閱讀博文:詳解藍牙空中升級(BLE OTA)原理與步驟

作者對Nordic芯片的應(yīng)用理解極其透徹,連Nordic的官方公眾號也轉(zhuǎn)發(fā)過他的教程博文,不知是否就職于Nordic。

在上面推薦的博文基礎(chǔ)上,筆者做了串口DFU實踐,寫的更加詳細,對實際過程中遇到的問題做了更加細致的描述和解決。

本章使用三個工程:

bootloader:

nRF5_SDK_15.3.0_59ac345\examples\dfu\secure_bootloader\pca10040_uart_debug\ses

application:

nRF5_SDK_15.3.0_59ac345\examples\ble_peripheral\ble_app_buttonless_dfu\pca10040\s132\ses

new_application:

nRF5_SDK_15.3.0_59ac345\examples\ble_peripheral\ble_app_blinky\pca10040\s132\ses

bootloader使用的是安全模式的bootloader,因為官方的samples中串口升級方式只提供了安全模式的bootloader,默認app用的無按鍵藍牙dfu的例程,而升級后的app使用的是ble_app_blinky,其實只要可以區(qū)分出來升級前后的app,使用哪個作為升級app都可以。

我們預(yù)期的效果是,代碼先正常運行ble_app_buttonless_dfu,可以使用手機連接藍牙試一下,然后在沒有藍牙連接的情況下,長按Button3進入DFU模式,此時我們使用nrfutil把固件發(fā)送給開發(fā)板,完成升級,升級后藍牙變成了ble_app_blinky。

1. 編譯bootloader

1.1 安裝加密庫

打開

直接build會發(fā)現(xiàn)報錯:

運行加密庫安裝腳本:

如果網(wǎng)速不好會下載很慢,打開腳本看一下具體步驟:

你可以直接到github上下載對應(yīng)源碼,下載完成后確保你的電腦上有g(shù)cc和arm-none-eabi-gcc且gcc需要加到環(huán)境變量里面,而arm-none-eabi需要在SDK的環(huán)境變量設(shè)置里面更改路徑。可以參考我之前的文章:

windows下用VSCODE開發(fā)stm32踩的坑

如果沒有設(shè)置會報錯誤找不到工具鏈:

?可以看到提示去更改工具鏈路徑的文件為:

打開后更改為你所下載的工具鏈安裝路徑和實際版本:

最好直接去安裝路徑里復(fù)制路徑,否則要看仔細路徑是否一模一樣,注意是 / 而不是 \ 。最后可以運行腳本,也可以直接在目錄micro-ecc里打開Power shell輸入?

make?-C?nrf52hf_armgcc/armgcc

這里注意如果你的micro-ecc源碼是從github上下載的,請把源碼文件夾由micro-ecc-master改成micro-ecc,否則Makefile中的路徑會對不上,且工程編譯時還是會報找不到uEcc.h。

1.2 修改reserved_flash配置

編譯成功后,再次打開工程編譯:

可以看到還是會報錯,此錯誤是由于IDE和SDK版本不兼容導(dǎo)致的問題,可以看到錯誤提示為在鏈接階段,兩個段的地址有重疊。我們重新找到工程文件下有一個?flash_placement.xml?文件,用文本或者vscode打開,調(diào)整reserved_flash的起始地址和大小:

保存后重新打開工程編譯,可以看到編譯成功:

1.3 修改密鑰

我們打開?dfu_public_key.c?文件可以看到我們的密鑰是在debug版本才有的:

也就是你只能使用官方提供的測試升級包去測試升級,為了方便我們測試,我們使用自己生成的密鑰,我們需要安裝?nRF Command Line Tools?,如果你要開發(fā)Nordic的芯片,這個工具基本上必須安裝:

nRF Command Line Tools

它里面包含nRF Util?,這個工具是使用DFU所必要的。

?

?替換密鑰的方法就是把原來的?dfu_public_key.c?刪除掉,然后再生成一個,在dfu_public_key.c所在的文件夾下使用指令:

nrfutil keys generate priv.pem nrfutil keys display --key pk --format code priv.pem --out_file dfu_public_key.c

第一條生成私鑰,也就是priv.pem。第二條通過私鑰生成公鑰并轉(zhuǎn)換為.c文件。

然后重新打開工程文件,生成bootloader。

2. 編譯APP

打開工程文件,編譯:

一樣的錯誤一樣的解決辦法。

因為我們需要使用按鍵去升級,所以我們把和藍牙升級有沖突的代碼注釋掉:

然后添加按鍵事件:

這里按鍵號從0開始,所以按鍵號2對于button3。

BSP事件里面本身就包含了DFU事件,我們可以直接使用,然后在ble_dfu.c里仿照原本進入DFU模式的函數(shù)寫一個通過按鍵進入DFU的函數(shù):

然后在BSP事件回調(diào)里去調(diào)用:

3. 編譯新APP

隨便使用一個工程文件,比如本文使用的ble_app_blinky,編譯后生成hex。

4. 生成固件和升級包

可以隨便找一個地方新建一個DFU文件夾,把之前編譯生成的以下文件復(fù)制進去:

還需要把softdevie.hex添加進去:

把名字改為:

使用指令,或者直接編一個腳本:

# 生成settings.hex nrfutil settings generate --family NRF52 --application app.hex --application-version 1 --bootloader-version 1 --bl-settings-version 2 settings.hex # 合并hex文件 mergehex --merge bootloader.hex settings.hex --output tmp.hex mergehex --merge tmp.hex app.hex s132_nrf52_6.1.1_softdevice.hex --output merge.hex #刪除中間文件 rm tmp.hex # 生成升級包 nrfutil pkg generate --application app_new.hex --application-version 2 --hw-version 52 --sd-req 0xB7 --key-file priv.pem app_new.zip

注意里面的參數(shù)要和實際情況對應(yīng)!特別是文件名和0xB7,這個0xB7要根據(jù)你的協(xié)議棧版本更改。

得到兩個文件,merge.hex是默認程序,而app_new.zip是用來升級的固件。

5. 升級固件

使用指令把固件先下載進開發(fā)板:

nrfjprog --eraseall -f NRF52 nrfjprog --program merge.hex --verify -f NRF52 nrfjprog --reset -f NRF52

此時可以看到板子LED1一直在閃爍,證明處在廣播狀態(tài),使用手機可以連上Nordic_Buttonless這個藍牙,在斷開藍牙的情況下,長按Button3,LED1和LED3會常亮,代表進入了DFU模式。

此時使用指令升級新的固件,我這里電腦識別為COM3,你需要改為自己電腦上對應(yīng)的端口:

nrfutil dfu serial -pkg app_new.zip -p COM3

固件升級成功后手機可以搜掃Nordic_Blinky,當(dāng)廣播時LED1常亮,手機連接上后LED2常亮。

至此,使用串口的DFU測試完成。

免責(zé)聲明:本文素材來源網(wǎng)絡(luò),版權(quán)歸原作者所有。如涉及作品版權(quán)問題,請與我聯(lián)系刪除。

???????????????? ?END ????????????????

關(guān)注我的微信公眾號,回復(fù)“加群”按規(guī)則加入技術(shù)交流群。 點擊“閱讀原文”查看更多分享,歡迎點分享、收藏、點贊、在看。

總結(jié)

以上是生活随笔為你收集整理的从零开始的nrf52832蓝牙开发--串口DFU的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。