李超,王波
(小米科技(武漢)有限公司,武漢,430073)
近幾年物聯(lián)網(wǎng)發(fā)展迅速,它賦予空調(diào)很多新穎的功能,如遠(yuǎn)程操控、智能聯(lián)動(dòng)、智能診斷、OTA升級(jí)等[1-2]。其中OTA升級(jí)是非常重要的功能,它解決了空調(diào)安裝后的軟件bug修復(fù)、功能迭代、用戶定制等傳統(tǒng)空調(diào)的痛點(diǎn)問題[7-8]。目前空調(diào)行業(yè)內(nèi),受到室內(nèi)外機(jī)通信速率低導(dǎo)致升級(jí)時(shí)間長、芯片空間小導(dǎo)致OTA成本高等因素的影響,一般都只是對(duì)空調(diào)室內(nèi)機(jī)的程序進(jìn)行了OTA升級(jí),未升級(jí)室外機(jī)的程序。
空調(diào)室外機(jī)的程序主要包含壓縮機(jī)、外風(fēng)機(jī)、PFC的驅(qū)動(dòng)算法,以及一些空調(diào)制冷、制熱的系統(tǒng)控制算法,這一部分程序影響空調(diào)運(yùn)行的可靠性、舒適性等,其OTA需求也是十分強(qiáng)烈。
本文就空調(diào)室外機(jī)的程序OTA進(jìn)行論述,主要對(duì)提高室外機(jī)程序OTA的速度、降低OTA成本等瓶頸問題進(jìn)行討論。
空調(diào)控制系統(tǒng)一般由Wi-Fi模塊、室內(nèi)機(jī)主板和室外機(jī)主板組成,其中室內(nèi)機(jī)主板和Wi-Fi模塊之間通過串口TTL通信,室內(nèi)機(jī)主板和室外機(jī)主板之間通過強(qiáng)電電流環(huán)通信,如圖1。
圖1 空調(diào)控制系統(tǒng)通信框圖
在室外機(jī)也具備OTA能力的控制系統(tǒng)中,為了使每次升級(jí)的室內(nèi)機(jī)固件和室外機(jī)固件都一一對(duì)應(yīng),不出現(xiàn)交叉配套的現(xiàn)象,需要將室內(nèi)機(jī)固件和室外機(jī)固件合并到同一固件包內(nèi)上傳到云端。
OTA過程一般為Wi-Fi模組從云端獲取最新的固件包,存儲(chǔ)到模組的Code flash中,然后再傳輸給室內(nèi)機(jī),室內(nèi)機(jī)收到固件包之后,按照既定的流程對(duì)室外機(jī)固件和室內(nèi)機(jī)固件進(jìn)行拆包傳輸升級(jí)。常規(guī)流程如圖2。
圖2 空調(diào)控制器程序OTA流程圖
上述OTA流程中,有以下幾點(diǎn)可以提高整個(gè)OTA過程的穩(wěn)定性及可靠性:
(1)在室內(nèi)機(jī)固件包和室外機(jī)固件包的開始部分,增加固件碼頭信息,明確當(dāng)前固件包的合法性校驗(yàn)數(shù)據(jù)以及固件版本,如圖3。OTA時(shí),空調(diào)先收到固件碼頭信息,對(duì)固件的合法性進(jìn)行檢查,如果不適配本機(jī)型或者錯(cuò)誤的固件,不允許進(jìn)行OTA升級(jí);另外模組中的固件版本比當(dāng)前室內(nèi)機(jī)或者室外機(jī)的固件版本還低,也不允許進(jìn)行OTA升級(jí)。只有合法且需要升級(jí)的固件,才會(huì)進(jìn)行OTA。
圖3 程序固件包組成示意圖
(2)上傳云端的固件包,包含室外機(jī)固件包和室內(nèi)機(jī)固件包,且將室外機(jī)固件包置于室內(nèi)機(jī)固件包前面,如圖3。此方法可以在升級(jí)時(shí),室內(nèi)機(jī)在正常運(yùn)行區(qū)對(duì)室外機(jī)固件進(jìn)行傳輸,保證室內(nèi)機(jī)bootloader區(qū)域的空間最小化和功能最簡化,提高bootloader區(qū)的運(yùn)行可靠性。
(3)室內(nèi)機(jī)在上電時(shí),從內(nèi)外機(jī)MCU中獲取當(dāng)前室內(nèi)外機(jī)的固件版本,并從模組獲取需要升級(jí)的室內(nèi)外機(jī)目標(biāo)版本,通過對(duì)版本對(duì)比,確定OTA的執(zhí)行流程,如室外機(jī)無需進(jìn)行OTA,則會(huì)直接跳過室外機(jī)的OTA,減少OTA時(shí)長。
(4)室內(nèi)外機(jī)的數(shù)據(jù)傳輸,采用Xmodem協(xié)議。眾所周知,Xmodem協(xié)議是高可靠性的文件傳輸通信方式。室內(nèi)外機(jī)在正常運(yùn)轉(zhuǎn)時(shí),采用常規(guī)的串口通信;在需要更新室外機(jī)固件時(shí),內(nèi)外機(jī)切換到Xmodem通信模式進(jìn)行文件傳輸,提高室外機(jī)OTA的效率以及穩(wěn)定性。
因弱電通信受傳輸距離不夠長、受強(qiáng)電干擾嚴(yán)重、成本高等原因,家用變頻空調(diào)內(nèi)外機(jī)通信電路普遍采用強(qiáng)電電流環(huán)通信[3]。但強(qiáng)電通信在變頻壓縮機(jī)運(yùn)行期間,容易受到PFC驅(qū)動(dòng)和壓縮機(jī)驅(qū)動(dòng)的IGBT開關(guān)信號(hào)干擾,所以為了通信的穩(wěn)定性和可靠性,一般室內(nèi)外機(jī)通信的波特率都在1,200 bps以下,導(dǎo)致OTA室外機(jī)固件時(shí),耗時(shí)非常長。
為避免空調(diào)運(yùn)行的干擾導(dǎo)致OTA數(shù)據(jù)異常,在OTA期間,空調(diào)室內(nèi)外機(jī)一般會(huì)先執(zhí)行關(guān)機(jī)動(dòng)作?;诖嗽颍贠TA室外機(jī)固件時(shí),將室內(nèi)外機(jī)通信的波特率提高,由原來的1,200 bps提高至4,800 bps,可以將OTA時(shí)長大幅縮短。
在空調(diào)產(chǎn)品上市銷售后,如果不是軟件bug和新增控制功能,一般升級(jí)都是根據(jù)售后反饋的問題進(jìn)行參數(shù)的優(yōu)化,使空調(diào)運(yùn)行更穩(wěn)定,效果更好。所以對(duì)于相對(duì)穩(wěn)定的空調(diào)產(chǎn)品來說,升級(jí)參數(shù)的概率遠(yuǎn)大于升級(jí)程序的概率。然而參數(shù)所占空間一般只有1~2Kbytes,而程序升級(jí)則高達(dá)數(shù)百Kbytes,所以在只需要升級(jí)參數(shù)的時(shí)候,只對(duì)參數(shù)進(jìn)行OTA,可以極大程度的縮短OTA時(shí)間[6]。其具體做法是:
(1)將固件包分為室內(nèi)機(jī)程序、室內(nèi)機(jī)參數(shù)、室外機(jī)程序、室外機(jī)參數(shù)4個(gè)部分,在合并這4部分到同一個(gè)固件包的同時(shí),給每一個(gè)部分增加一條固件包信息,包括版本號(hào)、校驗(yàn)碼等信息,如圖4(a)。
圖4 程序參數(shù)分區(qū)OTA示意圖
(2)在室內(nèi)機(jī)收到Wi-Fi模組傳輸?shù)墓碳畔⒑?,先與空調(diào)器室內(nèi)外機(jī)當(dāng)前的室內(nèi)外機(jī)程序版本號(hào)、參數(shù)版本號(hào)進(jìn)行對(duì)比,判斷出哪一部分需要進(jìn)行升級(jí)。如果是需要升級(jí)的部分,則進(jìn)行OTA升級(jí),如果不需要升級(jí)的部分,則跳過該部分的升級(jí),流程如圖4(b)。
一般情況下,程序編寫完成,在編譯的時(shí)候,編譯地址、內(nèi)存占用等都會(huì)根據(jù)編譯的規(guī)則進(jìn)行調(diào)整,所以程序中任何小的改動(dòng),都有可能影響整個(gè)編譯結(jié)果[4]。這種情況下,只要程序升級(jí),那么一定是對(duì)整個(gè)芯片的flash進(jìn)行刷寫,是否能有方法做到只升級(jí)程序變動(dòng)的地方呢?這里提出一種方案,如下:
在上一節(jié)所述基礎(chǔ)上,我們?cè)诰帉懣照{(diào)控制程序的時(shí)候,將程序中各個(gè)功能按照模塊來劃分,如將室內(nèi)機(jī)程序劃分為:通信控制模塊、傳感器采樣模塊、擺葉控制模塊、內(nèi)風(fēng)機(jī)控制模塊等;將室外機(jī)程序劃分為:壓縮機(jī)驅(qū)動(dòng)模塊、室外風(fēng)機(jī)驅(qū)動(dòng)模塊、PFC模塊、頻率控制模塊、膨脹閥控制模塊等。
各個(gè)模塊之間,通過變量映射、參數(shù)傳遞函數(shù)等方式進(jìn)行消息互通,并解掉所有的耦合關(guān)系,這樣一來每個(gè)模塊都被獨(dú)立封裝了起來。最后在編譯程序的時(shí)候,指定每個(gè)功能模塊的編譯地址和占用空間,這樣各個(gè)功能就成了獨(dú)立的模塊。編譯后,由于各模塊之間完全解耦,程序沒有變化的模塊,其占用的MCU存儲(chǔ)區(qū)間的內(nèi)容也不會(huì)產(chǎn)生變化,如圖5。
圖5 程序模塊解耦編譯示意圖
在生成OTA固件包時(shí),我們也是先給每個(gè)功能模塊打上碼頭信息標(biāo)簽,按照類似圖3的方式進(jìn)行升級(jí)控制。
這種部分程序OTA的方法,可以有效減短程序功能迭代時(shí)候的OTA時(shí)長。但此方法也有明顯的缺點(diǎn):程序模塊解耦,工作量非常大;每個(gè)模塊占用的空間都需要為升級(jí)程序提前做好預(yù)留,對(duì)MCU存儲(chǔ)空間要求較高。
上述第3、4節(jié)描述了縮短OTA耗時(shí)的方法,本節(jié)則描述一種如何減小OTA所需芯片容量空間的方法,以降低OTA成本。
具備OTA功能的空調(diào)器,一般會(huì)將芯片的Flash空間劃分為3部分:Bootloader區(qū)、App區(qū)、備份區(qū)。其中Bootloader區(qū)為啟動(dòng)引導(dǎo)區(qū),用作校驗(yàn)分區(qū)固件、切換啟動(dòng)分區(qū)等;App區(qū)和備份區(qū)一般是相同大小的兩個(gè)空間,用作互相備份程序,避免在OTA期間,因掉電、通信故障等情況導(dǎo)致空調(diào)無程序,無法運(yùn)行[5]。
眾所周知,芯片的價(jià)格與其Flash空間息息相關(guān),空間越大,芯片價(jià)格越高。傳統(tǒng)的芯片分區(qū)方案,使得備份區(qū)的利用率低,方案成本高。
這里提出一種方法,將芯片的Flash空間也劃分為3部分:Bootloader區(qū)、App區(qū)、應(yīng)急運(yùn)轉(zhuǎn)區(qū)。其中App區(qū)與傳統(tǒng)的分區(qū)功能一致,但應(yīng)急運(yùn)轉(zhuǎn)區(qū)將空調(diào)的控制功能簡化,僅做空調(diào)運(yùn)轉(zhuǎn)必需的最小控制系統(tǒng),舍去復(fù)雜的控制功能。
在OTA期間,如果App區(qū)因各種原因升級(jí)失敗,無法在App區(qū)運(yùn)轉(zhuǎn),此時(shí)程序?qū)⑻D(zhuǎn)到應(yīng)急運(yùn)轉(zhuǎn)區(qū)運(yùn)行,為用戶繼續(xù)提供制冷、制熱等服務(wù),并持續(xù)的獲取新的App區(qū)的固件,在App區(qū)固件升級(jí)成功后,再跳轉(zhuǎn)到App區(qū),運(yùn)行功能齊全的控制。
因應(yīng)急運(yùn)轉(zhuǎn)區(qū)的功能最小系統(tǒng),其代碼量遠(yuǎn)小于App區(qū),所以此時(shí)可按照App區(qū)空間大,應(yīng)急運(yùn)轉(zhuǎn)區(qū)空間小的方案來劃分芯片F(xiàn)lash空間。
如圖6所示,程序包大小同為80 Kbytes,傳統(tǒng)分區(qū)方式的App區(qū)和備份區(qū)會(huì)各占124 Kbytes,芯片總?cè)萘啃柽x型為256 Kbytes;而以不對(duì)等分區(qū)方式的App區(qū)滿足大于80 Kbytes,并將應(yīng)急運(yùn)轉(zhuǎn)區(qū)簡化到30 Kbytes以內(nèi),這樣芯片容量僅需128 Kbytes即可滿足需求。
圖6 不對(duì)等分區(qū)OTA方案示意圖
以上,可以得出,使用不對(duì)等的分區(qū)方案,將備份區(qū)縮小,并用作為應(yīng)急運(yùn)轉(zhuǎn)區(qū),可以在滿足設(shè)備不“變磚”的情況下,還能大幅縮小芯片容量需求,降低了芯片的成本。
空調(diào)器在售出安裝后,出現(xiàn)軟件bug、功能迭代、用戶定制等需求時(shí),如果沒有OTA功能,就需要售后工程師上門服務(wù),對(duì)空調(diào)企業(yè)來說,這是一筆非常大的支出。而OTA功能完美的解決了這個(gè)問題,既節(jié)省了空調(diào)企業(yè)的開支,也以最快的速度響應(yīng)了用戶的需求。
靈活的改良空調(diào)器的OTA方案,在安全可靠的前提下使得OTA耗時(shí)長、OTA成本高等痛點(diǎn)問題得到良好的解決,本文論述的4種方法可廣泛用于空調(diào)器及其他電器的OTA場(chǎng)景,具有一定的實(shí)用價(jià)值。