嵌入式微控製器應用中的無線更新:設計權衡與經驗教訓
發布時間:2021-03-08 來源:Benjamin Bucklin Brown 責任編輯:wenwei
【導讀】許多嵌入式係統部署在操作人員難以或無法接近的地方。物聯網(IoT)yingyongyouqiruci,zhexieyingyongtongchangdaliangbushubingqiedianchishoumingyouxian。shilibaokuojiankongrenyuanhuojiqijiankangzhuangkuangdeqianrushixitong。zhexietiaozhanjiashangkuaisudiedaideruanjianshengmingzhouqi,daozhixuduoxitongxuyaozhichiwuxian(OTA)更新。OTA更新用新軟件替換嵌入式係統的微控製器或微處理器上的軟件。雖然很多人非常熟悉移動設備上的OTA更新,但在資源受限的係統上設計和實施會帶來許多不同的挑戰。本文將介紹針對OTA更新的若幹不同軟件設計,並討論其優缺點。我們將了解OTA更新軟件如何利用兩款超低功耗微控製器的硬件特性。
構建模塊
服務器和客戶端
OTAgengxinyongxinruanjiantihuanqijianshangdedangqianruanjian,xinruanjianyiwuxianfangshixiazai。zaiqianrushixitongzhong,yunxingciruanjiandeqijiantongchangshiweikongzhiqi。weikongzhiqishiyizhongxiaoxingjisuanqijian,qicunchuqi、速度和功耗均很有限。微控製器通常包含微處理器(核心)和用於執行特定操作的數字硬件模塊(外設)。工作模式下典型功耗為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),是(shi)OTA更新的目標。係統的另一部分稱為雲或服務器,是新軟件的提供者。服務器和客戶端利用收發器(無線電)通過無線連接進行通信。

