物聯(lián)網(wǎng)(IoT)代表著一個重要的發(fā)展趨勢,逐漸將日常生活中的各個方面相互連接在一起。不同于早期的路由器等無線設(shè)備(每個房間或者辦公室安裝一個)在數(shù)量上的局限性,物聯(lián)網(wǎng)將會非常深入的滲透到方方面面,并且可以連接大量的設(shè)備。簡單舉幾個例子,譬如在一個家庭環(huán)境中,我們可以遠(yuǎn)程鎖門、開關(guān)窗簾、控制照明以及管理溫度和濕度等等。
本文引用地址:http://www.eepw.com.cn/article/201703/345668.htm
物聯(lián)網(wǎng)規(guī)?;渴鹈媾R著眾多挑戰(zhàn),例如:眾多設(shè)備近距共終端和龐大數(shù)量的設(shè)備互連。這些挑戰(zhàn)催生出對無線(OTA)固件升級的需求,它將是物聯(lián)網(wǎng)系統(tǒng)必不可缺的一個組成部分。OTA的有效性已在許多應(yīng)用程序中得到驗證,例如手機(jī)會通過定期升級來接收新功能和修補(bǔ)漏洞。
基于BLE的OTA固件升級功能相對而言是一個新生事物,試想,將一個beacon部署在一個大型市場中以推送在展的產(chǎn)品信息。這些beacon的位置有可能難以觸及,而且它們的龐大數(shù)量也讓用戶不可能在部署后對它們進(jìn)行逐個編程。因此,當(dāng)有新功能或需要修補(bǔ)的漏洞出現(xiàn)時,OTA固件升級就會成為一個重要的省時性能。
對于物聯(lián)網(wǎng)而言,有三大原因正在推升市場對基于BLE的OTA固件升級的需求:
- 廣泛和種類各異的設(shè)備:設(shè)備的數(shù)量和種類在分布式網(wǎng)絡(luò)中扮演重要角色,如體育場智能照明應(yīng)用。一個標(biāo)準(zhǔn)OTA接口可確保其固件升級架構(gòu)通用于不同的節(jié)點。因此,雖然一個大型泛光燈和一個走廊燈在功能上不同,但一個基于BLE的標(biāo)準(zhǔn)OTA接口可以在它們之間通用。這意味著,向這些種類各異的設(shè)備推送新固件的主機(jī)設(shè)備可以是一個通用平臺。同時這還意味著,可以在一個控制室中升級體育場中所有不同類型的照明燈,而不是對它們進(jìn)行逐個升級。
- 不斷變化的需求和新功能:物聯(lián)網(wǎng)是一個迅速變化和發(fā)展的市場,新的產(chǎn)品需求和BLE功能不斷涌現(xiàn)。例如,安全威脅和隱私泄露是物聯(lián)網(wǎng)設(shè)備管理領(lǐng)域面臨的最大挑戰(zhàn)之一。為了防范病毒攻擊,設(shè)備固件可通過OTA固件升級流程獲得最新補(bǔ)丁和更多安全算法。任何物聯(lián)網(wǎng)系統(tǒng)都由兩個部分組成:硬件和固件。在基于SoC的應(yīng)用中,OTA固件升級功能不僅能夠更新固件,而且還能重新配置片上硬件資源。
- 緊迫的產(chǎn)品上市需求:物聯(lián)網(wǎng)系統(tǒng)的設(shè)計周期很短,而市場需要持續(xù)創(chuàng)新和部署最新功能。一個總的發(fā)展進(jìn)程是:對硬件進(jìn)行過度設(shè)計,以便在一個較長的時期內(nèi)滿足不斷升高的市場需求。OTA固件升級可實現(xiàn)漸進(jìn)式部署。例如,一個恒溫器系統(tǒng)最初可以只部署一個熱傳感器實現(xiàn)快速部署,之后再部署濕度傳感器。請注意,這種方法使得硬件設(shè)計成為一個深思熟慮的過程,在架構(gòu)階段從硬件角度考慮了未來的部署。
物聯(lián)網(wǎng)領(lǐng)域具有多樣性,應(yīng)用和最終解決方案需求也是如此。某些產(chǎn)品看重成本,而另一些則與眾不同,旨在定義新的細(xì)分市場。為了保持靈活性,OTA bootloader(引導(dǎo)加載程序)架構(gòu)應(yīng)能適應(yīng)不同的需求。下面我們探討這種靈活性的驅(qū)動因素和架構(gòu)選項。
雖然OTA固件升級是物聯(lián)網(wǎng)應(yīng)用的福音,但產(chǎn)品團(tuán)隊也必須留意和避免一些陷阱。現(xiàn)場升級固件的能力外加緊迫的上市需求有可能給團(tuán)隊帶來壓力,迫使其太快發(fā)布固件。例如,大規(guī)模部署產(chǎn)品的競賽可能讓營銷人員依賴以下事實:今后可以更新固件。這有可能導(dǎo)致企業(yè)發(fā)布不穩(wěn)定、未經(jīng)過全面驗證或優(yōu)化的軟件或產(chǎn)品。產(chǎn)品團(tuán)隊?wèi)?yīng)仔細(xì)權(quán)衡這些決策的影響,通過運用約束條件達(dá)到不過度使用OTA的目的。此外,頻繁更新也可能不受最終用戶的歡迎。
OTA的基本原理
讓我們了解一下OTA固件升級的原理。就基本原理而言,OTA與UART 引導(dǎo)加載程序或USB 引導(dǎo)加載程序等其它引導(dǎo)加載程序沒有什么差異。圖1顯示了一個可升級、基于固件的系統(tǒng)的基本架構(gòu)。
圖1: UART 引導(dǎo)加載程序系統(tǒng)
如圖所示,目標(biāo)設(shè)備的非易失性存儲器分為兩個區(qū):– 引導(dǎo)加載區(qū)和應(yīng)用程序區(qū)。存儲器的引導(dǎo)加載區(qū)存儲代碼,負(fù)責(zé):1) 設(shè)備的引導(dǎo)操作;2) 檢查主機(jī)是否有一個供可引導(dǎo)加載區(qū)使用的更新后的固件映像;3) 通過一個UART接口接收更新后的固件映像;4) 將更新后的固件映像寫入存儲器的可引導(dǎo)加載區(qū)。存儲器的應(yīng)用程序區(qū)是負(fù)責(zé)定義系統(tǒng)功能的實際應(yīng)用代碼。
與此類似,為了理解OTA固件升級,可將存儲器分為引導(dǎo)加載區(qū)和應(yīng)用程序區(qū)。與UART 引導(dǎo)加載程序相比,此處最大的不同是用于從主機(jī)接收新固件的接口。OTA固件升級使用一個無線通信接口接收更新后的固件映像。取決于具體應(yīng)用,逐個接口可能是WiFi、ZigBee、藍(lán)牙或任何其它無線接口。無論何種接口,其過程和基本原理都是相同的。
目前,藍(lán)牙低功耗(BLE)標(biāo)準(zhǔn)無所不在,因為它功耗較低,而且獲得了大多數(shù)PC和手機(jī)的支持,這種普及程度使其成為物聯(lián)網(wǎng)應(yīng)用的首選。說到這里,BLE是一個不斷演進(jìn)的標(biāo)準(zhǔn),幾乎每年都有一個新版本發(fā)布,其中包含更多新特性,以滿足物聯(lián)網(wǎng)應(yīng)用不斷變化的需求。市場中的各大芯片廠商正在展開一場競賽,推出遵從新版標(biāo)準(zhǔn)的解決方案。大多數(shù)情況下,芯片廠商在幾個BLE協(xié)議棧、IDE版本中支持這些特性。此外,標(biāo)準(zhǔn)的快速變化給版本之間留下的測試時間也很短。因此,芯片廠商發(fā)布的每一個新的BLE協(xié)議棧版本通常都會被客戶反饋存在缺陷,或由內(nèi)部團(tuán)隊在測試期間發(fā)現(xiàn)缺陷。因此,當(dāng)使用BLE升級物聯(lián)網(wǎng)設(shè)備時,不僅應(yīng)用代碼需要升級,核心BLE協(xié)議??赡芤残枰?。一個合理、可靠的引導(dǎo)加載程序架構(gòu)應(yīng)能支持這些不同的應(yīng)用,而且應(yīng)足夠靈活,能夠滿足不斷變化的應(yīng)用需求。
對于基于BLE的設(shè)備而言,有兩種OTA bootloader架構(gòu):
固定協(xié)議棧OTA bootloader
可升級協(xié)議棧OTA bootloader
固定協(xié)議棧OTA bootloader – 在一個固定協(xié)議棧OTA bootloader系統(tǒng)中,協(xié)議棧不升級,只能升級應(yīng)用固件。協(xié)議棧存儲在存儲器的寫保護(hù)/引導(dǎo)加載程序區(qū)。圖2顯示了一個典型的固定協(xié)議棧OTA bootloader系統(tǒng)。
圖2:基于BLE的固定協(xié)議棧OTA bootloader
固定協(xié)議棧OTA bootloader的優(yōu)點是:升級固件的時間較短,因為只能升級應(yīng)用代碼;其缺點是:即使部署后發(fā)現(xiàn)重大問題也無法升級協(xié)議棧代碼。
可升級協(xié)議棧OTA bootloader – 在可升級協(xié)議棧bootloader系統(tǒng)中,協(xié)議棧和應(yīng)用固件都能升級。雖然不同廠商實現(xiàn)bootloader的方式不同,但在一個典型的可升級協(xié)議棧系統(tǒng)中,存儲器分為三個區(qū):–
Launcher(啟動器)區(qū) – 基本上而言,launcher是一個無通信接口的引導(dǎo)加載程序。它負(fù)責(zé)檢查是否需要引導(dǎo)加載,然后相應(yīng)地將控制權(quán)交給協(xié)議棧區(qū)或應(yīng)用區(qū)。如果有一個新協(xié)議棧映像,它還負(fù)責(zé)升級協(xié)議棧的存儲區(qū)。
協(xié)議棧區(qū) – 該區(qū)存儲BLE協(xié)議棧。當(dāng)主機(jī)設(shè)備有一個新映像時,協(xié)議棧區(qū)負(fù)責(zé)與主機(jī)設(shè)備通信。此外,該區(qū)與應(yīng)用共享,用于建立BLE連接,該區(qū)即扮演引導(dǎo)加載程序區(qū)的角色,也扮演可應(yīng)用程序區(qū)的角色。該區(qū)由launcher將新協(xié)議棧固件寫入該區(qū)。然后,該區(qū)引導(dǎo)加載應(yīng)用區(qū)。
應(yīng)用區(qū) – 與上述其它實現(xiàn)相同,該區(qū)是實際應(yīng)用代碼。
可升級協(xié)議棧OTA bootloader的運行分為三步:
第1步:圖3顯示了目標(biāo)設(shè)備(即需要得到OTA升級的設(shè)備)和主機(jī)設(shè)備(即有新固件并負(fù)責(zé)將其發(fā)送給目標(biāo)設(shè)備的設(shè)備)。目標(biāo)設(shè)備使用其現(xiàn)有的BLE協(xié)議棧接收新的BLE協(xié)議棧。這個新的BLE協(xié)議棧存儲在存儲器的應(yīng)用固件區(qū)。應(yīng)用固件區(qū)被新的BLE協(xié)議棧覆蓋,因為物聯(lián)網(wǎng)設(shè)備的內(nèi)存通常有限。增大內(nèi)存會增加設(shè)備成本,而且出于引導(dǎo)加載原因而增大存儲器也不合理。請注意,現(xiàn)有BLE協(xié)議棧不能被直接覆蓋,因為這將破壞正與主機(jī)通信的現(xiàn)有協(xié)議棧代碼,從而在升級結(jié)束前中斷通信。
圖3:第1步:現(xiàn)有協(xié)議棧從主機(jī)設(shè)備接收新協(xié)議棧,并將其寫入應(yīng)用存儲器
第2步: launcher復(fù)制應(yīng)用固件區(qū)的BLE協(xié)議棧,并將其寫入現(xiàn)有BLE協(xié)議區(qū)(見圖4)。此步結(jié)束時,BLE協(xié)議區(qū)將有新的BLE協(xié)議棧。
圖4:第2步: Launcher使用新協(xié)議棧覆蓋現(xiàn)有協(xié)議棧
第3步:目標(biāo)設(shè)備使用新的BLE協(xié)議棧從主機(jī)設(shè)備接收新的應(yīng)用固件,然后將其寫入應(yīng)用固件存儲區(qū)(見圖5)。
圖5:第3步:新協(xié)議棧接收新應(yīng)用固件,然后將其寫入應(yīng)用區(qū)
此步之后,目標(biāo)設(shè)備固件的配置如圖6所示,協(xié)議棧和應(yīng)用固件升級全部結(jié)束。
圖6:升級結(jié)束后,存儲器有了新的BLE 協(xié)議棧和應(yīng)用固件
可升級協(xié)議棧bootloader的一大優(yōu)勢是:部署產(chǎn)品后,允許升級協(xié)議棧和應(yīng)用。
還可以根據(jù)OTA Bootloader用于存儲更新的固件映像的存儲器對它們進(jìn)行分類:
1. 內(nèi)部存儲器OTA bootloader
2. 外部存儲器OTA bootloader
內(nèi)部存儲器OTA bootloader – 對于這種類型的引導(dǎo)加載程序,更新后的固件映像 – 新的BLE協(xié)議棧及應(yīng)用固件或新的應(yīng)用固件 – 被直接寫入設(shè)備的內(nèi)部閃存。本文至此所描述的引導(dǎo)加載程序架構(gòu)都基于內(nèi)部存儲器。此類引導(dǎo)加載程序的優(yōu)勢是:無需外部存儲器,因此降低了升級功能的實現(xiàn)成本。
外部存儲器OTA bootloader – 對于外部存儲器OTA bootloader,現(xiàn)有協(xié)議棧接收新的應(yīng)用固件或新的協(xié)議棧固件及應(yīng)用固件。它們被存儲在外部存儲器中。在以后的某個時刻,根據(jù)存儲器類型(I2C、SPI或其它串口存儲器),設(shè)備使用一個有線接口從外部存儲器讀取新固件,然后升級內(nèi)部閃存。這種方式增加了外部存儲器的總成本,用于設(shè)備內(nèi)部存儲器有限但卻需要升級其協(xié)議棧的情況。請注意,在某些應(yīng)用中協(xié)議棧大于應(yīng)用固件。
為某個物聯(lián)網(wǎng)應(yīng)用選擇組件時,必需了解芯片廠商和開發(fā)工具所支持的OTA固件升級方法。評估一個配備內(nèi)部存儲器的設(shè)備時,基于內(nèi)部存儲器的OTA升級是一種經(jīng)濟(jì)高效的方法。某些設(shè)備可能不允許升級協(xié)議棧,只允許升級應(yīng)用固件。某些可升級協(xié)議棧OTA bootloader架構(gòu)可能只允許單獨升級協(xié)議?;驊?yīng)用固件,從而縮短升級時間。在為您的應(yīng)用選擇設(shè)備時,最好提前了解這些局限性。
對設(shè)備固件進(jìn)行OTA升級時,通過在空中傳輸,容易遭受攻擊。因此,必需確保主機(jī)設(shè)備只與相關(guān)目標(biāo)設(shè)備通信。此外,應(yīng)對空中傳輸?shù)臄?shù)據(jù)進(jìn)行加密,以便讓其它監(jiān)聽BLE通信的設(shè)備無法解碼這些數(shù)據(jù)。BLE 4.2改進(jìn)了安全機(jī)制,能夠更好地防范中間人攻擊和被動監(jiān)聽攻擊,降低IP被盜或設(shè)備被黑客劫持的風(fēng)險。如果使用的是一個舊版BLE,明智的做法是手動增加一個加密層,以保護(hù)您的IP免遭被動監(jiān)聽。
總而言之,物聯(lián)網(wǎng)市場中的產(chǎn)品需求比傳統(tǒng)產(chǎn)品變化更快。此外,已得到廣泛普及的BLE通信標(biāo)準(zhǔn)仍在不斷演進(jìn),芯片廠商需要較長時間來支持新特性。將產(chǎn)品更快推向市場的壓力也可能影響測試時間或產(chǎn)品的現(xiàn)場試驗。鑒于這些原因,在部署產(chǎn)品后,OTA固件升級可讓開發(fā)人員隨著時間的推移增強(qiáng)產(chǎn)品功能,并修補(bǔ)產(chǎn)品缺陷。最后,選擇可滿足您的應(yīng)用需求、保護(hù)您的IP的OTA固件升級方法也非常重要。