嵌入式微控製器應用中的無線更新:設計權衡與經驗教訓
發布時間:2021-03-08 來源:Benjamin Bucklin Brown 責任編輯:wenwei
【導讀】許多嵌入式係統部署在操作人員難以或無法接近的地方。物聯網(IoT)應ying用yong尤you其qi如ru此ci,這zhe些xie應ying用yong通tong常chang大da量liang部bu署shu並bing且qie電dian池chi壽shou命ming有you限xian。實shi例li包bao括kuo監jian控kong人ren員yuan或huo機ji器qi健jian康kang狀zhuang況kuang的de嵌qian入ru式shi係xi統tong。這zhe些xie挑tiao戰zhan加jia上shang快kuai速su迭die代dai的de軟ruan件jian生sheng命ming周zhou期qi,導dao致zhi許xu多duo係xi統tong需xu要yao支zhi持chi無wu線xian(OTA)更新。OTA更新用新軟件替換嵌入式係統的微控製器或微處理器上的軟件。雖然很多人非常熟悉移動設備上的OTA更新,但在資源受限的係統上設計和實施會帶來許多不同的挑戰。本文將介紹針對OTA更新的若幹不同軟件設計,並討論其優缺點。我們將了解OTA更新軟件如何利用兩款超低功耗微控製器的硬件特性。
構建模塊
服務器和客戶端
OTA更(geng)新(xin)用(yong)新(xin)軟(ruan)件(jian)替(ti)換(huan)器(qi)件(jian)上(shang)的(de)當(dang)前(qian)軟(ruan)件(jian),新(xin)軟(ruan)件(jian)以(yi)無(wu)線(xian)方(fang)式(shi)下(xia)載(zai)。在(zai)嵌(qian)入(ru)式(shi)係(xi)統(tong)中(zhong),運(yun)行(xing)此(ci)軟(ruan)件(jian)的(de)器(qi)件(jian)通(tong)常(chang)是(shi)微(wei)控(kong)製(zhi)器(qi)。微(wei)控(kong)製(zhi)器(qi)是(shi)一(yi)種(zhong)小(xiao)型(xing)計(ji)算(suan)器(qi)件(jian),其(qi)存(cun)儲(chu)器(qi)、速度和功耗均很有限。微控製器通常包含微處理器(核心)和用於執行特定操作的數字硬件模塊(外設)。工作模式下典型功耗為30μA/MHz至40μA/MHz的超低功耗微控製器是此類應用的理想選擇。使用這些微控製器上的特定硬件外設並將其置於低功耗模式,是OTA更新軟件設計的重要組成部分。圖1顯示了一個可能需要OTA更geng新xin的de嵌qian入ru式shi係xi統tong實shi例li。可ke以yi看kan到dao,一yi個ge微wei控kong製zhi器qi與yu無wu線xian電dian和he傳chuan感gan器qi相xiang連lian,這zhe可ke用yong在zai物wu聯lian網wang應ying用yong中zhong,利li用yong傳chuan感gan器qi收shou集ji有you關guan環huan境jing的de數shu據ju,並bing利li用yong無wu線xian電dian定ding期qi報bao告gao數shu據ju。係xi統tong的de這zhe一yi部bu分fen稱cheng為wei邊bian緣yuan節jie點dian或huo客ke戶hu端duan,是shiOTA更新的目標。係統的另一部分稱為雲或服務器,是新軟件的提供者。服務器和客戶端利用收發器(無線電)通過無線連接進行通信。