圖1.示例嵌入式係統中的服務器/客戶端架構
何為軟件應用程序?
OTAgengxinguochengdedabufencaozuoshijiangxinruanjiancongfuwuqichuanshudaokehuduan。ruanjiancongyuangeshizhuanhuanweierjinzhigeshizhihou,zuoweiyigezijiexuliejinxingchuanshu。zhuanhuanguochenghuibianyiyuandaimawenjian(例如c、cpp),將其鏈接成一個可執行文件(例如exe、elf),然後將可執行文件轉換為可移植的二進製文件格式(例如bin、hex)。概(gai)言(yan)之(zhi),這(zhe)些(xie)文(wen)件(jian)格(ge)式(shi)包(bao)含(han)一(yi)個(ge)字(zi)節(jie)序(xu)列(lie),此(ci)字(zi)節(jie)序(xu)列(lie)屬(shu)於(yu)微(wei)控(kong)製(zhi)器(qi)中(zhong)存(cun)儲(chu)器(qi)的(de)特(te)定(ding)地(di)址(zhi)。通(tong)常(chang),我(wo)們(men)將(jiang)通(tong)過(guo)無(wu)線(xian)鏈(lian)路(lu)發(fa)送(song)的(de)信(xin)息(xi)概(gai)念(nian)化(hua)為(wei)數(shu)據(ju),例(li)如(ru)更(geng)改(gai)係(xi)統(tong)狀(zhuang)態(tai)的(de)命(ming)令(ling)或(huo)係(xi)統(tong)收(shou)集(ji)的(de)傳(chuan)感(gan)器(qi)數(shu)據(ju)。就(jiu)OTA更(geng)新(xin)而(er)言(yan),數(shu)據(ju)就(jiu)是(shi)二(er)進(jin)製(zhi)格(ge)式(shi)的(de)新(xin)軟(ruan)件(jian)。在(zai)很(hen)多(duo)情(qing)況(kuang)下(xia),二(er)進(jin)製(zhi)文(wen)件(jian)非(fei)常(chang)大(da),無(wu)法(fa)通(tong)過(guo)單(dan)次(ci)傳(chuan)輸(shu)從(cong)服(fu)務(wu)器(qi)發(fa)送(song)到(dao)客(ke)戶(hu)端(duan),這(zhe)意(yi)味(wei)著(zhe)需(xu)要(yao)將(jiang)二(er)進(jin)製(zhi)文(wen)件(jian)放(fang)入(ru)多(duo)個(ge)不(bu)同(tong)的(de)數(shu)據(ju)包(bao)中(zhong),此(ci)過(guo)程(cheng)稱(cheng)為(wei)“分包”。為了更好地說明此過程,圖2演示了軟件的不同版本如何生成不同的二進製文件,從而在OTA更新期間發送不同的數據包。在這個簡單例子中,每個數據包包含8字節數據,前4個字節表示客戶端存儲器中用來存儲後4個字節的地址。
主要挑戰
基於對OTA更新過程的這種高層次描述,OTAgengxinjiejuefanganbixuyingduisandatiaozhan。diyigetiaozhanyucunchuqiyouguan。ruanjianjiejuefanganbixujiangxinruanjianyingyongchengxuzuzhidaokehuduanqijiandeyishixinghuofeiyishixingcunchuqizhong,yibianzaigengxinguochengwanchengshikeyizhixingta。jiejuefanganbixuquebaojiangqianyibanbenderuanjianbaoliuweihoubeiyingyongchengxu,yifangxinruanjianchuxianwenti。ciwai,dangfuweiheduandianzhongqishi,womenbixurangkehuduanqijiandezhuangtai——例如當前運行的軟件版本以及它在存儲器中的位置——baochibubian。dierdatiaozhanshitongxin。xinruanjianbixuyilisanshujubaodexingshicongfuwuqifasongdaokehuduan,meigeshujubaodouyaofangzaikehuduancunchuqizhongdetedingdizhi。fenbaofangan、數shu據ju包bao結jie構gou和he數shu據ju傳chuan輸shu協xie議yi必bi須xu在zai軟ruan件jian設she計ji中zhong考kao慮lv周zhou全quan。最zui後hou一yi個ge主zhu要yao挑tiao戰zhan是shi安an全quan性xing。當dang新xin軟ruan件jian以yi無wu線xian方fang式shi從cong服fu務wu器qi發fa送song到dao客ke戶hu端duan時shi,我wo們men必bi須xu確que保bao服fu務wu器qi是shi可ke信xin任ren方fang。這zhe種zhong安an全quan挑tiao戰zhan稱cheng為wei身shen份fen驗yan證zheng。我wo們men還hai必bi須xu對dui新xin軟ruan件jian進jin行xing模mo糊hu處chu理li以yi防fang觀guan察cha者zhe偷tou窺kui,因yin為wei其qi中zhong可ke能neng包bao含han敏min感gan信xin息xi。這zhe種zhong安an全quan挑tiao戰zhan稱cheng為wei保bao密mi。安an全quan性xing的de最zui後hou一yi個ge要yao素su是shi完wan整zheng性xing,即ji確que保bao新xin軟ruan件jian在zai通tong過guo無wu線xian方fang式shi發fa送song時shi不bu會hui損sun壞huai。

