物聯(lián)網(wǎng) (IoT) 的規(guī)模給部署帶來(lái)了許多挑戰(zhàn)。僅在我們的家中,我們就看到連接設(shè)備的數(shù)量急劇增加,從路由器和幾臺(tái)個(gè)人電腦到遠(yuǎn)程鎖門、激活百葉窗、控制照明、管理溫度和濕度以及更多的。為了使眾多設(shè)備保持相關(guān)性和安全性,無(wú)線 (OTA) 固件升級(jí)必須成為物聯(lián)網(wǎng)系統(tǒng)不可或缺的一部分。
想象一個(gè)巨大的市場(chǎng),其中部署信標(biāo)提供有關(guān)展示產(chǎn)品的信息。這些信標(biāo)的位置可能不容易訪問(wèn),并且這些信標(biāo)的數(shù)量使得它們不可能在部署后單獨(dú)編程。因此,當(dāng)出現(xiàn)需要重新部署的新功能或缺陷時(shí),OTA 固件升級(jí)成為一項(xiàng)重要的省時(shí)功能。
通過(guò) BLE 進(jìn)行 OTA 固件升級(jí)
OTA 的有效性已在手機(jī)等應(yīng)用中得到證明,這些應(yīng)用通過(guò)定期升級(jí)接收新功能并修復(fù)錯(cuò)誤,而相對(duì)較新的 OTA 固件升級(jí)功能與藍(lán)牙低功耗 (BLE) 為物聯(lián)網(wǎng)帶來(lái)了同樣的能力。
在 IoT 環(huán)境中,推動(dòng) OTA 固件升級(jí)超過(guò) BLE 要求的主要原因有三個(gè):
廣泛和異構(gòu)的設(shè)備部署
設(shè)備的數(shù)量和不同類型的設(shè)備在分布式網(wǎng)絡(luò)中起著非常重要的作用。標(biāo)準(zhǔn)化的 OTA 接口可確保跨不同節(jié)點(diǎn)重用架構(gòu)。考慮體育場(chǎng)中的智能照明:雖然巨大的泛光燈和走廊燈的功能可能不同,但可以在它們之間重復(fù)使用基于 BLE 的標(biāo)準(zhǔn) OTA 接口。這意味著跨這些異構(gòu)設(shè)備推送新固件的主機(jī)設(shè)備可以是一個(gè)通用平臺(tái)。這也意味著體育場(chǎng)內(nèi)所有不同類型的燈都可以從一個(gè)控制室進(jìn)行升級(jí),而不是通過(guò)多個(gè)單獨(dú)的升級(jí)。
不斷變化的需求和新功能
物聯(lián)網(wǎng)是一個(gè)不斷增長(zhǎng)且瞬息萬(wàn)變的市場(chǎng),具有新的產(chǎn)品需求,并且會(huì)定期添加新的 BLE 功能。安全威脅和隱私泄露是推動(dòng)這些變化的一些最大因素。為了防止新的病毒攻擊,設(shè)備固件可以通過(guò) OTA 固件升級(jí)過(guò)程包含修復(fù)和更安全的算法。在任何物聯(lián)網(wǎng)系統(tǒng)中,都有兩部分:硬件和固件。在基于 SoC 的實(shí)現(xiàn)中,OTA 固件升級(jí)功能不僅可以更新固件,還可以重新配置片上硬件資源。
關(guān)鍵的上市時(shí)間需求
物聯(lián)網(wǎng)系統(tǒng)的設(shè)計(jì)周期非常短,需要不斷創(chuàng)新和部署最新功能。一般的開(kāi)發(fā)過(guò)程是對(duì)硬件進(jìn)行過(guò)度設(shè)計(jì),以在更長(zhǎng)的時(shí)間內(nèi)維持不斷擴(kuò)大的市場(chǎng)需求。OTA固件升級(jí)支持分階段部署解決方案。例如,恒溫器系統(tǒng)的初始設(shè)計(jì)只需一個(gè)熱傳感器就可以快速推出,然后進(jìn)行更新以啟用濕度傳感器。請(qǐng)注意,使用這種方法,硬件設(shè)計(jì)是一個(gè)深思熟慮的過(guò)程,從硬件角度在架構(gòu)階段考慮未來(lái)的推出。
然而,雖然 OTA 固件升級(jí)有利于物聯(lián)網(wǎng)應(yīng)用,但產(chǎn)品團(tuán)隊(duì)必須注意并避免一些陷阱?,F(xiàn)場(chǎng)升級(jí)固件的能力以及對(duì)上市時(shí)間的極端要求可能會(huì)導(dǎo)致過(guò)快發(fā)布固件的壓力。例如,爭(zhēng)取實(shí)現(xiàn)產(chǎn)品的大規(guī)模部署可能會(huì)促使市場(chǎng)營(yíng)銷依賴于固件可以稍后更新的事實(shí)。這反過(guò)來(lái)可能導(dǎo)致發(fā)布尚未完全驗(yàn)證或優(yōu)化的不穩(wěn)定軟件或產(chǎn)品。此外,最終用戶可能不會(huì)很好地接受頻繁的更新。產(chǎn)品團(tuán)隊(duì)?wèi)?yīng)仔細(xì)權(quán)衡此類決定的影響,并限制過(guò)度使用 OTA。
OTA基礎(chǔ)
在基礎(chǔ)方面,OTA 固件升級(jí)與任何其他引導(dǎo)加載程序沒(méi)有什么不同,例如 UART 引導(dǎo)加載程序或 USB 引導(dǎo)加載程序。圖 1 顯示了基于固件的可升級(jí)系統(tǒng)的基本架構(gòu)。
【圖1 | UART bootloader系統(tǒng)架構(gòu)]
如圖所示,目標(biāo)器件的非易失性存儲(chǔ)器分為兩部分——引導(dǎo)加載程序和可引導(dǎo)加載。引導(dǎo)加載程序是存儲(chǔ)負(fù)責(zé)設(shè)備引導(dǎo)操作的代碼的內(nèi)存部分;檢查主機(jī)是否有可引導(dǎo)加載部分的更新固件映像;通過(guò) UART 接口從主機(jī)接收更新的固件映像;并將更新后的映像寫(xiě)入內(nèi)存的可引導(dǎo)加載部分。內(nèi)存的可引導(dǎo)加載部分是定義系統(tǒng)功能的實(shí)際應(yīng)用程序代碼。
同樣,要了解 OTA 固件升級(jí),內(nèi)存可以分為 bootloader 和 bootloadable 部分。這里的主要區(qū)別在于通信接口用于從主機(jī)接收新的固件映像。在 OTA 固件升級(jí)的情況下,無(wú)線通信接口,如 WiFi、ZigBee、藍(lán)牙等,用于通過(guò)無(wú)線接收更新的固件圖像。無(wú)論接口如何,過(guò)程和基本原理都是相同的。
如今,BLE 無(wú)處不在,因?yàn)樗峁┝烁偷墓模⑶以诖蠖鄶?shù) PC 和手機(jī)中都得到了支持。這種廣泛的可用性使其成為物聯(lián)網(wǎng)應(yīng)用程序的首選。話雖如此,BLE 是一個(gè)不斷發(fā)展的標(biāo)準(zhǔn)。幾乎每年都會(huì)發(fā)布一個(gè)新版本,以包含更多功能來(lái)滿足物聯(lián)網(wǎng)應(yīng)用不斷變化的需求。
在這個(gè)競(jìng)爭(zhēng)激烈的市場(chǎng)中,芯片供應(yīng)商競(jìng)相提供符合新版規(guī)范的解決方案。在大多數(shù)情況下,芯片供應(yīng)商在多個(gè) BLE 堆棧/IDE 版本上分階段支持這些功能。此外,不斷變化的規(guī)范為版本之間的廣泛測(cè)試留下了最少的時(shí)間,因此硅供應(yīng)商的每個(gè)新 BLE 堆棧版本通常都有由客戶報(bào)告或在測(cè)試或開(kāi)發(fā)期間在內(nèi)部捕獲的缺陷修復(fù)。因此,當(dāng) BLE 用于使物聯(lián)網(wǎng)設(shè)備保持最新時(shí),應(yīng)用程序代碼可能需要升級(jí),但核心 BLE 堆棧也可能需要更新。強(qiáng)大的引導(dǎo)加載程序架構(gòu)應(yīng)該能夠支持這些不同的用例,并且足夠靈活以適應(yīng)不斷變化的應(yīng)用需求。
OTA 引導(dǎo)加載程序架構(gòu)
物聯(lián)網(wǎng)空間是多種多樣的,應(yīng)用程序和最終解決方案的要求也是如此。為了保持靈活性,產(chǎn)品團(tuán)隊(duì)?wèi)?yīng)選擇滿足其應(yīng)用需求的 OTA 引導(dǎo)加載程序架構(gòu)。
有兩種類型的 OTA 引導(dǎo)加載程序架構(gòu)可用于基于 BLE 的設(shè)備:
固定堆棧 OTA 引導(dǎo)加載程序
在固定堆棧 OTA 引導(dǎo)加載程序?qū)嵤┲?,堆棧不?huì)升級(jí) - 只能升級(jí)特定于應(yīng)用程序的固件。通過(guò)這樣的實(shí)現(xiàn),堆棧存儲(chǔ)在內(nèi)存的寫(xiě)保護(hù)/引導(dǎo)加載程序部分。圖 2 顯示了一個(gè)典型的固定堆棧 OTA 引導(dǎo)加載程序?qū)崿F(xiàn)。
【圖2 | 基于 BLE 的固定堆棧 OTA 引導(dǎo)加載程序]
固定堆棧 OTA 引導(dǎo)加載程序的優(yōu)點(diǎn)是升級(jí)固件所需的時(shí)間更少,因?yàn)橹荒苌?jí)特定于應(yīng)用程序的代碼。另一方面,缺點(diǎn)是即使部署后發(fā)現(xiàn)嚴(yán)重錯(cuò)誤,也無(wú)法升級(jí)堆棧代碼。
可升級(jí)堆棧 OTA 引導(dǎo)加載程序
在可升級(jí)堆棧引導(dǎo)加載程序?qū)嵤┲?,堆棧和?yīng)用程序固件都可以升級(jí)。盡管引導(dǎo)加載程序的實(shí)際實(shí)現(xiàn)可能因供應(yīng)商而異,但在典型的可升級(jí)堆棧實(shí)現(xiàn)中,內(nèi)存分為三個(gè)部分:
啟動(dòng)器: 啟動(dòng)器基本上是一個(gè)沒(méi)有通信接口的引導(dǎo)加載程序。它檢查是否需要引導(dǎo)加載并將控制權(quán)相應(yīng)地傳遞給堆棧或應(yīng)用程序部分。如果有新圖像可用,它還負(fù)責(zé)升級(jí)存儲(chǔ)堆棧的內(nèi)存部分。
堆棧: 此部分存儲(chǔ) BLE 堆棧。當(dāng)主機(jī)設(shè)備有新的固件映像時(shí),堆棧部分負(fù)責(zé)與主機(jī)設(shè)備通信。此外,此部分與 BLE 連接應(yīng)用程序共享。實(shí)際上,這部分就像一個(gè)引導(dǎo)加載程序和一個(gè)可引導(dǎo)加載程序。該部分由啟動(dòng)器通過(guò)向該部分寫(xiě)入新的堆棧固件來(lái)引導(dǎo)加載。然后,此部分引導(dǎo)加載應(yīng)用程序部分。
應(yīng)用程序: 這部分是實(shí)際的應(yīng)用程序代碼,就像上面提到的任何其他實(shí)現(xiàn)一樣。
一個(gè)可升級(jí)棧OTA bootloader的操作可以通過(guò)三步來(lái)理解:
步驟1: 圖 3 顯示了目標(biāo)設(shè)備(即需要無(wú)線升級(jí)的設(shè)備)和主機(jī)設(shè)備(即具有新固件并負(fù)責(zé)將其發(fā)送到目標(biāo)設(shè)備的設(shè)備)。目標(biāo)使用其現(xiàn)有的 BLE 協(xié)議棧接收新的 BLE 協(xié)議棧。這個(gè)新的 BLE 協(xié)議棧存儲(chǔ)在內(nèi)存的特定應(yīng)用固件部分。由于物聯(lián)網(wǎng)設(shè)備通常具有有限的內(nèi)存,因此特定應(yīng)用的固件部分被新的 BLE 協(xié)議棧覆蓋。額外的內(nèi)存會(huì)增加設(shè)備成本,并且不能僅用于引導(dǎo)加載目的。請(qǐng)注意,不能直接覆蓋現(xiàn)有的 BLE 協(xié)議堆棧,因?yàn)檫@會(huì)破壞當(dāng)前與主機(jī)通信的現(xiàn)有堆棧代碼,從而在升級(jí)完成之前中斷通信。
【圖3 | 第 1 步:現(xiàn)有堆棧從主機(jī)接收新堆棧并寫(xiě)入特定于應(yīng)用程序的內(nèi)存]
第 2 步: 啟動(dòng)器從特定應(yīng)用固件部分復(fù)制新的 BLE 協(xié)議棧,并將其寫(xiě)入 BLE 協(xié)議部分(參見(jiàn)圖 4)。到這一步結(jié)束時(shí),BLE 協(xié)議部分就有了新的 BLE 協(xié)議棧。
【圖4 | 第 2 步:Launcher 用新堆棧覆蓋現(xiàn)有堆棧]
第 3 步: 目標(biāo)設(shè)備使用新的 BLE 協(xié)議棧從主機(jī)設(shè)備接收新的特定應(yīng)用固件,并將其寫(xiě)入特定應(yīng)用固件存儲(chǔ)器(參見(jiàn)圖 5)。
【圖5 | 第 3 步:新堆棧正在接收新的特定于應(yīng)用程序的固件并寫(xiě)入特定于應(yīng)用程序的部分]
完成此步驟后,目標(biāo)設(shè)備固件配置如圖 6 所示,堆棧和特定于應(yīng)用程序的固件升級(jí)均已完成。
【圖6 | 升級(jí)完成后,內(nèi)存具有新的 BLE 堆棧和特定于應(yīng)用程序的固件]
可升級(jí)堆棧引導(dǎo)加載程序的一個(gè)關(guān)鍵優(yōu)勢(shì)是它允許在部署產(chǎn)品后升級(jí)堆棧和應(yīng)用程序。
基于內(nèi)存的 OTA 引導(dǎo)加載程序分類
OTA 引導(dǎo)加載程序也可以根據(jù)用于存儲(chǔ)更新固件映像的內(nèi)存進(jìn)行分類:
內(nèi)部存儲(chǔ)器 OTA 引導(dǎo)加載程序
使用這種類型的引導(dǎo)加載程序,更新的固件映像(新的 BLE 堆棧和特定于應(yīng)用程序的固件或只是新的特定于應(yīng)用程序的固件)被直接寫(xiě)入設(shè)備的內(nèi)部閃存。到目前為止,本文討論的引導(dǎo)加載程序架構(gòu)結(jié)構(gòu)都基于使用內(nèi)部存儲(chǔ)器。這種引導(dǎo)加載程序的優(yōu)點(diǎn)是不需要外部存儲(chǔ)器,因此降低了實(shí)現(xiàn)升級(jí)功能的有效成本。
外部存儲(chǔ)器 OTA 引導(dǎo)加載程序
使用外部存儲(chǔ)器 OTA 引導(dǎo)加載程序,現(xiàn)有堆??梢越邮招碌奶囟ㄓ趹?yīng)用程序的固件或新的堆棧固件和特定于應(yīng)用程序的固件。這些存儲(chǔ)在外部存儲(chǔ)器中。稍后,設(shè)備根據(jù)存儲(chǔ)器類型(可以是 I2C 或 SPI 或任何其他串行存儲(chǔ)器)使用有線接口從外部存儲(chǔ)器讀取新固件,然后升級(jí)內(nèi)部閃存。這種實(shí)現(xiàn)增加了外部存儲(chǔ)器的總系統(tǒng)成本。當(dāng)設(shè)備的內(nèi)部?jī)?nèi)存有限并需要升級(jí)其堆棧時(shí)使用它。請(qǐng)注意,對(duì)于某些應(yīng)用程序用例,堆棧大小可能大于特定于應(yīng)用程序的固件的大小。
結(jié)論
在為物聯(lián)網(wǎng)應(yīng)用選擇組件時(shí),研究芯片和開(kāi)發(fā)工具支持的 OTA 固件升級(jí)方法非常重要。在評(píng)估具有內(nèi)部閃存的設(shè)備時(shí),基于內(nèi)部存儲(chǔ)器的 OTA 升級(jí)提供了一種經(jīng)濟(jì)的方法。某些設(shè)備可能不允許堆棧升級(jí),只允許特定應(yīng)用程序的固件升級(jí)。一些可升級(jí)堆棧 OTA 引導(dǎo)加載程序?qū)嵤┛赡苤辉试S獨(dú)立升級(jí)堆棧和特定于應(yīng)用程序的固件,以減少升級(jí)時(shí)間。在為您的應(yīng)用選擇設(shè)備時(shí),提前了解這些限制非常重要。
在無(wú)線升級(jí)設(shè)備固件時(shí),數(shù)據(jù)是通過(guò)無(wú)線傳輸?shù)?,很容易?a target="_blank">黑客入侵。因此,驗(yàn)證并確保主機(jī)設(shè)備僅與預(yù)期的目標(biāo)設(shè)備通話非常重要。通過(guò)空中發(fā)送的數(shù)據(jù)也應(yīng)該加密,以便其他監(jiān)聽(tīng) BLE 通信的設(shè)備無(wú)法解碼數(shù)據(jù)。BLE 4.2 改進(jìn)了安全機(jī)制,增強(qiáng)了對(duì)中間人攻擊和被動(dòng)竊聽(tīng)的保護(hù),以減少黑客對(duì) IP 盜竊和接管設(shè)備的處理。如果使用的是舊版本的 BLE,明智的做法是手動(dòng)添加加密層以保護(hù)您的 IP 免受被動(dòng)竊聽(tīng)者的侵害。
物聯(lián)網(wǎng)市場(chǎng)產(chǎn)品需求的變化速度快于傳統(tǒng)產(chǎn)品的需求。此外,廣泛采用的 BLE 通信接口標(biāo)準(zhǔn)仍在不斷發(fā)展,芯片供應(yīng)商需要大量時(shí)間來(lái)支持新功能。還有更快進(jìn)入市場(chǎng)的壓力,這可能會(huì)影響產(chǎn)品的測(cè)試時(shí)間和現(xiàn)場(chǎng)試驗(yàn)。由于這些原因,無(wú)線固件升級(jí)可以讓開(kāi)發(fā)人員隨著時(shí)間的推移增強(qiáng)產(chǎn)品功能并在產(chǎn)品部署后推出缺陷修復(fù),從而為物聯(lián)網(wǎng)產(chǎn)品增加顯著價(jià)值。
審核編輯:郭婷
評(píng)論