圖1.示例嵌入式係統中的服務器/客戶端架構
何為軟件應用程序?
OTAgengxinguochengdedabufencaozuoshijiangxinruanjiancongfuwuqichuanshudaokehuduan。ruanjiancongyuangeshizhuanhuanweierjinzhigeshizhihou,zuoweiyigezijiexuliejinxingchuanshu。zhuanhuanguochenghuibianyiyuandaimawenjian(例如c、cpp),將其鏈接成一個可執行文件(例如exe、elf),然後將可執行文件轉換為可移植的二進製文件格式(例如bin、hex)。gaiyanzhi,zhexiewenjiangeshibaohanyigezijiexulie,cizijiexulieshuyuweikongzhiqizhongcunchuqidetedingdizhi。tongchang,womenjiangtongguowuxianlianlufasongdexinxigainianhuaweishuju,lirugenggaixitongzhuangtaideminglinghuoxitongshoujidechuanganqishuju。jiuOTAgengxineryan,shujujiushierjinzhigeshidexinruanjian。zaihenduoqingkuangxia,erjinzhiwenjianfeichangda,wufatongguodancichuanshucongfuwuqifasongdaokehuduan,zheyiweizhexuyaojiangerjinzhiwenjianfangruduogebutongdeshujubaozhong,ciguochengchengwei“分包”。為了更好地說明此過程,圖2演示了軟件的不同版本如何生成不同的二進製文件,從而在OTA更新期間發送不同的數據包。在這個簡單例子中,每個數據包包含8字節數據,前4個字節表示客戶端存儲器中用來存儲後4個字節的地址。
主要挑戰
基於對OTA更新過程的這種高層次描述,OTAgengxinjiejuefanganbixuyingduisandatiaozhan。diyigetiaozhanyucunchuqiyouguan。ruanjianjiejuefanganbixujiangxinruanjianyingyongchengxuzuzhidaokehuduanqijiandeyishixinghuofeiyishixingcunchuqizhong,yibianzaigengxinguochengwanchengshikeyizhixingta。jiejuefanganbixuquebaojiangqianyibanbenderuanjianbaoliuweihoubeiyingyongchengxu,yifangxinruanjianchuxianwenti。ciwai,dangfuweiheduandianzhongqishi,womenbixurangkehuduanqijiandezhuangtai——例如當前運行的軟件版本以及它在存儲器中的位置——保(bao)持(chi)不(bu)變(bian)。第(di)二(er)大(da)挑(tiao)戰(zhan)是(shi)通(tong)信(xin)。新(xin)軟(ruan)件(jian)必(bi)須(xu)以(yi)離(li)散(san)數(shu)據(ju)包(bao)的(de)形(xing)式(shi)從(cong)服(fu)務(wu)器(qi)發(fa)送(song)到(dao)客(ke)戶(hu)端(duan),每(mei)個(ge)數(shu)據(ju)包(bao)都(dou)要(yao)放(fang)在(zai)客(ke)戶(hu)端(duan)存(cun)儲(chu)器(qi)中(zhong)的(de)特(te)定(ding)地(di)址(zhi)。分(fen)包(bao)方(fang)案(an)、shujubaojiegouheshujuchuanshuxieyibixuzairuanjianshejizhongkaolvzhouquan。zuihouyigezhuyaotiaozhanshianquanxing。dangxinruanjianyiwuxianfangshicongfuwuqifasongdaokehuduanshi,womenbixuquebaofuwuqishikexinrenfang。zhezhonganquantiaozhanchengweishenfenyanzheng。womenhaibixuduixinruanjianjinxingmohuchuliyifangguanchazhetoukui,yinweiqizhongkenengbaohanminganxinxi。zhezhonganquantiaozhanchengweibaomi。anquanxingdezuihouyigeyaosushiwanzhengxing,jiquebaoxinruanjianzaitongguowuxianfangshifasongshibuhuisunhuai。

圖2.軟件應用程序的二進製轉換和分包過程
第二階段引導加載程序(SSBL)
了解引導序列
主(zhu)引(yin)導(dao)加(jia)載(zai)程(cheng)序(xu)是(shi)一(yi)種(zhong)軟(ruan)件(jian)應(ying)用(yong)程(cheng)序(xu),永(yong)久(jiu)駐(zhu)留(liu)在(zai)微(wei)控(kong)製(zhi)器(qi)的(de)隻(zhi)讀(du)存(cun)儲(chu)器(qi)中(zhong)。主(zhu)引(yin)導(dao)加(jia)載(zai)程(cheng)序(xu)所(suo)在(zai)的(de)存(cun)儲(chu)區(qu)域(yu)稱(cheng)為(wei)信(xin)息(xi)空(kong)間(jian),有(you)時(shi)用(yong)戶(hu)無(wu)法(fa)訪(fang)問(wen)。每(mei)次(ci)複(fu)位(wei)都(dou)會(hui)執(zhi)行(xing)該(gai)應(ying)用(yong)程(cheng)序(xu),一(yi)般(ban)完(wan)成(cheng)一(yi)些(xie)必(bi)要(yao)的(de)硬(ying)件(jian)初(chu)始(shi)化(hua),並(bing)且(qie)可(ke)能(neng)將(jiang)用(yong)戶(hu)軟(ruan)件(jian)加(jia)載(zai)到(dao)存(cun)儲(chu)器(qi)中(zhong)。但(dan)是(shi),如(ru)果(guo)微(wei)控(kong)製(zhi)器(qi)包(bao)含(han)片(pian)內(nei)非(fei)易(yi)失(shi)性(xing)存(cun)儲(chu)器(qi)(如閃存),則引導加載程序不需要進行任何加載,隻需將控製權轉移到閃存中的程序即可。如果主引導加載程序不支持OTA更新,則必須有第二階段引導加載程序。與主引導加載程序一樣,SSBL會在每次複位時運行,但將實施OTA更新過程的一部分。此引導序列如圖3所示。本節將說明為什麼需要第二階段引導加載程序,並解釋如何指定此應用程序的作用是一個重要設計權衡。
經驗教訓:務必有一個SSBL
從概念上講,省略SSBL並將所有OTA更新功能放入用戶應用程序似乎更簡單,因為這樣的話,OTA過程可以無縫利用現有的軟件框架、操作係統和設備驅動程序。圖4顯示了一個選擇此方法的係統的存儲器映射和引導序列。
應用程序A是部署在現場微控製器上的原始應用程序。此應用程序包含OTA更新相關軟件,當服務器請求時,利用該軟件可下載應用程序B。下載完成且應用程序B經過驗證之後,應用程序A將對應用程序B的複位處理程序執行分支指令,以將控製權轉移給應用程序B。fuweichulichengxushiyixiaoduandaima,yongzuoruanjianyingyongchengxuderukoudian,bingzaifuweishiyunxing。zaizhezhongqingkuangxia,fuweishitongguozhixingyigefenzhilaimoni,zhexiangdangyuhanshutiaoyong。zhezhongfangfayouliangdawenti:
● 許多嵌入式軟件應用程序采用實時操作係統(RTOS),其允許將軟件拆分為多個並發任務,每個任務在係統中具有不同的職責。例如,圖1所示的應用程序可能有用於讀取傳感器的RTOS任務,對傳感器數據運行某種算法的RTOS任務,以及與無線電接口的RTOS任務。RTOS本身始終處於活動狀態,負責根據異步事件或特定的基於時間的延遲切換這些任務。因此,從RTOS任務分支到新程序是不安全的,因為其他任務會在後台繼續運行。對於實時操作係統,終止某個程序的唯一安全方法是通過複位。