圖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更新軟件時,確定推送哪些部分是重要的設計決策。上述最小SSBL將jiang非fei常chang簡jian單dan,易yi於yu驗yan證zheng,並bing且qie在zai應ying用yong程cheng序xu的de生sheng命ming周zhou期qi中zhong很hen可ke能neng不bu需xu要yao修xiu改gai。但dan是shi,這zhe意yi味wei著zhe每mei個ge應ying用yong程cheng序xu都dou要yao負fu責ze下xia載zai和he驗yan證zheng下xia一yi個ge應ying用yong程cheng序xu。這zhe可ke能neng導dao致zhi無wu線xian電dian堆dui棧zhan、設備固件和OTA更新軟件的代碼重複。另一方麵,我們可以選擇將整個OTA更新過程推送到SSBL。在這種情況下,應用程序隻需在ToC中設置一個標誌以請求更新,然後執行複位。SSBLsuihouzhixingxiazaixulieheyanzhengguocheng。zhejiangzuidaxiandudijianshaodaimazhongfubingjianhuayingyongzhuanyongruanjian。raner,zhehuiyinruyigexindetiaozhan,najiushikenengxuyaogengxinSSBL本身(即更新更新代碼)。最終,決定SSBL中放置哪些功能將取決於客戶端器件的存儲器限製、下載的應用程序之間的相似性以及OTA更新軟件的可移植性。
設計權衡:緩存和壓縮
OTA更新軟件中的另一個關鍵設計決策是在OTA更新過程中如何組織存儲器中傳入的應用程序。微控製器上通常有兩類存儲器:非易失性存儲器(例如閃存)和易失性存儲器(例如SRAM)。閃存用於存儲應用程序的程序代碼和隻讀數據,以及其他係統級數據,例如ToC和事件日誌。SRAM用於存儲軟件應用程序的可修改部分,例如非常數全局變量和堆棧。圖2suoshideruanjianyingyongchengxuerjinzhiwenjianjinbaohanfeiyishixingcunchuqizhongcunzaidechengxudemouxiebufen。zaiqidonglichengqijian,yingyongchengxujiangchushihuashuyuyishixingcunchuqidebufen。
在OTA更新過程中,每次客戶端器件從服務器收到一個包含該二進製文件一部分的數據包時,便會將其存儲到SRAMzhong。gaishujubaokeyishiyasuode,yekeyishiweiyasuode。yasuoyingyongchengxuerjinzhiwenjiandehaochushiwenjianhuibianxiao,congeryaofasongdeshujubaohuijianshao,xiazaiguochengzhongcunchushujubaosuoxudeSRAM空間相應地減小。這種方法的缺點是壓縮和解壓縮會增加更新過程的處理時間,並且必須在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更新過程中可以利用。
OTAgengxinruanjianzhongbixugoujiandetongxingongnengliangzuizhongjiangqujueyuxianyoutongxinxieyitigongdechouxiangchengdu。xianyoutongxinxieyijuyouyongyuzaifuwuqihekehuduanzhijianfasonghejieshouwenjiandegongju,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)了(le)OTAgengxinqijiandexinrentiaozhan,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)yingjianwaishelaizhixingzongxianshiwu,bingqiequdongchengxuzaimeicishiwuchuliqijianjiangchuliqizhiyudigonghaoxiumianzhuangtai。meigeshiwuzhongbucunzaiyigewannengdezhuangtairuguowomenjinyongDFP中的低功耗休眠並將總線事務更改為不使用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)到(dao)128時,周期數僅有少量增加,相同實驗得到的周期數為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可編程電源,賦能高端裝備製造
技術文章更多>>
- 1200餘家企業齊聚深圳,CITE2026打造電子信息產業創新盛宴
- 掌握 Gemini 3.1 Pro 參數調優的藝術
- 築牢安全防線:電池擠壓試驗機如何為新能源產業護航?
- Grok 4.1 API 實戰:構建 X 平台實時輿情監控 Agent
- 電源芯片國產化新選擇:MUN3CAD03-SF助力物聯網終端“芯”升級
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
逆變器
逆導可控矽
鎳鎘電池
鎳氫電池
紐扣電池
歐勝
耦合技術
排電阻
排母連接器
排針連接器
片狀電感
偏光片
偏轉線圈
頻率測量儀
頻率器件
頻譜測試儀
平板電腦
平板顯示器
齊納二極管
氣動工具
氣體傳感器
氣體放電管
汽車電子
汽車繼電器
汽車連接器
牆壁開關
翹板開關
驅動模塊
燃料電池
繞線電感



