基于IAP和KeilMDK遠程升級設(shè)計

基于IAP和KeilMDK遠程升級設(shè)計

ID:27521691

大?。?66.50 KB

頁數(shù):21頁

時間:2018-12-04

基于IAP和KeilMDK遠程升級設(shè)計_第1頁
基于IAP和KeilMDK遠程升級設(shè)計_第2頁
基于IAP和KeilMDK遠程升級設(shè)計_第3頁
基于IAP和KeilMDK遠程升級設(shè)計_第4頁
基于IAP和KeilMDK遠程升級設(shè)計_第5頁
資源描述:

《基于IAP和KeilMDK遠程升級設(shè)計》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、基于IAP和KeilMDK的遠程升級設(shè)計寫在前面:三個周之前,我突然想寫一個遠程升級的程序。那個時候我只是大概知道IAP的意思是在應(yīng)用編程,但怎么編,我還一無所知。我給自己定下一個個階段目標,從最基礎(chǔ)的代碼一點點寫起,解決一個又一個的問題。三個周之后,我用自己設(shè)計的方法實驗了50多次,無一例升級失敗。三個周來,遇到了很多的不解、困惑,甚至是想放棄,但我現(xiàn)在想說的是:很多未知的困難會擋在我們面前,我們會感覺毫無頭緒甚至覺得毫無出路忍不住要放棄,但多堅持一下,那些困難不但能煙消云散還能帶給我們進步。本設(shè)計是基于LPC2114和KeilMDK(V4.10),但所有支持IAP的處理器都可借鑒

2、本方案,重要的是思想,而不是用什么。0引言在應(yīng)用編程(IAP)技術(shù)為系統(tǒng)在線升級和遠程升級提供了良好的解決方案,也為數(shù)據(jù)存儲和現(xiàn)場固件的升級都帶來了極大的靈活性。通??衫眯酒拇锌诮拥接嬎銠C的RS232口、通過現(xiàn)有的Internet或、無線網(wǎng)絡(luò)或者其他通信方式很方便地實現(xiàn)在線以及遠程升級和維護。本文以NXP的LPC2114ARM微處理器為平臺,以KeilMDK為開發(fā)工具,闡述IAP的原理、Flash的劃分、分散加載機制、中斷重映射以及在線升級的實現(xiàn)方案及其優(yōu)化。本方案使用多種校驗技術(shù),最大限度的保障傳輸數(shù)據(jù)的正確性;使用bootloader機制,即使因意外事件(斷電,編程Flas

3、h失敗等)造成升級失敗后,程序也能返回到升級前的狀態(tài)。1LPC2114的Flash規(guī)劃1.1扇區(qū)描述LPC2114共有128KB片內(nèi)Flash,共分為16個扇區(qū),分別為0扇區(qū)~15扇區(qū),每個扇區(qū)為8KB存儲空間。其中第15扇區(qū)出廠時被固化為BootBlock區(qū),控制復位后的初始化操作,并提供實現(xiàn)Flash編程的方法。所以用戶可用的Flash空間只有120KB。IAP程序固化于BootBlock中,IAP操作是以扇區(qū)為單位,并占用片內(nèi)RAM的高32字節(jié)。下表列出LPC2114器件所包含的扇區(qū)數(shù)和存儲器地址.表1.1LPC2114Flash器件中的扇區(qū)1.2Flash的扇區(qū)劃分本設(shè)計將F

4、lash劃分為四個區(qū),扇區(qū)0存放跳轉(zhuǎn)程序和升級引導程序(Bootloader)。分站上電后執(zhí)行跳轉(zhuǎn)程序,跳轉(zhuǎn)到用戶程序處。用戶程序運行過程中,如果接收到升級指令,會從用戶程序跳轉(zhuǎn)到引導程序區(qū)(Bootloader),接收新程序數(shù)據(jù)包,完成Flash編程并跳轉(zhuǎn)到新程序區(qū)執(zhí)行程序。扇區(qū)1~扇區(qū)7為程序存儲低區(qū);扇區(qū)8~扇區(qū)13為程序存儲高區(qū);扇區(qū)14存放當前程序運行區(qū)域標志,如果當前程序運行在高區(qū),該標志區(qū)的最低四個字節(jié)為0x00010000,如果當前程序運行在低區(qū),該標志區(qū)的最低四個字節(jié)為0x00008000。2IAP的原理與軟件設(shè)計2.1IAP的原理IAP函數(shù)是固化在微處理器內(nèi)部fl

5、ash上的一些函數(shù)代碼,最終的用戶程序可以直接通過調(diào)用這些函數(shù)來對內(nèi)部flash進行擦除和編程操作。LPC2114微處理器的內(nèi)部flash有一個塊稱為BootBlock,位于flash的頂端,可供調(diào)用的IAP函數(shù)就位于該塊中。上電后BootBlock被映射到內(nèi)部地址空間的頂端,同樣IAP函數(shù)人口地址也被映射到地址0x7ffffff0處。用戶可通過跳轉(zhuǎn)到該地址來調(diào)用相應(yīng)的lAP函數(shù)。2.2IAP命令對于在應(yīng)用編程來說,應(yīng)當通過寄存器r0中的字指針指向存儲器(RAM)包含的命令代碼和參數(shù)來調(diào)用IAP程序。IAP命令的結(jié)果返回到寄存器r1所指向的返回表。用戶可通過傳遞寄存器r0和r1中的相

6、同指針重用命令表來得到結(jié)果。參數(shù)表應(yīng)當大到足夠保存所有的結(jié)果以防結(jié)果的數(shù)目大于參數(shù)的數(shù)目。參數(shù)傳遞見圖2-1。參數(shù)和結(jié)果的數(shù)目根據(jù)IAP命令而有所不同。參數(shù)的最大數(shù)目為5,由“將RAM內(nèi)容復制到Flash”命令傳遞。結(jié)果的最大數(shù)目為2,由“扇區(qū)查空”命令返回。命令處理程序在接收到一個未定義的命令時發(fā)送狀態(tài)代碼INVALID_COMMAND。IAP程序是thumb代碼,位于地址0x7FFFFFF0。圖2-1IAP的參數(shù)傳遞表2-1描述了IAP的命令。表2-1IAP命令匯總IAP命令命令代碼描述準備編程扇區(qū)50該命令必須在執(zhí)行“將RAM內(nèi)容復制到Flash”或“擦除扇區(qū)”命令之前執(zhí)行。這

7、兩個命令的成功執(zhí)行會導致相關(guān)的扇區(qū)再次被保護。該命令不能用于boot扇區(qū)。要準備單個扇區(qū),可將起始和結(jié)束扇區(qū)號設(shè)置為相同值。將RAM內(nèi)容復制到Flash51該命令用于編程Flash存儲器。受影響的扇區(qū)應(yīng)當先通過調(diào)用“準備寫操作的扇區(qū)”命令準備。當成功執(zhí)行復制命令后,扇區(qū)將自動受到保護。該命令不能寫boot扇區(qū)。擦除扇區(qū)52該命令用于擦除片內(nèi)Flash存儲器的一個或多個扇區(qū)。boot扇區(qū)不能由該命令擦除。要擦除單個扇區(qū)可將起始和結(jié)束扇區(qū)號設(shè)定為相同值。扇區(qū)查

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。