从零开始的nrf52832蓝牙开发--串口DFU
????關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容
來(lái)源:https://blog.csdn.net/qwe5959798/article/details/120152350
在本章之前推薦先閱讀博文:詳解藍(lán)牙空中升級(jí)(BLE OTA)原理與步驟
作者對(duì)Nordic芯片的應(yīng)用理解極其透徹,連Nordic的官方公眾號(hào)也轉(zhuǎn)發(fā)過他的教程博文,不知是否就職于Nordic。
在上面推薦的博文基礎(chǔ)上,筆者做了串口DFU實(shí)踐,寫的更加詳細(xì),對(duì)實(shí)際過程中遇到的問題做了更加細(xì)致的描述和解決。
本章使用三個(gè)工程:
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,因?yàn)楣俜降膕amples中串口升級(jí)方式只提供了安全模式的bootloader,默認(rèn)app用的無(wú)按鍵藍(lán)牙dfu的例程,而升級(jí)后的app使用的是ble_app_blinky,其實(shí)只要可以區(qū)分出來(lái)升級(jí)前后的app,使用哪個(gè)作為升級(jí)app都可以。
我們預(yù)期的效果是,代碼先正常運(yùn)行ble_app_buttonless_dfu,可以使用手機(jī)連接藍(lán)牙試一下,然后在沒有藍(lán)牙連接的情況下,長(zhǎng)按Button3進(jìn)入DFU模式,此時(shí)我們使用nrfutil把固件發(fā)送給開發(fā)板,完成升級(jí),升級(jí)后藍(lán)牙變成了ble_app_blinky。
1. 編譯bootloader
1.1 安裝加密庫(kù)
打開
直接build會(huì)發(fā)現(xiàn)報(bào)錯(cuò):
運(yùn)行加密庫(kù)安裝腳本:
如果網(wǎng)速不好會(huì)下載很慢,打開腳本看一下具體步驟:
你可以直接到github上下載對(duì)應(yīng)源碼,下載完成后確保你的電腦上有g(shù)cc和arm-none-eabi-gcc且gcc需要加到環(huán)境變量里面,而arm-none-eabi需要在SDK的環(huán)境變量設(shè)置里面更改路徑。可以參考我之前的文章:
windows下用VSCODE開發(fā)stm32踩的坑
如果沒有設(shè)置會(huì)報(bào)錯(cuò)誤找不到工具鏈:
?可以看到提示去更改工具鏈路徑的文件為:
打開后更改為你所下載的工具鏈安裝路徑和實(shí)際版本:
最好直接去安裝路徑里復(fù)制路徑,否則要看仔細(xì)路徑是否一模一樣,注意是 / 而不是 \ 。最后可以運(yùn)行腳本,也可以直接在目錄micro-ecc里打開Power shell輸入?
make?-C?nrf52hf_armgcc/armgcc
這里注意如果你的micro-ecc源碼是從github上下載的,請(qǐng)把源碼文件夾由micro-ecc-master改成micro-ecc,否則Makefile中的路徑會(huì)對(duì)不上,且工程編譯時(shí)還是會(huì)報(bào)找不到uEcc.h。
1.2 修改reserved_flash配置
編譯成功后,再次打開工程編譯:
可以看到還是會(huì)報(bào)錯(cuò),此錯(cuò)誤是由于IDE和SDK版本不兼容導(dǎo)致的問題,可以看到錯(cuò)誤提示為在鏈接階段,兩個(gè)段的地址有重疊。我們重新找到工程文件下有一個(gè)?flash_placement.xml?文件,用文本或者vscode打開,調(diào)整reserved_flash的起始地址和大小:
保存后重新打開工程編譯,可以看到編譯成功:
1.3 修改密鑰
我們打開?dfu_public_key.c?文件可以看到我們的密鑰是在debug版本才有的:
也就是你只能使用官方提供的測(cè)試升級(jí)包去測(cè)試升級(jí),為了方便我們測(cè)試,我們使用自己生成的密鑰,我們需要安裝?nRF Command Line Tools?,如果你要開發(fā)Nordic的芯片,這個(gè)工具基本上必須安裝:
nRF Command Line Tools
它里面包含nRF Util?,這個(gè)工具是使用DFU所必要的。
?
?替換密鑰的方法就是把原來(lái)的?dfu_public_key.c?刪除掉,然后再生成一個(gè),在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
打開工程文件,編譯:
一樣的錯(cuò)誤一樣的解決辦法。
因?yàn)槲覀冃枰褂冒存I去升級(jí),所以我們把和藍(lán)牙升級(jí)有沖突的代碼注釋掉:
然后添加按鍵事件:
這里按鍵號(hào)從0開始,所以按鍵號(hào)2對(duì)于button3。
BSP事件里面本身就包含了DFU事件,我們可以直接使用,然后在ble_dfu.c里仿照原本進(jìn)入DFU模式的函數(shù)寫一個(gè)通過按鍵進(jìn)入DFU的函數(shù):
然后在BSP事件回調(diào)里去調(diào)用:
3. 編譯新APP
隨便使用一個(gè)工程文件,比如本文使用的ble_app_blinky,編譯后生成hex。
4. 生成固件和升級(jí)包
可以隨便找一個(gè)地方新建一個(gè)DFU文件夾,把之前編譯生成的以下文件復(fù)制進(jìn)去:
還需要把softdevie.hex添加進(jìn)去:
把名字改為:
使用指令,或者直接編一個(gè)腳本:
# 生成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 # 生成升級(jí)包 nrfutil pkg generate --application app_new.hex --application-version 2 --hw-version 52 --sd-req 0xB7 --key-file priv.pem app_new.zip注意里面的參數(shù)要和實(shí)際情況對(duì)應(yīng)!特別是文件名和0xB7,這個(gè)0xB7要根據(jù)你的協(xié)議棧版本更改。
得到兩個(gè)文件,merge.hex是默認(rèn)程序,而app_new.zip是用來(lái)升級(jí)的固件。
5. 升級(jí)固件
使用指令把固件先下載進(jìn)開發(fā)板:
nrfjprog --eraseall -f NRF52 nrfjprog --program merge.hex --verify -f NRF52 nrfjprog --reset -f NRF52此時(shí)可以看到板子LED1一直在閃爍,證明處在廣播狀態(tài),使用手機(jī)可以連上Nordic_Buttonless這個(gè)藍(lán)牙,在斷開藍(lán)牙的情況下,長(zhǎng)按Button3,LED1和LED3會(huì)常亮,代表進(jìn)入了DFU模式。
此時(shí)使用指令升級(jí)新的固件,我這里電腦識(shí)別為COM3,你需要改為自己電腦上對(duì)應(yīng)的端口:
nrfutil dfu serial -pkg app_new.zip -p COM3固件升級(jí)成功后手機(jī)可以搜掃Nordic_Blinky,當(dāng)廣播時(shí)LED1常亮,手機(jī)連接上后LED2常亮。
至此,使用串口的DFU測(cè)試完成。
免責(zé)聲明:本文素材來(lái)源網(wǎng)絡(luò),版權(quán)歸原作者所有。如涉及作品版權(quán)問題,請(qǐng)與我聯(lián)系刪除。
???????????????? ?END ????????????????
總結(jié)
以上是生活随笔為你收集整理的从零开始的nrf52832蓝牙开发--串口DFU的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CARLA相机传感器坐标系
- 下一篇: 2022-2028年中国塑料增韧剂行业市