在物聯(lián)網(wǎng)應(yīng)用中,遠(yuǎn)程IAP升級MCU的程序是一項(xiàng)非常有用的功能。
當(dāng)設(shè)備出現(xiàn)程序問題或者需要更新程序時,只需在服務(wù)器上對設(shè)備進(jìn)行升級,而無需再由專門的人員去現(xiàn)場進(jìn)行升級,從而大大地節(jié)省了人力和物力。
01
要想實(shí)現(xiàn)遠(yuǎn)程升級,首先應(yīng)實(shí)現(xiàn)以下幾個基本功能:
1、Flash讀寫:不管是本地IAP,還是遠(yuǎn)程IAP,這都是最基本的功能。
2、無線通訊:可通過WIFI、4G、以太網(wǎng)等多種方式來實(shí)現(xiàn),根據(jù)實(shí)際項(xiàng)目需求選擇。
3、通訊協(xié)議:常用的通訊協(xié)議有TCP、HTTP、FTP、MQTT等。其中,HTTP、FTP和MQTT都屬于應(yīng)用層協(xié)議,都是基于TCP(傳輸層)來實(shí)現(xiàn)的。當(dāng)然,我們也可以自己基于TCP編寫簡單的通訊協(xié)議來實(shí)現(xiàn)。
02
遠(yuǎn)程IAP與本地IAP的設(shè)計(jì)思路是一致的,都需要設(shè)計(jì)BOOT程序和APP程序。但也有一些需要注意的地方,主要是遠(yuǎn)程升級需要考慮網(wǎng)絡(luò)延遲,甚至網(wǎng)絡(luò)中斷的問題。
下面,具體介紹一下這些問題。
?
1、設(shè)計(jì)程序緩存區(qū):在內(nèi)部或外部存儲器開辟一塊區(qū)域,用于存儲分包接收到的程序數(shù)據(jù)。等到全部數(shù)據(jù)接收完畢后,再一次性寫入到Flash進(jìn)行升級。
這樣做有兩個好處:一是,直接升級時間可能會比較長,影響用戶正常使用,而增加緩存區(qū)設(shè)計(jì)可以大大減少升級時間;二是,直接升級時,如果網(wǎng)絡(luò)出現(xiàn)問題,可能導(dǎo)致設(shè)備無法正常啟動變磚,而增加緩存區(qū)設(shè)計(jì)后,即使升級數(shù)據(jù)傳輸失敗,也不影響設(shè)備的正常使用。
2、健壯的通訊協(xié)議:本地升級時數(shù)據(jù)傳輸出錯的概率比較小,但遠(yuǎn)程設(shè)計(jì)時就需要多考慮一些,比如前后兩包數(shù)據(jù)可能同時達(dá)到等。因此,設(shè)計(jì)通訊協(xié)議時,就要更嚴(yán)謹(jǐn),服務(wù)器發(fā)送的指令和數(shù)據(jù)都需要設(shè)備的確認(rèn)回復(fù)。
3、程序備份設(shè)計(jì):即使有上面的各種設(shè)計(jì)的保障,也不能保證升級過程不會失敗。最好能夠設(shè)計(jì)一個程序備份區(qū),在程序升級失敗時運(yùn)行備份區(qū)程序。
03