圖3.使用SSBL的存儲器映射和引導流程示例

圖4.沒有SSBL的存儲器映射和引導流程示例
● 基於圖4,上述問題的解決辦法是讓主引導加載程序分支到應用程序B而不是應用程序A。但在某些微控製器上,主引導加載程序總是運行具有中斷向量表(IVT)的程序;IVT是應用程序的一個關鍵部分,描述中斷處理函數,位於地址0。這意味著必須以某種形式重定位IVT,使其複位映射到應用程序B。如果在IVT重定位期間發生斷電重啟,則係統可能會處於永久破損狀態。
將SSBL固定在地址0可以解決這些問題,如圖3所示。SSBL不是RTOS程序,因此可以安全地分支到新應用程序。地址0處的SSBL的IVT永遠不會重新定位,所以不必擔心斷電重啟會將係統置於災難性狀態。
設計權衡:SSBL的作用
我們花了很多時間討論SSBL及其與應用軟件的關係,但SSBL程序有何作用?至少,該程序必須確定當前應用程序是什麼(其開始位置),然後分支到該地址。微控製器存儲器中各種應用的位置一般保存在目錄(ToC)中,如圖3所示。這是持久內存中的一個共享區域,SSBL和應用軟件均利用它來相互通信。當OTA更新過程完成時,新的應用程序信息會更新ToC。OTA更新功能的某些部分也可以被推送到SSBL。開發OTA更新軟件時,確定推送哪些部分是重要的設計決策。上述最小SSBLjiangfeichangjiandan,yiyuyanzheng,bingqiezaiyingyongchengxudeshengmingzhouqizhonghenkenengbuxuyaoxiugai。danshi,zheyiweizhemeigeyingyongchengxudouyaofuzexiazaiheyanzhengxiayigeyingyongchengxu。zhekenengdaozhiwuxiandianduizhan、設備固件和OTA更新軟件的代碼重複。另一方麵,我們可以選擇將整個OTA更新過程推送到SSBL。在這種情況下,應用程序隻需在ToC中設置一個標誌以請求更新,然後執行複位。SSBLsuihouzhixingxiazaixulieheyanzhengguocheng。zhejiangzuidaxiandudijianshaodaimazhongfubingjianhuayingyongzhuanyongruanjian。raner,zhehuiyinruyigexindetiaozhan,najiushikenengxuyaogengxinSSBL本身(即更新更新代碼)。最終,決定SSBL中放置哪些功能將取決於客戶端器件的存儲器限製、下載的應用程序之間的相似性以及OTA更新軟件的可移植性。
設計權衡:緩存和壓縮
OTA更新軟件中的另一個關鍵設計決策是在OTA更新過程中如何組織存儲器中傳入的應用程序。微控製器上通常有兩類存儲器:非易失性存儲器(例如閃存)和易失性存儲器(例如SRAM)。閃存用於存儲應用程序的程序代碼和隻讀數據,以及其他係統級數據,例如ToC和事件日誌。SRAM用於存儲軟件應用程序的可修改部分,例如非常數全局變量和堆棧。圖2所(suo)示(shi)的(de)軟(ruan)件(jian)應(ying)用(yong)程(cheng)序(xu)二(er)進(jin)製(zhi)文(wen)件(jian)僅(jin)包(bao)含(han)非(fei)易(yi)失(shi)性(xing)存(cun)儲(chu)器(qi)中(zhong)存(cun)在(zai)的(de)程(cheng)序(xu)的(de)某(mou)些(xie)部(bu)分(fen)。在(zai)啟(qi)動(dong)例(li)程(cheng)期(qi)間(jian),應(ying)用(yong)程(cheng)序(xu)將(jiang)初(chu)始(shi)化(hua)屬(shu)於(yu)易(yi)失(shi)性(xing)存(cun)儲(chu)器(qi)的(de)部(bu)分(fen)。
在OTA更新過程中,每次客戶端器件從服務器收到一個包含該二進製文件一部分的數據包時,便會將其存儲到SRAM中zhong。該gai數shu據ju包bao可ke以yi是shi壓ya縮suo的de,也ye可ke以yi是shi未wei壓ya縮suo的de。壓ya縮suo應ying用yong程cheng序xu二er進jin製zhi文wen件jian的de好hao處chu是shi文wen件jian會hui變bian小xiao,從cong而er要yao發fa送song的de數shu據ju包bao會hui減jian少shao,下xia載zai過guo程cheng中zhong存cun儲chu數shu據ju包bao所suo需xu的deSRAM空間相應地減小。這種方法的缺點是壓縮和解壓縮會增加更新過程的處理時間,並且必須在OTA更新軟件中捆綁壓縮相關代碼。
新應用軟件屬於閃存,但在更新過程中到達SRAM,因此OTA更新軟件需要在更新過程中的某個時刻執行對閃存的寫操作。暫時將新應用程序存儲在SRAM中的操作稱為緩存。概言之,OTA更新軟件可以采取三種不同的緩存方法。
● 不緩存:每次包含新應用程序一部分的數據包到達時,便將其寫入閃存中的目標位置。這種方案非常簡單,可以最大限度地減少OTA更新軟件中的邏輯數量,但要求完全擦除新應用程序對應的閃存區域。此方法會消磨閃存並增加開銷。
● 部分緩存:保留一個SRAM區(qu)域(yu)用(yong)於(yu)緩(huan)存(cun),當(dang)新(xin)數(shu)據(ju)包(bao)到(dao)達(da)時(shi),將(jiang)其(qi)存(cun)儲(chu)在(zai)該(gai)區(qu)域(yu)中(zhong)。當(dang)該(gai)區(qu)域(yu)填(tian)滿(man)時(shi),將(jiang)數(shu)據(ju)寫(xie)入(ru)閃(shan)存(cun)以(yi)清(qing)空(kong)該(gai)區(qu)域(yu)。如(ru)果(guo)數(shu)據(ju)包(bao)無(wu)序(xu)到(dao)達(da)或(huo)新(xin)應(ying)用(yong)程(cheng)序(xu)二(er)進(jin)製(zhi)文(wen)件(jian)中(zhong)存(cun)在(zai)間(jian)隙(xi),這(zhe)種(zhong)方(fang)案(an)可(ke)能(neng)會(hui)變(bian)得(de)很(hen)複(fu)雜(za),因(yin)為(wei)需(xu)要(yao)一(yi)種(zhong)方(fang)法(fa)來(lai)將(jiang)SRAM地(di)址(zhi)映(ying)射(she)到(dao)閃(shan)存(cun)地(di)址(zhi)。一(yi)種(zhong)策(ce)略(lve)是(shi)讓(rang)緩(huan)存(cun)充(chong)當(dang)閃(shan)存(cun)一(yi)部(bu)分(fen)的(de)鏡(jing)像(xiang)。閃(shan)存(cun)被(bei)劃(hua)分(fen)為(wei)若(ruo)幹(gan)稱(cheng)為(wei)頁(ye)麵(mian)的(de)小(xiao)區(qu)域(yu),這(zhe)是(shi)可(ke)供(gong)擦(ca)除(chu)的(de)最(zui)小(xiao)區(qu)域(yu)。得(de)益(yi)於(yu)這(zhe)種(zhong)自(zi)然(ran)劃(hua)分(fen),一(yi)個(ge)好(hao)辦(ban)法(fa)是(shi)在(zai)SRAM中緩存閃存的一頁,當其填滿或下一數據包屬於其他頁麵時,便將該頁寫入閃存以清空緩存。
● 完全緩存:在OTA更新過程中將整個新應用程序存儲在SRAM中,隻有從服務器完全下載好新應用程序之後才將其寫入閃存。這種方法克服了前述方法的缺點,寫入閃存的次數最少,OTA更新軟件無需複雜的緩存邏輯。但是,這會限製所下載新應用程序的大小,因為係統的可用SRAM量通常遠小於可用閃存量。

