nRF52832 DFU空中升級(jí)

2018年9月11日

SDK版本:nRF5_SDK_15.0.0_a53641a
SoftDevice版本:s132_nrf52_6.0.0

官方論壇中有官方人員寫(xiě)了Blog說(shuō)明:Getting started with Nordic's Secure DFU bootloader, a step by step guide

DFU: Device Firmware Upgrade

前期準(zhǔn)備

sdk12以后,DUF功能對(duì)升級(jí)文件進(jìn)行了ECDSA簽名加密,防止誤升級(jí)未授權(quán)的程序.

nRF52832使用micro-ecc開(kāi)源軟件實(shí)現(xiàn)ECDSA

安裝make

為了使用sdk中micro-ecc的安裝腳本,需要安裝make及git

安裝git

不多說(shuō),這個(gè)應(yīng)該都已經(jīng)裝好了

安裝micro-ecc

以上兩個(gè)安裝后,直接執(zhí)行sdk路徑中的[SDK]\external\micro-ecc\build_all.bat腳本即可安裝micro-ecc

安裝nrfutil

簽名需要秘鑰,需要使用nrfutil生成秘鑰.

nrfutil在nRFgo Studio工具安裝路徑中有,但是版本非常低(0.x.x),為了使用最新版本,自己安裝一個(gè).

nrfutil是一個(gè)python工具,所以需要先安裝Python下載地址,注意:必須使用2.7以上版本,但是不能使用3.0以上版本,也就是2.7-3.0之間的版本~

python安裝完成后,在python路徑使用python -m pip install nrfutil安裝nrfutil

目前(2018年9月11日)安裝的最新版本為3.5.1.

nrfutil會(huì)安裝在python路徑下的Scripts文件夾內(nèi),如果不配置nrfutil的環(huán)境變量,需要到此文件夾執(zhí)行nrfutil命令(不建議).

生成秘鑰文件

這些命令可以在sdk文檔 nRF5 sdk-Libraries-Bootloader and DFU modules-Device Firmware Update process-Working with keys 中也有說(shuō)明.

生成自己的私鑰:
nrfutil.exe keys generate private.pem
根據(jù)私鑰生成公鑰:
nrfutil.exe keys display --key pk --format code private.pem --out_file public_key.c

會(huì)在當(dāng)前路徑下生成文件public_key.c,需要將此文件內(nèi)數(shù)組uint8_t pk[64]復(fù)制到bootloader工程的相應(yīng)位置,一般在dfu_public_key.c中

燒錄協(xié)議棧弓摘、應(yīng)用層痕届、bootloader

生成bootloader setting

這個(gè)文件包含了app version,bootloader version,hw version

命令如下:注意hex文件名稱

nrfutil.exe settings generate --family NRF52 --application nrf52832_xxaa.hex --application-version 0 --bootloader-version 0 --bl-settings-version 1 bootloader_settings.hex

合并hex文件:

合并BootLoader文件和softdevice文件:

mergehex.exe --merge nrf52832_xxaa_bootloader.hex s132_nrf52_4.0.2_softdevice.hex --output production_final1.hex 

將上一個(gè)合并文件與app程序合并:

mergehex.exe --merge production_final1.hex nrf52832_xxaa_app.hex --output production_final2.hex

將上一個(gè)合并文件與配置settings 文件合并:

mergehex.exe --merge production_final2.hex bootloader_settings.hex --output production_final.hex

之后可以刪除中間生成的兩個(gè)hex文件

del production_final1.hex
del production_final2.hex

最后的production_final.hex文件就是我們需要燒錄的文件了.

燒錄hex文件

使用nRFgo 擦除flash,使用program application燒錄這個(gè)文件即可,燒錄完成后可以看到flash有softdevice application 及bootloader,且程序已經(jīng)可以正常運(yùn)行

生成DFU 升級(jí)文件

Application

先是應(yīng)用層
執(zhí)行命令:

nrfutil pkg generate --hw-version 52 --sd-req 0xa8 --application-version 0xff --application nrf52832_xxaa_app.hex --key-file private.pem nrf52832_xxaa.zip

其中 --sd-req 參數(shù)為SoftDevice的Firmware ID,可以使用nRFgo燒錄SoftDevice后,在flash表中看到

Region 0 (SoftDevice)
Size:152kB
Firmware:
Unknown(Id:0x00a8)

最后的id即為需要的值

生成的nrf52832_xxaa.zip即為我們需要的文件

DFU

這些命令可以在sdk文檔 nRF5 sdk-Libraries-Bootloader and DFU modules-Device Firmware Update process-Validation 中查詢到.
文件生成后就可以DFU升級(jí)了

使用自己設(shè)置的方式使nrf52832進(jìn)入DFu模式,手機(jī)使用nRF Connect軟件連接DFU的藍(lán)牙設(shè)備(默認(rèn)名稱為DFUTARG),點(diǎn)擊右上角DFU按鈕,選擇zip文件,選擇上一步的zip文件即可升級(jí),升級(jí)完成nrf52832自動(dòng)重啟運(yùn)行新固件.

