CoreBluetooth系列教程(五):藍(lán)牙固件升級

一.為何要升級

藍(lán)牙固件升級是使用手機(jī)給固件進(jìn)行更新,以達(dá)到修復(fù)bug的目的,完善功能的作用。升級的大概流程是:
1.當(dāng)藍(lán)牙設(shè)備的固件需要升級時(shí),由嵌入式開發(fā)人員提供新的固件,由服務(wù)器管理人員將固件放到服務(wù)器上。
2.用戶打開手機(jī) APP 的時(shí)候會檢測到服務(wù)器有更新,請求更新藍(lán)牙設(shè)備固件,確認(rèn)更新后,手機(jī)會從服務(wù)器下載固件。
3.下載完畢后,APP 會讀取固件內(nèi)容,并根據(jù)升級協(xié)議將內(nèi)容傳到藍(lán)牙設(shè)備里,完成升級。

我們常講的DFUDevice Firmware Update(設(shè)備固件更新) ,OTAOver The Air(隔空升級)

二.固件升級的流程
各個(gè)廠商的設(shè)備流程可能不一致,但大同小異,這里只說大致的流程:
首先要從云端下載的固件為 .bin 后綴的文件,文件名會有一定的格式,含有固件版本號和文件 CRC32 校驗(yàn)值。
其次是數(shù)據(jù)分塊,規(guī)定一個(gè)數(shù)據(jù)塊大小比如 1024 字節(jié),然后把升級數(shù)據(jù)進(jìn)行分塊,不夠的就剩余多少作為一塊。藍(lán)牙一次發(fā)送的數(shù)據(jù)量是有限的,所以每次發(fā)送 20 字節(jié)的數(shù)據(jù)。這個(gè)數(shù)據(jù)要遵循升級數(shù)據(jù)格式,帶指令頭和校驗(yàn)碼,下載包的數(shù)據(jù)只是這 20 字節(jié)中的一部分。所有包內(nèi)數(shù)據(jù)都攜帶在每條升級數(shù)據(jù)指令中。
最后就是升級的過程:

1.  連接設(shè)備,發(fā)送升級請求。
2.  待藍(lán)牙確認(rèn)之后,開始發(fā)送數(shù)據(jù)頭告知藍(lán)牙此次發(fā)送的數(shù)據(jù)量和 CRC 校驗(yàn)。
3.  開始發(fā)送升級數(shù)據(jù)。(每條數(shù)據(jù)之間間隔 20ms 為了藍(lán)牙能夠方便處理)。
4.  等待一個(gè)塊發(fā)送完就發(fā)送塊結(jié)束命令。
5.  藍(lán)牙確認(rèn)發(fā)送下一個(gè)塊,返回錯(cuò)誤則終止此次升級。
6.  發(fā)完所有數(shù)據(jù)之后發(fā)送升級完成。
7.  藍(lán)牙確認(rèn)則升級完成,返回錯(cuò)誤則升級失敗。

藍(lán)牙固件升級最復(fù)雜的就在升級過程,大量的數(shù)據(jù)與藍(lán)牙交互。DFU固件升級可以使用NRF的github開源庫,具體實(shí)現(xiàn)可參考這篇文章.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容