圖5.使用SRAM緩存閃存的一頁
圖5顯示了OTA更新過程中的第二種方案——部分緩存,來自圖3和圖4的應用程序A所對應的閃存部分被放大,並且顯示了用於SSBL的SRAM的功能存儲器映射。示例閃存頁麵大小為2 kB。最終,此設計決策將取決於新應用程序的大小和OTA更新軟件容許的複雜度。
安全和通信
設計權衡:軟件與協議
OTA更新解決方案還必須解決安全和通信問題。如圖1所示,許多係統會在硬件和軟件中實現通信協議,以支持係統的普通(非OTA更新相關)操作,例如交換傳感器數據。這意味著服務器和客戶端之間已經建立了(可能是安全的)無線通信的方法。類似圖1所示的嵌入式係統可以使用的通信協議有低功耗藍牙® (BLE)或6LoWPAN等。有時候,這些協議支持安全性和數據交換,OTA更新軟件在OTA更新過程中可以利用。
OTA更(geng)新(xin)軟(ruan)件(jian)中(zhong)必(bi)須(xu)構(gou)建(jian)的(de)通(tong)信(xin)功(gong)能(neng)量(liang)最(zui)終(zhong)將(jiang)取(qu)決(jue)於(yu)現(xian)有(you)通(tong)信(xin)協(xie)議(yi)提(ti)供(gong)的(de)抽(chou)象(xiang)程(cheng)度(du)。現(xian)有(you)通(tong)信(xin)協(xie)議(yi)具(ju)有(you)用(yong)於(yu)在(zai)服(fu)務(wu)器(qi)和(he)客(ke)戶(hu)端(duan)之(zhi)間(jian)發(fa)送(song)和(he)接(jie)收(shou)文(wen)件(jian)的(de)工(gong)具(ju),OTA更新軟件可以簡單地將該工具用於下載過程。但是,如果通信協議較為原始,隻有發送原始數據的工具,那麼OTA更新軟件可能需要執行分包處理,並提供元數據和新應用程序二進製文件。這也適用於安全挑戰。如果通信協議不支持,OTA更新軟件可能要負責對無線保密發送的字節進行解密。
總之,在OTA更新軟件中實施哪些功能,例如自定義數據包結構、服務器/客戶端同步、加jia密mi和he密mi鑰yao交jiao換huan等deng,將jiang取qu決jue於yu係xi統tong的de通tong信xin協xie議yi提ti供gong了le什shen麼me內nei容rong以yi及ji對dui安an全quan性xing和he穩wen健jian性xing的de要yao求qiu。下xia一yi節jie將jiang提ti出chu一yi個ge完wan整zheng的de安an全quan解jie決jue方fang案an,其qi解jie決jue了le之zhi前qian介jie紹shao的de所suo有you挑tiao戰zhan,我wo們men將jiang展zhan示shi如ru何he在zai此ci解jie決jue方fang案an中zhong利li用yong微wei控kong製zhi器qi的de加jia密mi硬ying件jian外wai設she。
解決安全挑戰
我(wo)們(men)的(de)安(an)全(quan)解(jie)決(jue)方(fang)案(an)需(xu)要(yao)讓(rang)新(xin)應(ying)用(yong)程(cheng)序(xu)以(yi)無(wu)線(xian)方(fang)式(shi)保(bao)密(mi)發(fa)送(song),檢(jian)測(ce)新(xin)應(ying)用(yong)程(cheng)序(xu)中(zhong)的(de)任(ren)何(he)損(sun)壞(huai),並(bing)驗(yan)證(zheng)新(xin)應(ying)用(yong)程(cheng)序(xu)是(shi)從(cong)受(shou)信(xin)任(ren)的(de)服(fu)務(wu)器(qi)而(er)不(bu)是(shi)惡(e)意(yi)方(fang)發(fa)送(song)的(de)。這(zhe)些(xie)挑(tiao)戰(zhan)可(ke)通(tong)過(guo)加(jia)密(mi)操(cao)作(zuo)來(lai)解(jie)決(jue)。具(ju)體(ti)而(er)言(yan),該(gai)安(an)全(quan)解(jie)決(jue)方(fang)案(an)可(ke)以(yi)使(shi)用(yong)兩(liang)種(zhong)加(jia)密(mi)操(cao)作(zuo):加密和哈希處理。加密使用客戶端和服務器共享的密鑰(密碼)來對無線發送的數據進行模糊處理。微控製器的加密硬件加速器可能支持的特定加密類型是AES-128或AES-256,具(ju)體(ti)取(qu)決(jue)於(yu)密(mi)鑰(yao)大(da)小(xiao)。除(chu)了(le)加(jia)密(mi)數(shu)據(ju),服(fu)務(wu)器(qi)還(hai)可(ke)以(yi)發(fa)送(song)一(yi)個(ge)摘(zhai)要(yao)以(yi)確(que)保(bao)沒(mei)有(you)損(sun)壞(huai)。摘(zhai)要(yao)通(tong)過(guo)對(dui)數(shu)據(ju)包(bao)進(jin)行(xing)哈(ha)希(xi)處(chu)理(li)來(lai)生(sheng)成(cheng),這(zhe)是(shi)一(yi)種(zhong)用(yong)於(yu)生(sheng)成(cheng)唯(wei)一(yi)代(dai)碼(ma)的(de)不(bu)可(ke)逆(ni)數(shu)學(xue)函(han)數(shu)。在(zai)服(fu)務(wu)器(qi)產(chan)生(sheng)消(xiao)息(xi)或(huo)摘(zhai)要(yao)之(zhi)後(hou),如(ru)果(guo)其(qi)任(ren)何(he)部(bu)分(fen)遭(zao)到(dao)修(xiu)改(gai),比(bi)如(ru)在(zai)無(wu)線(xian)通(tong)信(xin)期(qi)間(jian)有(you)一(yi)位(wei)發(fa)生(sheng)翻(fan)轉(zhuan),則(ze)客(ke)戶(hu)端(duan)在(zai)對(dui)數(shu)據(ju)包(bao)執(zhi)行(xing)相(xiang)同(tong)的(de)哈(ha)希(xi)函(han)數(shu)處(chu)理(li)並(bing)比(bi)較(jiao)摘(zhai)要(yao)時(shi),會(hui)注(zhu)意(yi)到(dao)此(ci)修(xiu)改(gai)。微(wei)控(kong)製(zhi)器(qi)的(de)加(jia)密(mi)硬(ying)件(jian)加(jia)速(su)器(qi)可(ke)能(neng)支(zhi)持(chi)的(de)特(te)定(ding)哈(ha)希(xi)處(chu)理(li)類(lei)型(xing)是(shi)SHA-256。圖6顯示了微控製器中的加密硬件外設的框圖,OTA更新軟件駐留在Cortex-M4應用層中。此圖還顯示了其支持將受保護密鑰存儲在外設中,OTA更新軟件解決方案可以利用這一點來安全存儲客戶端密鑰。

