嵌入式微控制器應(yīng)用中的無線更新:設(shè)計(jì)權(quán)衡與經(jīng)驗(yàn)教訓(xùn)
發(fā)布時(shí)間:2021-03-08 來源:Benjamin Bucklin Brown 責(zé)任編輯:wenwei
【導(dǎo)讀】許多嵌入式系統(tǒng)部署在操作人員難以或無法接近的地方。物聯(lián)網(wǎng)(IoT)應(yīng)用尤其如此,這些應(yīng)用通常大量部署并且電池壽命有限。實(shí)例包括監(jiān)控人員或機(jī)器健康狀況的嵌入式系統(tǒng)。這些挑戰(zhàn)加上快速迭代的軟件生命周期,導(dǎo)致許多系統(tǒng)需要支持無線(OTA)更新。OTA更新用新軟件替換嵌入式系統(tǒng)的微控制器或微處理器上的軟件。雖然很多人非常熟悉移動(dòng)設(shè)備上的OTA更新,但在資源受限的系統(tǒng)上設(shè)計(jì)和實(shí)施會(huì)帶來許多不同的挑戰(zhàn)。本文將介紹針對(duì)OTA更新的若干不同軟件設(shè)計(jì),并討論其優(yōu)缺點(diǎn)。我們將了解OTA更新軟件如何利用兩款超低功耗微控制器的硬件特性。
構(gòu)建模塊
服務(wù)器和客戶端
OTA更新用新軟件替換器件上的當(dāng)前軟件,新軟件以無線方式下載。在嵌入式系統(tǒng)中,運(yùn)行此軟件的器件通常是微控制器。微控制器是一種小型計(jì)算器件,其存儲(chǔ)器、速度和功耗均很有限。微控制器通常包含微處理器(核心)和用于執(zhí)行特定操作的數(shù)字硬件模塊(外設(shè))。工作模式下典型功耗為30μA/MHz至40μA/MHz的超低功耗微控制器是此類應(yīng)用的理想選擇。使用這些微控制器上的特定硬件外設(shè)并將其置于低功耗模式,是OTA更新軟件設(shè)計(jì)的重要組成部分。圖1顯示了一個(gè)可能需要OTA更新的嵌入式系統(tǒng)實(shí)例。可以看到,一個(gè)微控制器與無線電和傳感器相連,這可用在物聯(lián)網(wǎng)應(yīng)用中,利用傳感器收集有關(guān)環(huán)境的數(shù)據(jù),并利用無線電定期報(bào)告數(shù)據(jù)。系統(tǒng)的這一部分稱為邊緣節(jié)點(diǎn)或客戶端,是OTA更新的目標(biāo)。系統(tǒng)的另一部分稱為云或服務(wù)器,是新軟件的提供者。服務(wù)器和客戶端利用收發(fā)器(無線電)通過無線連接進(jìn)行通信。
圖1.示例嵌入式系統(tǒng)中的服務(wù)器/客戶端架構(gòu)
何為軟件應(yīng)用程序?
OTA更新過程的大部分操作是將新軟件從服務(wù)器傳輸?shù)娇蛻舳?。軟件從源格式轉(zhuǎn)換為二進(jìn)制格式之后,作為一個(gè)字節(jié)序列進(jìn)行傳輸。轉(zhuǎn)換過程會(huì)編譯源代碼文件(例如c、cpp),將其鏈接成一個(gè)可執(zhí)行文件(例如exe、elf),然后將可執(zhí)行文件轉(zhuǎn)換為可移植的二進(jìn)制文件格式(例如bin、hex)。概言之,這些文件格式包含一個(gè)字節(jié)序列,此字節(jié)序列屬于微控制器中存儲(chǔ)器的特定地址。通常,我們將通過無線鏈路發(fā)送的信息概念化為數(shù)據(jù),例如更改系統(tǒng)狀態(tài)的命令或系統(tǒng)收集的傳感器數(shù)據(jù)。就OTA更新而言,數(shù)據(jù)就是二進(jìn)制格式的新軟件。在很多情況下,二進(jìn)制文件非常大,無法通過單次傳輸從服務(wù)器發(fā)送到客戶端,這意味著需要將二進(jìn)制文件放入多個(gè)不同的數(shù)據(jù)包中,此過程稱為“分包”。為了更好地說明此過程,圖2演示了軟件的不同版本如何生成不同的二進(jìn)制文件,從而在OTA更新期間發(fā)送不同的數(shù)據(jù)包。在這個(gè)簡(jiǎn)單例子中,每個(gè)數(shù)據(jù)包包含8字節(jié)數(shù)據(jù),前4個(gè)字節(jié)表示客戶端存儲(chǔ)器中用來存儲(chǔ)后4個(gè)字節(jié)的地址。
主要挑戰(zhàn)
基于對(duì)OTA更新過程的這種高層次描述,OTA更新解決方案必須應(yīng)對(duì)三大挑戰(zhàn)。第一個(gè)挑戰(zhàn)與存儲(chǔ)器有關(guān)。軟件解決方案必須將新軟件應(yīng)用程序組織到客戶端器件的易失性或非易失性存儲(chǔ)器中,以便在更新過程完成時(shí)可以執(zhí)行它。解決方案必須確保將前一版本的軟件保留為后備應(yīng)用程序,以防新軟件出現(xiàn)問題。此外,當(dāng)復(fù)位和斷電重啟時(shí),我們必須讓客戶端器件的狀態(tài)——例如當(dāng)前運(yùn)行的軟件版本以及它在存儲(chǔ)器中的位置——保持不變。第二大挑戰(zhàn)是通信。新軟件必須以離散數(shù)據(jù)包的形式從服務(wù)器發(fā)送到客戶端,每個(gè)數(shù)據(jù)包都要放在客戶端存儲(chǔ)器中的特定地址。分包方案、數(shù)據(jù)包結(jié)構(gòu)和數(shù)據(jù)傳輸協(xié)議必須在軟件設(shè)計(jì)中考慮周全。最后一個(gè)主要挑戰(zhàn)是安全性。當(dāng)新軟件以無線方式從服務(wù)器發(fā)送到客戶端時(shí),我們必須確保服務(wù)器是可信任方。這種安全挑戰(zhàn)稱為身份驗(yàn)證。我們還必須對(duì)新軟件進(jìn)行模糊處理以防觀察者偷窺,因?yàn)槠渲锌赡馨舾行畔ⅰ_@種安全挑戰(zhàn)稱為保密。安全性的最后一個(gè)要素是完整性,即確保新軟件在通過無線方式發(fā)送時(shí)不會(huì)損壞。
圖2.軟件應(yīng)用程序的二進(jìn)制轉(zhuǎn)換和分包過程
第二階段引導(dǎo)加載程序(SSBL)
了解引導(dǎo)序列
主引導(dǎo)加載程序是一種軟件應(yīng)用程序,永久駐留在微控制器的只讀存儲(chǔ)器中。主引導(dǎo)加載程序所在的存儲(chǔ)區(qū)域稱為信息空間,有時(shí)用戶無法訪問。每次復(fù)位都會(huì)執(zhí)行該應(yīng)用程序,一般完成一些必要的硬件初始化,并且可能將用戶軟件加載到存儲(chǔ)器中。但是,如果微控制器包含片內(nèi)非易失性存儲(chǔ)器(如閃存),則引導(dǎo)加載程序不需要進(jìn)行任何加載,只需將控制權(quán)轉(zhuǎn)移到閃存中的程序即可。如果主引導(dǎo)加載程序不支持OTA更新,則必須有第二階段引導(dǎo)加載程序。與主引導(dǎo)加載程序一樣,SSBL會(huì)在每次復(fù)位時(shí)運(yùn)行,但將實(shí)施OTA更新過程的一部分。此引導(dǎo)序列如圖3所示。本節(jié)將說明為什么需要第二階段引導(dǎo)加載程序,并解釋如何指定此應(yīng)用程序的作用是一個(gè)重要設(shè)計(jì)權(quán)衡。
經(jīng)驗(yàn)教訓(xùn):務(wù)必有一個(gè)SSBL
從概念上講,省略SSBL并將所有OTA更新功能放入用戶應(yīng)用程序似乎更簡(jiǎn)單,因?yàn)檫@樣的話,OTA過程可以無縫利用現(xiàn)有的軟件框架、操作系統(tǒng)和設(shè)備驅(qū)動(dòng)程序。圖4顯示了一個(gè)選擇此方法的系統(tǒng)的存儲(chǔ)器映射和引導(dǎo)序列。
應(yīng)用程序A是部署在現(xiàn)場(chǎng)微控制器上的原始應(yīng)用程序。此應(yīng)用程序包含OTA更新相關(guān)軟件,當(dāng)服務(wù)器請(qǐng)求時(shí),利用該軟件可下載應(yīng)用程序B。下載完成且應(yīng)用程序B經(jīng)過驗(yàn)證之后,應(yīng)用程序A將對(duì)應(yīng)用程序B的復(fù)位處理程序執(zhí)行分支指令,以將控制權(quán)轉(zhuǎn)移給應(yīng)用程序B。復(fù)位處理程序是一小段代碼,用作軟件應(yīng)用程序的入口點(diǎn),并在復(fù)位時(shí)運(yùn)行。在這種情況下,復(fù)位是通過執(zhí)行一個(gè)分支來模擬,這相當(dāng)于函數(shù)調(diào)用。這種方法有兩大問題:
● 許多嵌入式軟件應(yīng)用程序采用實(shí)時(shí)操作系統(tǒng)(RTOS),其允許將軟件拆分為多個(gè)并發(fā)任務(wù),每個(gè)任務(wù)在系統(tǒng)中具有不同的職責(zé)。例如,圖1所示的應(yīng)用程序可能有用于讀取傳感器的RTOS任務(wù),對(duì)傳感器數(shù)據(jù)運(yùn)行某種算法的RTOS任務(wù),以及與無線電接口的RTOS任務(wù)。RTOS本身始終處于活動(dòng)狀態(tài),負(fù)責(zé)根據(jù)異步事件或特定的基于時(shí)間的延遲切換這些任務(wù)。因此,從RTOS任務(wù)分支到新程序是不安全的,因?yàn)槠渌蝿?wù)會(huì)在后臺(tái)繼續(xù)運(yùn)行。對(duì)于實(shí)時(shí)操作系統(tǒng),終止某個(gè)程序的唯一安全方法是通過復(fù)位。
圖3.使用SSBL的存儲(chǔ)器映射和引導(dǎo)流程示例
圖4.沒有SSBL的存儲(chǔ)器映射和引導(dǎo)流程示例
● 基于圖4,上述問題的解決辦法是讓主引導(dǎo)加載程序分支到應(yīng)用程序B而不是應(yīng)用程序A。但在某些微控制器上,主引導(dǎo)加載程序總是運(yùn)行具有中斷向量表(IVT)的程序;IVT是應(yīng)用程序的一個(gè)關(guān)鍵部分,描述中斷處理函數(shù),位于地址0。這意味著必須以某種形式重定位IVT,使其復(fù)位映射到應(yīng)用程序B。如果在IVT重定位期間發(fā)生斷電重啟,則系統(tǒng)可能會(huì)處于永久破損狀態(tài)。
將SSBL固定在地址0可以解決這些問題,如圖3所示。SSBL不是RTOS程序,因此可以安全地分支到新應(yīng)用程序。地址0處的SSBL的IVT永遠(yuǎn)不會(huì)重新定位,所以不必?fù)?dān)心斷電重啟會(huì)將系統(tǒng)置于災(zāi)難性狀態(tài)。
設(shè)計(jì)權(quán)衡:SSBL的作用
我們花了很多時(shí)間討論SSBL及其與應(yīng)用軟件的關(guān)系,但SSBL程序有何作用?至少,該程序必須確定當(dāng)前應(yīng)用程序是什么(其開始位置),然后分支到該地址。微控制器存儲(chǔ)器中各種應(yīng)用的位置一般保存在目錄(ToC)中,如圖3所示。這是持久內(nèi)存中的一個(gè)共享區(qū)域,SSBL和應(yīng)用軟件均利用它來相互通信。當(dāng)OTA更新過程完成時(shí),新的應(yīng)用程序信息會(huì)更新ToC。OTA更新功能的某些部分也可以被推送到SSBL。開發(fā)OTA更新軟件時(shí),確定推送哪些部分是重要的設(shè)計(jì)決策。上述最小SSBL將非常簡(jiǎn)單,易于驗(yàn)證,并且在應(yīng)用程序的生命周期中很可能不需要修改。但是,這意味著每個(gè)應(yīng)用程序都要負(fù)責(zé)下載和驗(yàn)證下一個(gè)應(yīng)用程序。這可能導(dǎo)致無線電堆棧、設(shè)備固件和OTA更新軟件的代碼重復(fù)。另一方面,我們可以選擇將整個(gè)OTA更新過程推送到SSBL。在這種情況下,應(yīng)用程序只需在ToC中設(shè)置一個(gè)標(biāo)志以請(qǐng)求更新,然后執(zhí)行復(fù)位。SSBL隨后執(zhí)行下載序列和驗(yàn)證過程。這將最大限度地減少代碼重復(fù)并簡(jiǎn)化應(yīng)用專用軟件。然而,這會(huì)引入一個(gè)新的挑戰(zhàn),那就是可能需要更新SSBL本身(即更新更新代碼)。最終,決定SSBL中放置哪些功能將取決于客戶端器件的存儲(chǔ)器限制、下載的應(yīng)用程序之間的相似性以及OTA更新軟件的可移植性。
設(shè)計(jì)權(quán)衡:緩存和壓縮
OTA更新軟件中的另一個(gè)關(guān)鍵設(shè)計(jì)決策是在OTA更新過程中如何組織存儲(chǔ)器中傳入的應(yīng)用程序。微控制器上通常有兩類存儲(chǔ)器:非易失性存儲(chǔ)器(例如閃存)和易失性存儲(chǔ)器(例如SRAM)。閃存用于存儲(chǔ)應(yīng)用程序的程序代碼和只讀數(shù)據(jù),以及其他系統(tǒng)級(jí)數(shù)據(jù),例如ToC和事件日志。SRAM用于存儲(chǔ)軟件應(yīng)用程序的可修改部分,例如非常數(shù)全局變量和堆棧。圖2所示的軟件應(yīng)用程序二進(jìn)制文件僅包含非易失性存儲(chǔ)器中存在的程序的某些部分。在啟動(dòng)例程期間,應(yīng)用程序?qū)⒊跏蓟瘜儆谝资源鎯?chǔ)器的部分。
在OTA更新過程中,每次客戶端器件從服務(wù)器收到一個(gè)包含該二進(jìn)制文件一部分的數(shù)據(jù)包時(shí),便會(huì)將其存儲(chǔ)到SRAM中。該數(shù)據(jù)包可以是壓縮的,也可以是未壓縮的。壓縮應(yīng)用程序二進(jìn)制文件的好處是文件會(huì)變小,從而要發(fā)送的數(shù)據(jù)包會(huì)減少,下載過程中存儲(chǔ)數(shù)據(jù)包所需的SRAM空間相應(yīng)地減小。這種方法的缺點(diǎn)是壓縮和解壓縮會(huì)增加更新過程的處理時(shí)間,并且必須在OTA更新軟件中捆綁壓縮相關(guān)代碼。
新應(yīng)用軟件屬于閃存,但在更新過程中到達(dá)SRAM,因此OTA更新軟件需要在更新過程中的某個(gè)時(shí)刻執(zhí)行對(duì)閃存的寫操作。暫時(shí)將新應(yīng)用程序存儲(chǔ)在SRAM中的操作稱為緩存。概言之,OTA更新軟件可以采取三種不同的緩存方法。
● 不緩存:每次包含新應(yīng)用程序一部分的數(shù)據(jù)包到達(dá)時(shí),便將其寫入閃存中的目標(biāo)位置。這種方案非常簡(jiǎn)單,可以最大限度地減少OTA更新軟件中的邏輯數(shù)量,但要求完全擦除新應(yīng)用程序?qū)?yīng)的閃存區(qū)域。此方法會(huì)消磨閃存并增加開銷。
● 部分緩存:保留一個(gè)SRAM區(qū)域用于緩存,當(dāng)新數(shù)據(jù)包到達(dá)時(shí),將其存儲(chǔ)在該區(qū)域中。當(dāng)該區(qū)域填滿時(shí),將數(shù)據(jù)寫入閃存以清空該區(qū)域。如果數(shù)據(jù)包無序到達(dá)或新應(yīng)用程序二進(jìn)制文件中存在間隙,這種方案可能會(huì)變得很復(fù)雜,因?yàn)樾枰环N方法來將SRAM地址映射到閃存地址。一種策略是讓緩存充當(dāng)閃存一部分的鏡像。閃存被劃分為若干稱為頁面的小區(qū)域,這是可供擦除的最小區(qū)域。得益于這種自然劃分,一個(gè)好辦法是在SRAM中緩存閃存的一頁,當(dāng)其填滿或下一數(shù)據(jù)包屬于其他頁面時(shí),便將該頁寫入閃存以清空緩存。
● 完全緩存:在OTA更新過程中將整個(gè)新應(yīng)用程序存儲(chǔ)在SRAM中,只有從服務(wù)器完全下載好新應(yīng)用程序之后才將其寫入閃存。這種方法克服了前述方法的缺點(diǎn),寫入閃存的次數(shù)最少,OTA更新軟件無需復(fù)雜的緩存邏輯。但是,這會(huì)限制所下載新應(yīng)用程序的大小,因?yàn)橄到y(tǒng)的可用SRAM量通常遠(yuǎn)小于可用閃存量。
圖5.使用SRAM緩存閃存的一頁
圖5顯示了OTA更新過程中的第二種方案——部分緩存,來自圖3和圖4的應(yīng)用程序A所對(duì)應(yīng)的閃存部分被放大,并且顯示了用于SSBL的SRAM的功能存儲(chǔ)器映射。示例閃存頁面大小為2 kB。最終,此設(shè)計(jì)決策將取決于新應(yīng)用程序的大小和OTA更新軟件容許的復(fù)雜度。
安全和通信
設(shè)計(jì)權(quán)衡:軟件與協(xié)議
OTA更新解決方案還必須解決安全和通信問題。如圖1所示,許多系統(tǒng)會(huì)在硬件和軟件中實(shí)現(xiàn)通信協(xié)議,以支持系統(tǒng)的普通(非OTA更新相關(guān))操作,例如交換傳感器數(shù)據(jù)。這意味著服務(wù)器和客戶端之間已經(jīng)建立了(可能是安全的)無線通信的方法。類似圖1所示的嵌入式系統(tǒng)可以使用的通信協(xié)議有低功耗藍(lán)牙® (BLE)或6LoWPAN等。有時(shí)候,這些協(xié)議支持安全性和數(shù)據(jù)交換,OTA更新軟件在OTA更新過程中可以利用。
OTA更新軟件中必須構(gòu)建的通信功能量最終將取決于現(xiàn)有通信協(xié)議提供的抽象程度?,F(xiàn)有通信協(xié)議具有用于在服務(wù)器和客戶端之間發(fā)送和接收文件的工具,OTA更新軟件可以簡(jiǎn)單地將該工具用于下載過程。但是,如果通信協(xié)議較為原始,只有發(fā)送原始數(shù)據(jù)的工具,那么OTA更新軟件可能需要執(zhí)行分包處理,并提供元數(shù)據(jù)和新應(yīng)用程序二進(jìn)制文件。這也適用于安全挑戰(zhàn)。如果通信協(xié)議不支持,OTA更新軟件可能要負(fù)責(zé)對(duì)無線保密發(fā)送的字節(jié)進(jìn)行解密。
總之,在OTA更新軟件中實(shí)施哪些功能,例如自定義數(shù)據(jù)包結(jié)構(gòu)、服務(wù)器/客戶端同步、加密和密鑰交換等,將取決于系統(tǒng)的通信協(xié)議提供了什么內(nèi)容以及對(duì)安全性和穩(wěn)健性的要求。下一節(jié)將提出一個(gè)完整的安全解決方案,其解決了之前介紹的所有挑戰(zhàn),我們將展示如何在此解決方案中利用微控制器的加密硬件外設(shè)。
解決安全挑戰(zhàn)
我們的安全解決方案需要讓新應(yīng)用程序以無線方式保密發(fā)送,檢測(cè)新應(yīng)用程序中的任何損壞,并驗(yàn)證新應(yīng)用程序是從受信任的服務(wù)器而不是惡意方發(fā)送的。這些挑戰(zhàn)可通過加密操作來解決。具體而言,該安全解決方案可以使用兩種加密操作:加密和哈希處理。加密使用客戶端和服務(wù)器共享的密鑰(密碼)來對(duì)無線發(fā)送的數(shù)據(jù)進(jìn)行模糊處理。微控制器的加密硬件加速器可能支持的特定加密類型是AES-128或AES-256,具體取決于密鑰大小。除了加密數(shù)據(jù),服務(wù)器還可以發(fā)送一個(gè)摘要以確保沒有損壞。摘要通過對(duì)數(shù)據(jù)包進(jìn)行哈希處理來生成,這是一種用于生成唯一代碼的不可逆數(shù)學(xué)函數(shù)。在服務(wù)器產(chǎn)生消息或摘要之后,如果其任何部分遭到修改,比如在無線通信期間有一位發(fā)生翻轉(zhuǎn),則客戶端在對(duì)數(shù)據(jù)包執(zhí)行相同的哈希函數(shù)處理并比較摘要時(shí),會(huì)注意到此修改。微控制器的加密硬件加速器可能支持的特定哈希處理類型是SHA-256。圖6顯示了微控制器中的加密硬件外設(shè)的框圖,OTA更新軟件駐留在Cortex-M4應(yīng)用層中。此圖還顯示了其支持將受保護(hù)密鑰存儲(chǔ)在外設(shè)中,OTA更新軟件解決方案可以利用這一點(diǎn)來安全存儲(chǔ)客戶端密鑰。
圖6.ADuCM4050上的加密加速器的硬件框圖
解決身份驗(yàn)證這一最終挑戰(zhàn)的常見技術(shù)是使用非對(duì)稱加密。對(duì)于此操作,服務(wù)器會(huì)生成一個(gè)公鑰-私鑰對(duì)。私鑰只有服務(wù)器知道,客戶端知道公鑰。服務(wù)器使用私鑰可以生成給定數(shù)據(jù)塊的簽名,例如要無線發(fā)送的數(shù)據(jù)包的摘要。簽名被發(fā)送給客戶端,后者可以使用公鑰驗(yàn)證簽名。這樣,客戶端就能確認(rèn)消息是從服務(wù)器而不是惡意第三方發(fā)送的。此序列如圖7所示,實(shí)線箭頭表示函數(shù)輸入/輸出,虛線箭頭表示無線發(fā)送的信息。
圖7.使用非對(duì)稱加密驗(yàn)證消息
多數(shù)微控制器沒有用于執(zhí)行這些非對(duì)稱加密操作的硬件加速器,但可以使用Micro-ECC等專門針對(duì)資源受限器件的軟件庫來實(shí)現(xiàn)。該庫需要一個(gè)用戶定義的隨機(jī)數(shù)生成功能,這可以利用微控制器上的真隨機(jī)數(shù)發(fā)生器硬件外設(shè)來實(shí)現(xiàn)。雖然這些非對(duì)稱加密操作解決了OTA更新期間的信任挑戰(zhàn),但是會(huì)消耗大量處理時(shí)間,并且需要將簽名與數(shù)據(jù)一同發(fā)送,這會(huì)增加數(shù)據(jù)包大小。我們可以在下載結(jié)束時(shí)使用最后數(shù)據(jù)包的摘要或整個(gè)新軟件應(yīng)用程序的摘要執(zhí)行一次此檢查,但如此的話,第三方將能把不受信任的軟件下載到客戶端,這不太理想。理想情況下,我們希望驗(yàn)證所收到的每個(gè)數(shù)據(jù)包都來自我們信任的服務(wù)器,而且沒有每次都需要簽名的開銷。這可以利用哈希鏈來實(shí)現(xiàn)。
哈希鏈將本節(jié)討論的加密概念整合到一系列數(shù)據(jù)包中,以便在數(shù)學(xué)上將它們聯(lián)系在一起。如圖8所示,第一個(gè)數(shù)據(jù)包(編號(hào)0)包含下一個(gè)數(shù)據(jù)包的摘要。第一個(gè)數(shù)據(jù)包的有效載荷不是實(shí)際的軟件應(yīng)用程序數(shù)據(jù),而是簽名。第二個(gè)數(shù)據(jù)包(編號(hào)1)的有效載荷包含二進(jìn)制文件的一部分和第三個(gè)數(shù)據(jù)包(編號(hào)2)的摘要??蛻舳蓑?yàn)證第一個(gè)數(shù)據(jù)包中的簽名并緩存摘要H0以供以后使用。當(dāng)?shù)诙€(gè)數(shù)據(jù)包到達(dá)時(shí),客戶端對(duì)有效載荷進(jìn)行哈希處理并將其與H0進(jìn)行比較。如果它們匹配,客戶端便可確定該后續(xù)數(shù)據(jù)包來自可信服務(wù)器,而無需費(fèi)力進(jìn)行簽名檢查。生成此鏈的高開銷任務(wù)留給服務(wù)器完成,客戶端只需在每個(gè)數(shù)據(jù)包到達(dá)時(shí)進(jìn)行緩存和哈希處理,確保到達(dá)的數(shù)據(jù)包完整無損并驗(yàn)明正身。
圖8.將哈希鏈應(yīng)用于數(shù)據(jù)包序列
實(shí)驗(yàn)設(shè)置
解決本文所述存儲(chǔ)器、通信和安全設(shè)計(jì)挑戰(zhàn)的超低功耗微控制器是ADuCM3029和ADuCM4050.這些微控制器包含本文討論的用于OTA更新的硬件外設(shè),例如閃存、SRAM、加密加速器和真隨機(jī)數(shù)發(fā)生器。這些微控制器的器件系列包(DFP)為在這些器件上構(gòu)建OTA更新解決方案提供了軟件支持。DFP包含外設(shè)驅(qū)動(dòng),以便為使用硬件提供簡(jiǎn)單靈活的接口。
硬件配置
為了驗(yàn)證本文討論的概念,我們利用ADuCM4050創(chuàng)建了OTA更新軟件參考設(shè)計(jì)。對(duì)于客戶端,一個(gè)ADuCM4050 EZ-KIT®使用收發(fā)器子板馬蹄形連接器連接到ADF7242??蛻舳似骷鐖D9左側(cè)所示。對(duì)于服務(wù)器,我們開發(fā)了一個(gè)在Windows PC上運(yùn)行的Python應(yīng)用程序。Python應(yīng)用程序通過串行端口與另一個(gè)ADuCM4050 EZ-KIT通信,后者也以與客戶端相同的配置連接一個(gè)ADF7242。但是,圖9中右邊的EZ-KIT不執(zhí)行OTA更新邏輯,只是將從ADF7242接收到的數(shù)據(jù)包中繼給Python應(yīng)用程序。
圖9.實(shí)驗(yàn)硬件設(shè)置
軟件組件
軟件參考設(shè)計(jì)對(duì)客戶端器件的閃存進(jìn)行分區(qū),如圖3所示。主要客戶端應(yīng)用程序具有非常好的移植性和可配置性,以便其他方案或其他硬件平臺(tái)也可以使用。圖10顯示了客戶端器件的軟件架構(gòu)。請(qǐng)注意,雖然我們有時(shí)將整個(gè)應(yīng)用程序稱為SSBL,但在圖10中,并且從現(xiàn)在開始,我們?cè)谶壿嬌蠈⒄嬲腟SBL部分(藍(lán)色)與OTA更新部分(紅色)分開,因?yàn)楹笳卟灰欢ㄐ枰耆谏鲜鰬?yīng)用程序中實(shí)現(xiàn)。圖10所示的硬件抽象層使OTA客戶端軟件可移植并獨(dú)立于任何底層庫(以橙色顯示)。
圖10.客戶端軟件架構(gòu)
軟件應(yīng)用程序?qū)崿F(xiàn)圖3中的引導(dǎo)序列(一個(gè)用于從服務(wù)器下載新應(yīng)用程序的簡(jiǎn)單通信協(xié)議)和哈希鏈。通信協(xié)議中的每個(gè)數(shù)據(jù)包都有12字節(jié)的元數(shù)據(jù)頭、64字節(jié)的有效載荷和32字節(jié)的摘要。此外,它還有如下特性:
● 緩存:根據(jù)用戶配置,支持不緩存或緩存閃存的一頁。
● 目錄:ToC設(shè)計(jì)為僅容納兩個(gè)應(yīng)用程序,并且新應(yīng)用程序總是下載到最舊的位置,以保留一個(gè)備用應(yīng)用程序。這稱為A/B更新方案。
● 消息傳遞:支持ADF7242或UART進(jìn)行消息傳遞,具體取決于用戶配置。使用UART進(jìn)行消息傳遞可免除圖9左側(cè)的EZ-KIT,僅保留右側(cè)套件用于客戶端。這種有線更新方案對(duì)初始系統(tǒng)啟動(dòng)和調(diào)試很有用。
結(jié)果
除了滿足功能要求并通過各種測(cè)試之外,軟件的性能對(duì)于判斷項(xiàng)目成功與否也很重要。通常使用兩個(gè)指標(biāo)來衡量嵌入式軟件的性能:占用空間和周期數(shù)。占用空間是指軟件應(yīng)用程序在易失性(SRAM)和非易失性(閃存)存儲(chǔ)器中占用的空間大小。周期數(shù)是指軟件執(zhí)行特定任務(wù)所使用的微處理器時(shí)鐘周期數(shù)。它與軟件運(yùn)行時(shí)間相似,但在執(zhí)行OTA更新時(shí),軟件可能進(jìn)入低功耗模式,此時(shí)微處理器處于非活動(dòng)狀態(tài),不消耗任何周期。雖然軟件參考設(shè)計(jì)沒有針對(duì)任何一個(gè)指標(biāo)進(jìn)行優(yōu)化,但它們對(duì)于程序基準(zhǔn)測(cè)試和比較設(shè)計(jì)權(quán)衡非常有用。
圖11和圖12顯示了在ADuCM4050上實(shí)現(xiàn)的OTA更新軟件參考設(shè)計(jì)的占用空間(不緩存)。這些圖根據(jù)圖10所示的組件進(jìn)行劃分。如圖11所示,整個(gè)應(yīng)用程序使用大約15 kB的閃存。鑒于ADuCM4050包含512 kB閃存,此占用空間非常小。真正的應(yīng)用軟件(為OTA更新過程開發(fā)的軟件)僅需1.5 kB左右,其余用于庫,例如DFP、Micro-ECC和ADF7242堆棧。這些結(jié)果有助于說明SSBL應(yīng)在系統(tǒng)中扮演什么角色的設(shè)計(jì)權(quán)衡。15 kB占用空間的大部分是用于更新過程。SSBL本身僅占用大約500字節(jié)的空間,另外還有1 kB到2 kB的DFP代碼,用于訪問閃存驅(qū)動(dòng)器之類的器件。
圖11.閃存占用空間(字節(jié))
圖12.SRAM占用空間(字節(jié))
為了評(píng)估軟件的開銷,我們?cè)诿看谓邮諗?shù)據(jù)包時(shí)計(jì)數(shù)周期,然后計(jì)算每個(gè)數(shù)據(jù)包平均消耗的周期數(shù)。每個(gè)數(shù)據(jù)包都需要AES-128解密、SHA-256哈希處理、閃存寫入和某種數(shù)據(jù)包元數(shù)據(jù)驗(yàn)證。數(shù)據(jù)包有效載荷為64字節(jié)且不緩存時(shí),處理單個(gè)數(shù)據(jù)包的開銷為7409個(gè)周期。使用26 MHz內(nèi)核時(shí)鐘時(shí),大約需要285微秒的處理時(shí)間。該值是利用ADuCM4050 DFP中的周期計(jì)數(shù)驅(qū)動(dòng)程序計(jì)算的(未調(diào)整周期數(shù)),并且是100 kB二進(jìn)制文件下載期間(約1500個(gè)數(shù)據(jù)包)的平均值。為使每個(gè)數(shù)據(jù)包的開銷最小,DFP中的驅(qū)動(dòng)程序應(yīng)利用ADuCM4050上的直接存儲(chǔ)訪問(DMA)硬件外設(shè)來執(zhí)行總線事務(wù),并且驅(qū)動(dòng)程序在每次事務(wù)處理期間將處理器置于低功耗休眠狀態(tài)。每個(gè)事務(wù)中不存在一個(gè)萬能的狀態(tài)如果我們禁用DFP中的低功耗休眠并將總線事務(wù)更改為不使用DMA,則每個(gè)數(shù)據(jù)包的開銷將增加到17,297個(gè)周期。這說明了高效使用器件驅(qū)動(dòng)程序?qū)η度胧杰浖?yīng)用程序是有影響的。雖然減少每個(gè)數(shù)據(jù)包的數(shù)據(jù)字節(jié)數(shù)也可以降低開銷,但每個(gè)數(shù)據(jù)包的數(shù)據(jù)字節(jié)數(shù)翻一倍達(dá)到128時(shí),周期數(shù)僅有少量增加,相同實(shí)驗(yàn)得到的周期數(shù)為8362。
周期數(shù)和占用空間也解釋了先前討論的權(quán)衡——緩存數(shù)據(jù)包數(shù)據(jù)而不是每次都寫入閃存。使能緩存一頁閃存后,每個(gè)數(shù)據(jù)包的開銷從7409減少到5904個(gè)周期。此20%減幅來自于更新過程跳過了大多數(shù)數(shù)據(jù)包的閃存寫入,僅在緩存已滿時(shí)才執(zhí)行閃存寫入。其代價(jià)是SRAM占用面積增加。不使用緩存時(shí),HAL只需要336個(gè)字節(jié)的SRAM,如圖12所示。但是,當(dāng)使用緩存時(shí),必須保留一個(gè)相當(dāng)于閃存一整頁的空間,故SRAM占用增加到2388字節(jié)。HAL使用的閃存也會(huì)少量增加,原因是需要額外代碼來判斷緩存何時(shí)必須清空。
這些結(jié)果證明,設(shè)計(jì)決策對(duì)軟件性能會(huì)有切實(shí)的影響。不存在一個(gè)萬能的解決方案,每個(gè)系統(tǒng)都有不同的要求和約束,OTA更新軟件需要視具體情況具體對(duì)待。希望本文闡明了在設(shè)計(jì)、實(shí)現(xiàn)和驗(yàn)證OTA更新軟件解決方案時(shí)遇到的常見問題和權(quán)衡。
參考文獻(xiàn)
Nilsson、Dennis Kengo和Ulf E. Larson。“智能車輛的無線安全固件更新”。ICC研討會(huì)——2008年IEEE國(guó)際通信會(huì)議,2008年5月。
Benjamin Bucklin Brown
Benjamin Bucklin Brown [benjamin-b.brown@analog.com]于2016年從麥吉爾大學(xué)畢業(yè)并獲得電氣工程學(xué)士學(xué)位后加入ADI公司。目前他在消費(fèi)電子檢測(cè)與處理技術(shù)(CSPT)部門工作,擔(dān)任嵌入式軟件工程師,為專用集成電路開發(fā)固件。此前,他曾在物聯(lián)網(wǎng)平臺(tái)技術(shù)部門工作,為ADuCM3029和ADuCM4050微控制器開發(fā)器件驅(qū)動(dòng)程序和軟件參考應(yīng)用程序。
推薦閱讀:
特別推薦
- 授權(quán)代理商貿(mào)澤電子供應(yīng)Same Sky多樣化電子元器件
- 使用合適的窗口電壓監(jiān)控器優(yōu)化系統(tǒng)設(shè)計(jì)
- ADI電機(jī)運(yùn)動(dòng)控制解決方案 驅(qū)動(dòng)智能運(yùn)動(dòng)新時(shí)代
- 倍福推出采用 TwinSAFE SC 技術(shù)的 EtherCAT 端子模塊 EL3453-0090
- TDK推出新的X系列環(huán)保型SMD壓敏電阻
- Vishay 推出新款采用0102、0204和 0207封裝的精密薄膜MELF電阻
- Microchip推出新款交鑰匙電容式觸摸控制器產(chǎn)品 MTCH2120
技術(shù)文章更多>>
- 更高精度、更低噪音 GMCC美芝電子膨脹閥以創(chuàng)新?lián)屨夹袠I(yè)“制高點(diǎn)”
- 本立租完成近億元估值Pre-A輪融資,打造AI賦能的租賃服務(wù)平臺(tái)
- 中微公司成功從美國(guó)國(guó)防部中國(guó)軍事企業(yè)清單中移除
- 華邦電子白皮書:滿足歐盟無線電設(shè)備指令(RED)信息安全標(biāo)準(zhǔn)
- 功率器件熱設(shè)計(jì)基礎(chǔ)(九)——功率半導(dǎo)體模塊的熱擴(kuò)散
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
共模電感
固態(tài)盤
固體繼電器
光傳感器
光電池
光電傳感器
光電二極管
光電開關(guān)
光電模塊
光電耦合器
光電器件
光電顯示
光繼電器
光控可控硅
光敏電阻
光敏器件
光敏三極管
光收發(fā)器
光通訊器件
光纖連接器
軌道交通
國(guó)防航空
過流保護(hù)器
過熱保護(hù)
過壓保護(hù)
焊接設(shè)備
焊錫焊膏
恒溫振蕩器
恒壓變壓器
恒壓穩(wěn)壓器