DFU 手機(jī)操作截屏.png

總結(jié)

將以上命令總結(jié)一下,下次用的時(shí)候就直接在這里復(fù)制了

@echo off

copy "D:\Documents\Desktop\nRF52832\nRF5_SDK_15.0.0_a53641a\examples\dfu\secure_bootloader\pca10040_ble\arm5_no_packs\_build\nrf52832_xxaa_s132.hex" "bootloader.hex"
copy "E:\Program\nRF5\nRF52832_Test\_build\nrf52832_xxaa.hex" "nrf52832_xxaa_app.hex"

set path=C:\Python27\Scripts
::生成bootloader setting文件
nrfutil.exe settings generate --family NRF52 --application nrf52832_xxaa_app.hex --application-version 0 --bootloader-version 0 --bl-settings-version 1 bootloader_settings.hex

::合并bootloader softdevice
"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\mergehex.exe" --merge bootloader.hex "D:\Documents\Desktop\nRF52832\s132_nrf52_6.0.0\s132_nrf52_6.0.0_softdevice.hex" --output production_final1.hex
::再合并application 
"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\mergehex.exe" --merge production_final1.hex nrf52832_xxaa_app.hex --output production_final2.hex
::合并bootloader setting
"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\mergehex.exe" --merge production_final2.hex bootloader_settings.hex --output production_final.hex

::刪除中間文件
del bootloader_settings.hex
del production_final1.hex
del production_final2.hex


::"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\nrfjprog" -f NRF52 --eraseall
::"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\nrfjprog" f NRF52 --program "production_final.hex" --verify
::"C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\nrfjprog" -f NRF52 --reset

nrfutil pkg generate --hw-version 52 --sd-req 0xa8 --application-version 0xff --application nrf52832_xxaa_app.hex --key-file private.pem nrf52832_xxaa_app.zip
pause
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嚷炉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子绘证,更是在濱河造成了極大的恐慌,老刑警劉巖胞枕,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魏宽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡派桩,警方通過(guò)查閱死者的電腦和手機(jī)娘摔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鸭津,“玉大人肠缨,你說(shuō)我怎么就攤上這事∥攀椋” “怎么了脑慧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)坑律。 經(jīng)常有香客問(wèn)我囊骤,道長(zhǎng),這世上最難降的妖魔是什么宫屠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任滑蚯,我火速辦了婚禮,結(jié)果婚禮上乌逐,老公的妹妹穿的比我還像新娘。我一直安慰自己浙踢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布胰舆。 她就那樣靜靜地躺著蹬挤,像睡著了一般焰扳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吨悍,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天育瓜,我揣著相機(jī)與錄音,去河邊找鬼躏仇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛糟描,可吹牛的內(nèi)容都是我干的书妻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼崇呵!你這毒婦竟也來(lái)了馅袁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤犹褒,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后叠骑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掉房,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年卓囚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诅病。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蝇棉,死狀恐怖苏潜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情恤左,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布戳气,位于F島的核電站瓶您,受9級(jí)特大地震影響纲仍,放射性物質(zhì)發(fā)生泄漏呀袱。R本人自食惡果不足惜郑叠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一乡革、第九天 我趴在偏房一處隱蔽的房頂上張望摊腋。 院中可真熱鬧嘁傀,春花似錦、人聲如沸细办。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)娃殖。三九已至,卻和暖如春堕虹,著一層夾襖步出監(jiān)牢的瞬間芬首,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工赦政, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耀怜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓掰派,卻偏偏與公主長(zhǎng)得像左痢,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子俊性,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1定页、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_X自主閱讀 15,979評(píng)論 3 119
  • 今天拯勉,周老師把我們每一列都排了組長(zhǎng),我們這一列是周老師宫峦,振興中國(guó),榆林导绷。
    王文卿閱讀 119評(píng)論 0 0
  • 這個(gè)單元是方塊的變形妥曲,每個(gè)圖形都是以方塊為起點(diǎn),延伸出各種可能性檐盟,畫(huà)出各種人物、動(dòng)物和物體导犹。跟老王學(xué)畫(huà)畫(huà)羡忘,只要拿起...
    雪心168閱讀 279評(píng)論 2 1
  • 學(xué)生時(shí)代,動(dòng)蕩在周?chē)氖遣恢@鄣那啻汉蔂柮删淼瘢曰钴S在學(xué)校的每一個(gè)角落!1踔觥蝎亚! 步入社會(huì),開(kāi)始了朝九晚五的固定節(jié)奏...
    千里星晴閱讀 1,261評(píng)論 0 1
  • 1.記錄躺彬。沒(méi)有記錄就沒(méi)有發(fā)生梅惯,看過(guò)的書(shū),走過(guò)的路铣减,見(jiàn)過(guò)的人,記錄下來(lái)(拍下來(lái)葫哗,寫(xiě)下來(lái)球涛,畫(huà)下來(lái))校镐。 2.學(xué)習(xí)。每年學(xué)...
    一磨閱讀 593評(píng)論 10 13