圖6.ADuCM4050上的加密加速器的硬件框圖
解決身份驗證這一最終挑戰的常見技術是使用非對稱加密。對於此操作,服務器會生成一個公鑰-私(si)鑰(yao)對(dui)。私(si)鑰(yao)隻(zhi)有(you)服(fu)務(wu)器(qi)知(zhi)道(dao),客(ke)戶(hu)端(duan)知(zhi)道(dao)公(gong)鑰(yao)。服(fu)務(wu)器(qi)使(shi)用(yong)私(si)鑰(yao)可(ke)以(yi)生(sheng)成(cheng)給(gei)定(ding)數(shu)據(ju)塊(kuai)的(de)簽(qian)名(ming),例(li)如(ru)要(yao)無(wu)線(xian)發(fa)送(song)的(de)數(shu)據(ju)包(bao)的(de)摘(zhai)要(yao)。簽(qian)名(ming)被(bei)發(fa)送(song)給(gei)客(ke)戶(hu)端(duan),後(hou)者(zhe)可(ke)以(yi)使(shi)用(yong)公(gong)鑰(yao)驗(yan)證(zheng)簽(qian)名(ming)。這(zhe)樣(yang),客(ke)戶(hu)端(duan)就(jiu)能(neng)確(que)認(ren)消(xiao)息(xi)是(shi)從(cong)服(fu)務(wu)器(qi)而(er)不(bu)是(shi)惡(e)意(yi)第(di)三(san)方(fang)發(fa)送(song)的(de)。此(ci)序(xu)列(lie)如(ru)圖(tu)7所示,實線箭頭表示函數輸入/輸出,虛線箭頭表示無線發送的信息。

