<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于閃存的微控制器在代碼發(fā)布中的代碼保護

基于閃存的微控制器在代碼發(fā)布中的代碼保護

作者: 時(shí)間:2012-02-15 來(lái)源:網(wǎng)絡(luò ) 收藏

裝載程序使用數據包,數據包有數據頭和校驗和以驗證傳輸。如果數據包傳輸到了控制器并且校驗和是正確的,則裝載程序把它交給解碼引擎(如果它是加密的)。在加密數據的內部有另外一個(gè)密碼校驗和,這給解密引擎一個(gè)驗證密碼信息的手段。它將首先應用通用碼并測試校驗和,如果失敗,則利用來(lái)自串行數字的唯一密碼重試。如果再次失敗,則告訴裝載程序固件對這個(gè)設備無(wú)效。這也可防止代碼被未經(jīng)授權的篡改和意外損壞。

如果解密引擎成功地解碼數據, 它將把數據交給在中對實(shí)際塊進(jìn)行編程的程序例程。當然,對于不同產(chǎn)家,這個(gè)程序是不同的,在后面的設計實(shí)例中將給出COP8的程序。這個(gè)程序保留了一個(gè)128字節的RAM用于更新。當然,這塊RAM在裝載程序完成后可以存放應用程序的數據。

設計實(shí)例

圖3是一個(gè)具備解密功能的固件裝載程序的流程圖。裝載程序使用在編程器和系統模擬程序中廣泛使用的修改版Intel HEX數據格式。這將使應用程序現有架構支持標準并易于使用。裝載固件程序用COP8匯編語(yǔ)言編寫(xiě),以簡(jiǎn)少代碼,并利用器件全部的閃存特性。

簡(jiǎn)單來(lái)說(shuō),Intel HEX格式是一種用ASCII編碼表示的數據記錄格式,用于向設備的存儲器編程對象代碼或數據。該格式由下列字段組成:使用ASCII字符0x3A或者即 “:”記錄起始字段、長(cháng)度范圍為0x00-0xFF的數據長(cháng)度字段(兩個(gè)ASCII字符)、偏移字段、記錄類(lèi)型字段、信息或數據字段以及校驗和字段。每個(gè)字段都由標準的可打印ASCII字符表示。例如,“10”代表十六進(jìn)制0x10或者十進(jìn)制16,可表示長(cháng)度字段。實(shí)際上它的編碼是0x31、0x30,這是“0” 和“1” 的ASCII碼。因為內容是可打印的ASCII字符,能被文本編輯器查看,所以需要加密。

表里包括了標準的Intel HEX格式記錄類(lèi)型。注意該標準只定義了6種記錄類(lèi)型。為利用現有的結構,裝載程序采用Intel HEX 格式,并指定加密數據為一種新的記錄類(lèi)型。記錄類(lèi)型0x10將被用于代表加密數據,這是不能變的。

代碼裝載程序也需要一個(gè)流程控制方法,以保證在下一個(gè)記錄裝載之前,寫(xiě)閃存的周期已經(jīng)完成。在大多數的情況下,應用程序會(huì )產(chǎn)生可分成16個(gè)字節一組的文件,以方使閱讀。通常閃存是以128或256字節進(jìn)行分塊,因此必須有一個(gè)裝載程序的命令要求從主機來(lái)的數據允許可變記錄大小。裝載程序必須能處理 256字節的數據,因為按照標準,這是最大的記錄大小。表的底部顯示了本例中新擴展的記錄類(lèi)型。因為COP8系列器件只有16位地址,無(wú)法執行記錄類(lèi)型 0x02到 0x05。對于具備更大閃存的處理器,例如CR16,它能直接訪(fǎng)問(wèn)16M字節的內存,就需要有擴展線(xiàn)性地址的記錄類(lèi)型。

觀(guān)察圖3中的流程圖,重新設置后的第一個(gè)任務(wù)是檢驗閃存的內容。這是通過(guò)讀取各個(gè)128字節的頁(yè)面(除了位于閃存頂部的自舉驗證代碼和裝載程序代碼)來(lái)完成的。只驗證應用程序的代碼這使計算校驗和非常容易。但如果需要,它也可以包括檢測裝載程序部件。當通過(guò)校驗和檢查,控制就被向量轉移到應用程序固件的入口。入口保持不變非常重要。如果它發(fā)生了移動(dòng),裝載程序會(huì )把向量轉到一個(gè)不正確的入口,并可能出現崩潰。另外,裝載程序可以從代碼中讀出進(jìn)入向量,把向量壓入堆棧并返回,以迫使從那個(gè)地址開(kāi)始執行。這個(gè)方案允許入口點(diǎn)可變。

如果校檢和失敗,裝載程序將保持控制并不斷地往主機發(fā)送信號,用硬件設計實(shí)現的任何手段開(kāi)始裝載。裝載程序也可以控制用戶(hù)接口通知這種狀態(tài)。在調試系統時(shí),一個(gè)表示“固件裝載” 的簡(jiǎn)單的LED燈非常有用。

裝載程序將持續地向主機請求記錄,直到主機通過(guò)EOF記錄表明沒(méi)有記錄了。檢測到的0x10類(lèi)型記錄將被送到解碼引擎,并適當解碼數據。這使得實(shí)際向閃存寫(xiě)數據的代碼,既可以操作加密數據,也可操作對未加密數據。對開(kāi)發(fā)和內部測試來(lái)說(shuō),未加密的數據通路很有價(jià)值。當收到EOF記錄后,所有新固件數據都被寫(xiě)入閃存。然后,裝載程序把控制交還給自舉測試,以驗證新代碼未被破壞。

如上所述,現場(chǎng)可更新設備可以在不曝露IP的情況下得到實(shí)現。使用一個(gè)簡(jiǎn)單的密碼, 制造商的固件就能得到保護,客戶(hù)可以在世界各地能夠訪(fǎng)問(wèn)因特網(wǎng)的地方更新他們的設備。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>