固件升級(jí)(DFU/OTA)

本文屬于裝糊涂的豬原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處作者
文中的Demo地址位于:https://github.com/ftc300

· DFU = Device Firmware Update (設(shè)備固件更新)
· OTA = Over The Air (空中升級(jí))

(wikipedia)用于智能硬件的升級(jí)足淆,包括軟件更新然评、固件更新和設(shè)備管理等功能农猬。起初赚爵,固件更新需要到設(shè)備廠商指服務(wù)中心進(jìn)行蜀撑。接收更新的另一種方法是將設(shè)備連入電腦端進(jìn)行升級(jí)看铆。但這兩種方法的缺點(diǎn)是很不方便徽鼎。因此,現(xiàn)在很多的移動(dòng)設(shè)備制造商和運(yùn)營(yíng)商已經(jīng)采納FOTA技術(shù)為設(shè)備進(jìn)行更新弹惦。如果移動(dòng)設(shè)備具有FOTA功能否淤,移動(dòng)設(shè)備制造商和運(yùn)營(yíng)商可以將新固件通過(guò)網(wǎng)絡(luò)向設(shè)備“推送”更新消息,這降低了固件更新的成本棠隐,提高了消費(fèi)者的滿意度石抡。


本次固件升級(jí)采用的是 Secure Device Firmware Update。
安全設(shè)備固件更新(DFU)服務(wù)公開了在設(shè)備上執(zhí)行設(shè)備固件更新的必要信息助泽。該服務(wù)是由北歐半導(dǎo)體公司定義的專有服務(wù)啰扛,用于演示nRF5設(shè)備上的典型設(shè)備固件更新。

首先要更改藍(lán)牙設(shè)別的狀態(tài)嗡贺,在藍(lán)牙的service的characteristic中寫入?yún)?shù)隐解,此時(shí)藍(lán)牙設(shè)備斷開,進(jìn)入Bootloader狀態(tài)诫睬,并且MAC地址發(fā)生變化煞茫,末尾+1(敲黑板)

model.png

然后重新連接設(shè)備設(shè)備出現(xiàn)如下兩個(gè)characteristic


servicechar.png

DFU Control Point

DFUControl.png

下表列出了作為響應(yīng)的一部分發(fā)送的結(jié)果代碼:


resultcode.png

傳輸init packet

DFU控制器首先檢查init數(shù)據(jù)包是否已經(jīng)成功傳輸。如果沒(méi)有摄凡,DFU控制器將檢查是否已部分傳輸续徽。如果一些數(shù)據(jù)已經(jīng)被轉(zhuǎn)移,傳輸將繼續(xù)架谎。否則炸宵,DFU控制器發(fā)送一個(gè)創(chuàng)建命令來(lái)創(chuàng)建一個(gè)新的數(shù)據(jù)對(duì)象,然后傳輸init包谷扣。當(dāng)初始包可用時(shí)土全,DFU控制器發(fā)出一個(gè)執(zhí)行命令來(lái)啟動(dòng)init包的驗(yàn)證。

msc_inline_mscgraph_5.png

傳輸firmware image

一個(gè)固件鏡像被分割成幾個(gè)連續(xù)傳輸?shù)臄?shù)據(jù)對(duì)象会涎。如果數(shù)據(jù)對(duì)象的傳輸失敗(例如裹匙,由于斷電),則可以繼續(xù)傳輸而不是重新啟動(dòng)末秃。因此概页,DFU控制器首先選擇所發(fā)送的最后一個(gè)數(shù)據(jù)對(duì)象,并檢查它是否完整和有效练慕。如果是惰匙,控制器將發(fā)出執(zhí)行命令技掏,然后繼續(xù)使用下一個(gè)數(shù)據(jù)對(duì)象進(jìn)行傳輸。否則项鬼,DFU控制器發(fā)送一個(gè)Create命令來(lái)創(chuàng)建一個(gè)新的數(shù)據(jù)對(duì)象(因此哑梳,如果這個(gè)數(shù)據(jù)對(duì)象的傳輸還沒(méi)有開始,或者接收到的數(shù)據(jù)被破壞了)绘盟,然后傳輸下一個(gè)數(shù)據(jù)對(duì)象鸠真。
當(dāng)所有數(shù)據(jù)包被傳輸時(shí),DFU控制器發(fā)出一個(gè)執(zhí)行命令來(lái)觸發(fā)實(shí)際固件更新龄毡。
DFU控制器負(fù)責(zé)跟蹤進(jìn)度吠卷。對(duì)每個(gè)Select命令的響應(yīng)包含關(guān)于最大對(duì)象大小、當(dāng)前偏移量和CRC的信息沦零。例如祭隔,如果圖像大小為10kb,最大對(duì)象大小為4 kB蠢终,則必須傳輸3個(gè)數(shù)據(jù)對(duì)象序攘。如果返回的偏移量是6kb,DFU控制器知道當(dāng)前對(duì)象是轉(zhuǎn)移的第二個(gè)對(duì)象,并且該對(duì)象沒(méi)有被完全傳輸寻拂。