圖7.使用非對稱加密驗證消息
多數微控製器沒有用於執行這些非對稱加密操作的硬件加速器,但可以使用Micro-ECC等deng專zhuan門men針zhen對dui資zi源yuan受shou限xian器qi件jian的de軟ruan件jian庫ku來lai實shi現xian。該gai庫ku需xu要yao一yi個ge用yong戶hu定ding義yi的de隨sui機ji數shu生sheng成cheng功gong能neng,這zhe可ke以yi利li用yong微wei控kong製zhi器qi上shang的de真zhen隨sui機ji數shu發fa生sheng器qi硬ying件jian外wai設she來lai實shi現xian。雖sui然ran這zhe些xie非fei對dui稱cheng加jia密mi操cao作zuo解jie決jue了leOTAgengxinqijiandexinrentiaozhan,danshihuixiaohaodaliangchulishijian,bingqiexuyaojiangqianmingyushujuyitongfasong,zhehuizengjiashujubaodaxiao。womenkeyizaixiazaijieshushishiyongzuihoushujubaodezhaiyaohuozhenggexinruanjianyingyongchengxudezhaiyaozhixingyicicijianzha,danrucidehua,disanfangjiangnengbabushouxinrenderuanjianxiazaidaokehuduan,zhebutailixiang。lixiangqingkuangxia,womenxiwangyanzhengsuoshoudaodemeigeshujubaodoulaiziwomenxinrendefuwuqi,erqiemeiyoumeicidouxuyaoqianmingdekaixiao。zhekeyiliyonghaxilianlaishixian。
哈希鏈將本節討論的加密概念整合到一係列數據包中,以便在數學上將它們聯係在一起。如圖8所示,第一個數據包(編號0)包含下一個數據包的摘要。第一個數據包的有效載荷不是實際的軟件應用程序數據,而是簽名。第二個數據包(編號1)的有效載荷包含二進製文件的一部分和第三個數據包(編號2)的摘要。客戶端驗證第一個數據包中的簽名並緩存摘要H0以供以後使用。當第二個數據包到達時,客戶端對有效載荷進行哈希處理並將其與H0進jin行xing比bi較jiao。如ru果guo它ta們men匹pi配pei,客ke戶hu端duan便bian可ke確que定ding該gai後hou續xu數shu據ju包bao來lai自zi可ke信xin服fu務wu器qi,而er無wu需xu費fei力li進jin行xing簽qian名ming檢jian查zha。生sheng成cheng此ci鏈lian的de高gao開kai銷xiao任ren務wu留liu給gei服fu務wu器qi完wan成cheng,客ke戶hu端duan隻zhi需xu在zai每mei個ge數shu據ju包bao到dao達da時shi進jin行xing緩huan存cun和he哈ha希xi處chu理li,確que保bao到dao達da的de數shu據ju包bao完wan整zheng無wu損sun並bing驗yan明ming正zheng身shen。

