基于iap和keilmdk的遠(yuǎn)程升級(jí)設(shè)計(jì)

基于iap和keilmdk的遠(yuǎn)程升級(jí)設(shè)計(jì)

ID:1287108

大?。?66.50 KB

頁數(shù):21頁

時(shí)間:2017-11-09

基于iap和keilmdk的遠(yuǎn)程升級(jí)設(shè)計(jì)_第1頁
基于iap和keilmdk的遠(yuǎn)程升級(jí)設(shè)計(jì)_第2頁
基于iap和keilmdk的遠(yuǎn)程升級(jí)設(shè)計(jì)_第3頁
基于iap和keilmdk的遠(yuǎn)程升級(jí)設(shè)計(jì)_第4頁
基于iap和keilmdk的遠(yuǎn)程升級(jí)設(shè)計(jì)_第5頁
資源描述:

《基于iap和keilmdk的遠(yuǎn)程升級(jí)設(shè)計(jì)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

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

2、計(jì)是基于LPC2114和KeilMDK(V4.10),但所有支持IAP的處理器都可借鑒本方案,重要的是思想,而不是用什么。0引言在應(yīng)用編程(IAP)技術(shù)為系統(tǒng)在線升級(jí)和遠(yuǎn)程升級(jí)提供了良好的解決方案,也為數(shù)據(jù)存儲(chǔ)和現(xiàn)場(chǎng)固件的升級(jí)都帶來了極大的靈活性。通??衫眯酒拇锌诮拥接?jì)算機(jī)的RS232口、通過現(xiàn)有的Internet或、無線網(wǎng)絡(luò)或者其他通信方式很方便地實(shí)現(xiàn)在線以及遠(yuǎn)程升級(jí)和維護(hù)。本文以NXP的LPC2114ARM微處理器為平臺(tái),以KeilMDK為開發(fā)工具,闡述IAP的原理、Flash的劃分、分散

3、加載機(jī)制、中斷重映射以及在線升級(jí)的實(shí)現(xiàn)方案及其優(yōu)化。本方案使用多種校驗(yàn)技術(shù),最大限度的保障傳輸數(shù)據(jù)的正確性;使用bootloader機(jī)制,即使因意外事件(斷電,編程Flash失敗等)造成升級(jí)失敗后,程序也能返回到升級(jí)前的狀態(tài)。1LPC2114的Flash規(guī)劃1.1扇區(qū)描述LPC2114共有128KB片內(nèi)Flash,共分為16個(gè)扇區(qū),分別為0扇區(qū)~15扇區(qū),每個(gè)扇區(qū)為8KB存儲(chǔ)空間。其中第15扇區(qū)出廠時(shí)被固化為BootBlock區(qū),控制復(fù)位后的初始化操作,并提供實(shí)現(xiàn)Flash編程的方法。所以用戶可用的

4、Flash空間只有120KB。IAP程序固化于BootBlock中,IAP操作是以扇區(qū)為單位,并占用片內(nèi)RAM的高32字節(jié)。下表列出LPC2114器件所包含的扇區(qū)數(shù)和存儲(chǔ)器地址.表1.1LPC2114Flash器件中的扇區(qū)1.2Flash的扇區(qū)劃分本設(shè)計(jì)將Flash劃分為四個(gè)區(qū),扇區(qū)0存放跳轉(zhuǎn)程序和升級(jí)引導(dǎo)程序(Bootloader)。分站上電后執(zhí)行跳轉(zhuǎn)程序,跳轉(zhuǎn)到用戶程序處。用戶程序運(yùn)行過程中,如果接收到升級(jí)指令,會(huì)從用戶程序跳轉(zhuǎn)到引導(dǎo)程序區(qū)(Bootloader),接收新程序數(shù)據(jù)包,完成Flas

5、h編程并跳轉(zhuǎn)到新程序區(qū)執(zhí)行程序。扇區(qū)1~扇區(qū)7為程序存儲(chǔ)低區(qū);扇區(qū)8~扇區(qū)13為程序存儲(chǔ)高區(qū);扇區(qū)14存放當(dāng)前程序運(yùn)行區(qū)域標(biāo)志,如果當(dāng)前程序運(yùn)行在高區(qū),該標(biāo)志區(qū)的最低四個(gè)字節(jié)為0x00010000,如果當(dāng)前程序運(yùn)行在低區(qū),該標(biāo)志區(qū)的最低四個(gè)字節(jié)為0x00008000。2IAP的原理與軟件設(shè)計(jì)2.1IAP的原理IAP函數(shù)是固化在微處理器內(nèi)部flash上的一些函數(shù)代碼,最終的用戶程序可以直接通過調(diào)用這些函數(shù)來對(duì)內(nèi)部flash進(jìn)行擦除和編程操作。LPC2114微處理器的內(nèi)部flash有一個(gè)塊稱為BootB

6、lock,位于flash的頂端,可供調(diào)用的IAP函數(shù)就位于該塊中。上電后BootBlock被映射到內(nèi)部地址空間的頂端,同樣IAP函數(shù)人口地址也被映射到地址0x7ffffff0處。用戶可通過跳轉(zhuǎn)到該地址來調(diào)用相應(yīng)的lAP函數(shù)。2.2IAP命令對(duì)于在應(yīng)用編程來說,應(yīng)當(dāng)通過寄存器r0中的字指針指向存儲(chǔ)器(RAM)包含的命令代碼和參數(shù)來調(diào)用IAP程序。IAP命令的結(jié)果返回到寄存器r1所指向的返回表。用戶可通過傳遞寄存器r0和r1中的相同指針重用命令表來得到結(jié)果。參數(shù)表應(yīng)當(dāng)大到足夠保存所有的結(jié)果以防結(jié)果的數(shù)目

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

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

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

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

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