msc_inline_mscgraph_6.png

Talk is cheap程奠,show you the code.
最近根據(jù)NordicSemiconductor的Android-DFU-Library寫的一個(gè)最簡(jiǎn)單的升級(jí)案例:
https://github.com/ftc300/DFU_Demo_With_NordicsemiLib

參考資料:
Library documentation
nordicsemi

維護(hù)個(gè)公眾號(hào)試試吧.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市祭钉,隨后出現(xiàn)的幾起案子瞄沙,更是在濱河造成了極大的恐慌,老刑警劉巖慌核,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件距境,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡垮卓,警方通過(guò)查閱死者的電腦和手機(jī)垫桂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)粟按,“玉大人诬滩,你說(shuō)我怎么就攤上這事∶鸾” “怎么了疼鸟?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)庙曙。 經(jīng)常有香客問(wèn)我空镜,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任吴攒,我火速辦了婚禮张抄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘舶斧。我一直安慰自己欣鳖,他們只是感情好察皇,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布茴厉。 她就那樣靜靜地躺著,像睡著了一般什荣。 火紅的嫁衣襯著肌膚如雪矾缓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天稻爬,我揣著相機(jī)與錄音嗜闻,去河邊找鬼。 笑死桅锄,一個(gè)胖子當(dāng)著我的面吹牛琉雳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播友瘤,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼翠肘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了辫秧?” 一聲冷哼從身側(cè)響起束倍,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盟戏,沒(méi)想到半個(gè)月后绪妹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柿究,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年邮旷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝇摸。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡婶肩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出探入,到底是詐尸還是另有隱情狡孔,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布蜂嗽,位于F島的核電站苗膝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏植旧。R本人自食惡果不足惜辱揭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一离唐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧问窃,春花似錦亥鬓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至听皿,卻和暖如春熟呛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尉姨。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工庵朝, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人又厉。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓九府,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親覆致。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侄旬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,869評(píng)論 6 13
  • 3.操作系統(tǒng)設(shè)計(jì) 3.1.Linux內(nèi)核配置 ONIE提供了一個(gè)網(wǎng)絡(luò)操作系統(tǒng)(NOS)安裝鏡像可以運(yùn)行的環(huán)境。因此...
    半天妖閱讀 2,407評(píng)論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法篷朵,類相關(guān)的語(yǔ)法勾怒,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法声旺,異常的語(yǔ)法笔链,線程的語(yǔ)...
    子非魚_t_閱讀 31,587評(píng)論 18 399
  • 心靈過(guò)程分為思維過(guò)程、身體過(guò)程腮猖、情緒過(guò)程鉴扫,當(dāng)一方面受阻時(shí),就會(huì)通過(guò)其他方面表達(dá)澈缺。情緒最好在情緒層面表達(dá)坪创,同時(shí)我們應(yīng)...
    王朋彥閱讀 185評(píng)論 0 0
  • 近段時(shí)間來(lái)莱预,一直堅(jiān)持著日更和晨跑,也基本養(yǎng)成了習(xí)慣项滑。 我在想依沮,我雖然堅(jiān)持著每天寫一篇文章,就像刷牙洗臉一樣,定點(diǎn)危喉,...
    小賢哥2017閱讀 1,476評(píng)論 14 12