圖8.將哈希鏈應用於數據包序列
實驗設置
解決本文所述存儲器、通信和安全設計挑戰的超低功耗微控製器是ADuCM3029和ADuCM4050.這些微控製器包含本文討論的用於OTA更新的硬件外設,例如閃存、SRAM、加密加速器和真隨機數發生器。這些微控製器的器件係列包(DFP)為在這些器件上構建OTA更新解決方案提供了軟件支持。DFP包含外設驅動,以便為使用硬件提供簡單靈活的接口。
硬件配置
為了驗證本文討論的概念,我們利用ADuCM4050創建了OTA更新軟件參考設計。對於客戶端,一個ADuCM4050 EZ-KIT®使用收發器子板馬蹄形連接器連接到ADF7242。客戶端器件如圖9左側所示。對於服務器,我們開發了一個在Windows PC上運行的Python應用程序。Python應用程序通過串行端口與另一個ADuCM4050 EZ-KIT通信,後者也以與客戶端相同的配置連接一個ADF7242。但是,圖9中右邊的EZ-KIT不執行OTA更新邏輯,隻是將從ADF7242接收到的數據包中繼給Python應用程序。

圖9.實驗硬件設置
軟件組件
軟件參考設計對客戶端器件的閃存進行分區,如圖3所示。主要客戶端應用程序具有非常好的移植性和可配置性,以便其他方案或其他硬件平台也可以使用。圖10顯示了客戶端器件的軟件架構。請注意,雖然我們有時將整個應用程序稱為SSBL,但在圖10中,並且從現在開始,我們在邏輯上將真正的SSBL部分(藍色)與OTA更新部分(紅色)分開,因為後者不一定需要完全在上述應用程序中實現。圖10所示的硬件抽象層使OTA客戶端軟件可移植並獨立於任何底層庫(以橙色顯示)。

圖10.客戶端軟件架構
軟件應用程序實現圖3中的引導序列(一個用於從服務器下載新應用程序的簡單通信協議)和哈希鏈。通信協議中的每個數據包都有12字節的元數據頭、64字節的有效載荷和32字節的摘要。此外,它還有如下特性:
● 緩存:根據用戶配置,支持不緩存或緩存閃存的一頁。
● 目錄:ToC設計為僅容納兩個應用程序,並且新應用程序總是下載到最舊的位置,以保留一個備用應用程序。這稱為A/B更新方案。
● 消息傳遞:支持ADF7242或UART進行消息傳遞,具體取決於用戶配置。使用UART進行消息傳遞可免除圖9左側的EZ-KIT,僅保留右側套件用於客戶端。這種有線更新方案對初始係統啟動和調試很有用。
結果
除了滿足功能要求並通過各種測試之外,軟件的性能對於判斷項目成功與否也很重要。通常使用兩個指標來衡量嵌入式軟件的性能:占用空間和周期數。占用空間是指軟件應用程序在易失性(SRAM)和非易失性(閃存)存儲器中占用的空間大小。周期數是指軟件執行特定任務所使用的微處理器時鍾周期數。它與軟件運行時間相似,但在執行OTA更geng新xin時shi,軟ruan件jian可ke能neng進jin入ru低di功gong耗hao模mo式shi,此ci時shi微wei處chu理li器qi處chu於yu非fei活huo動dong狀zhuang態tai,不bu消xiao耗hao任ren何he周zhou期qi。雖sui然ran軟ruan件jian參can考kao設she計ji沒mei有you針zhen對dui任ren何he一yi個ge指zhi標biao進jin行xing優you化hua,但dan它ta們men對dui於yu程cheng序xu基ji準zhun測ce試shi和he比bi較jiao設she計ji權quan衡heng非fei常chang有you用yong。
圖11和圖12顯示了在ADuCM4050上實現的OTA更新軟件參考設計的占用空間(不緩存)。這些圖根據圖10所示的組件進行劃分。如圖11所示,整個應用程序使用大約15 kB的閃存。鑒於ADuCM4050包含512 kB閃存,此占用空間非常小。真正的應用軟件(為OTA更新過程開發的軟件)僅需1.5 kB左右,其餘用於庫,例如DFP、Micro-ECC和ADF7242堆棧。這些結果有助於說明SSBL應在係統中扮演什麼角色的設計權衡。15 kB占用空間的大部分是用於更新過程。SSBL本身僅占用大約500字節的空間,另外還有1 kB到2 kB的DFP代碼,用於訪問閃存驅動器之類的器件。

圖11.閃存占用空間(字節)

圖12.SRAM占用空間(字節)
為了評估軟件的開銷,我們在每次接收數據包時計數周期,然後計算每個數據包平均消耗的周期數。每個數據包都需要AES-128解密、SHA-256哈希處理、閃存寫入和某種數據包元數據驗證。數據包有效載荷為64字節且不緩存時,處理單個數據包的開銷為7409個周期。使用26 MHz內核時鍾時,大約需要285微秒的處理時間。該值是利用ADuCM4050 DFP中的周期計數驅動程序計算的(未調整周期數),並且是100 kB二進製文件下載期間(約1500個數據包)的平均值。為使每個數據包的開銷最小,DFP中的驅動程序應利用ADuCM4050上的直接存儲訪問(DMA)硬ying件jian外wai設she來lai執zhi行xing總zong線xian事shi務wu,並bing且qie驅qu動dong程cheng序xu在zai每mei次ci事shi務wu處chu理li期qi間jian將jiang處chu理li器qi置zhi於yu低di功gong耗hao休xiu眠mian狀zhuang態tai。每mei個ge事shi務wu中zhong不bu存cun在zai一yi個ge萬wan能neng的de狀zhuang態tai如ru果guo我wo們men禁jin用yongDFP中的低功耗休眠並將總線事務更改為不使用DMA,則每個數據包的開銷將增加到17,297個ge周zhou期qi。這zhe說shuo明ming了le高gao效xiao使shi用yong器qi件jian驅qu動dong程cheng序xu對dui嵌qian入ru式shi軟ruan件jian應ying用yong程cheng序xu是shi有you影ying響xiang的de。雖sui然ran減jian少shao每mei個ge數shu據ju包bao的de數shu據ju字zi節jie數shu也ye可ke以yi降jiang低di開kai銷xiao,但dan每mei個ge數shu據ju包bao的de數shu據ju字zi節jie數shu翻fan一yi倍bei達da到dao128時,周期數僅有少量增加,相同實驗得到的周期數為8362。
周期數和占用空間也解釋了先前討論的權衡——緩存數據包數據而不是每次都寫入閃存。使能緩存一頁閃存後,每個數據包的開銷從7409減少到5904個周期。此20%減幅來自於更新過程跳過了大多數數據包的閃存寫入,僅在緩存已滿時才執行閃存寫入。其代價是SRAM占用麵積增加。不使用緩存時,HAL隻需要336個字節的SRAM,如圖12所示。但是,當使用緩存時,必須保留一個相當於閃存一整頁的空間,故SRAM占用增加到2388字節。HAL使用的閃存也會少量增加,原因是需要額外代碼來判斷緩存何時必須清空。
這些結果證明,設計決策對軟件性能會有切實的影響。不存在一個萬能的解決方案,每個係統都有不同的要求和約束,OTA更新軟件需要視具體情況具體對待。希望本文闡明了在設計、實現和驗證OTA更新軟件解決方案時遇到的常見問題和權衡。
參考文獻
Nilsson、Dennis Kengo和Ulf E. Larson。“智能車輛的無線安全固件更新”。ICC研討會——2008年IEEE國際通信會議,2008年5月。
Benjamin Bucklin Brown
Benjamin Bucklin Brown [benjamin-b.brown@analog.com]於2016年從麥吉爾大學畢業並獲得電氣工程學士學位後加入ADI公司。目前他在消費電子檢測與處理技術(CSPT)部門工作,擔任嵌入式軟件工程師,為專用集成電路開發固件。此前,他曾在物聯網平台技術部門工作,為ADuCM3029和ADuCM4050微控製器開發器件驅動程序和軟件參考應用程序。
推薦閱讀:
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 築基AI4S:摩爾線程全功能GPU加速中國生命科學自主生態
- 一秒檢測,成本降至萬分之一,光引科技把幾十萬的台式光譜儀“搬”到了手腕上
- AI服務器電源機櫃Power Rack HVDC MW級測試方案
- 突破工藝邊界,奎芯科技LPDDR5X IP矽驗證通過,速率達9600Mbps
- 通過直接、準確、自動測量超低範圍的氯殘留來推動反滲透膜保護
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索




