




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、IAP及其應(yīng)用以LPC2300為例,講述IAP功能在實際使用過程中的應(yīng)用方法以及相關(guān)解決方案,產(chǎn)品應(yīng)用筆記 AN070701,概述 Boot簡介 片內(nèi)Flash存儲系統(tǒng) 數(shù)據(jù)存儲解決方案 在線升級解決方案,概述 Boot簡介 片內(nèi)Flash存儲系統(tǒng) 數(shù)據(jù)存儲解決方案 在線升級解決方案,IAP(InAppplicationProgram),即在應(yīng)用中編程。顧名思義,就是在系統(tǒng)運行的過程中動態(tài)編程,對程序執(zhí)行代碼的動態(tài)修改。 IAP技術(shù)應(yīng)用于嵌入式系統(tǒng)的數(shù)據(jù)存儲和在線升級。例如在程序運行工程中產(chǎn)生4k字節(jié)數(shù)據(jù)表,為了避免占用SRAM空間,用戶可以使用IAP技術(shù)將此表寫入片內(nèi)Flash。又如用戶在開
2、發(fā)完一個系統(tǒng)后要增加新的軟件功能,可以使用IAP技術(shù)在線升級程序,避免重新拆裝設(shè)備。,概述,概述 Boot簡介 片內(nèi)Flash存儲系統(tǒng) 數(shù)據(jù)存儲解決方案 在線升級解決方案,LPC2300系列處理器在出廠時,由廠家在片內(nèi)固化了一段Boot代碼。Boot裝載程序控制芯片復(fù)位后的初始化操作,并提供對Flash編程的方法。Boot程序可以對芯片進行擦除、編程。,在系統(tǒng)編程(ISP) 在應(yīng)用編程(IAP),Boot簡介,Boot重映射,Boot裝載程序提供了ISP和IAP編程接口,可以實現(xiàn)對片內(nèi)Flash存儲器的編程。,Boot區(qū)位于地址0 x0007 E0000 x0007 FFFF處。不過,芯片上電
3、以后,會首先對Boot區(qū)執(zhí)行一次重映射,映射到片內(nèi)存儲器空間的最高處,即接近2G(0 x8000 0000)的地方。,8KB Boot Block 重映射,地址重映射,在系統(tǒng)編程(ISP),在系統(tǒng)編程是通過Boot裝載程序和UART0對片內(nèi)Flash存儲器進行擦除/編程的方法。,UART0,ARM7 處理器核,CPU運行Boot代碼,通過ISP對Flash編程,在應(yīng)用編程(IAP),在應(yīng)用編程是用戶的應(yīng)用代碼對片內(nèi)Flash存儲器進行擦除/編程的方法。,ARM7 處理器核,CPU運行Boot代碼,通過各種途徑獲取用戶代碼,通過IAP對Flash編程,在應(yīng)用編程(IAP),IAP程序是Thumb
4、代碼,位于地址0 x7FFF FFF0。在ARM系統(tǒng)中實現(xiàn)狀態(tài)轉(zhuǎn)換的指令是“BX Addr”,目標地址Addr的最低位(bit0)僅來確定最終狀態(tài),實際的“目的地址= Addr IAP iap_entry; unsigned long command5; unsigned long result2; iap_entry = (IAP) IAP_LOCATION; iap_entry (command , result);,在應(yīng)用編程(IAP),執(zhí)行跳轉(zhuǎn)指令時,如果“目的地址”的bit0 = 1,表示處理器需要進行狀態(tài)切換,由ARM狀態(tài)切換到Thumb狀態(tài),Thumb代碼是“半字”對齊格式,即地
5、址 設(shè)置系統(tǒng)模式堆棧 MSRCPSR_c, #0 xdf LDRSP, =StackUsr 32 MOVPC, R0,IAP的命令表,在應(yīng)用編程(IAP),IAP各命令返回代碼及意義表,概述 Boot簡介 片內(nèi)Flash存儲系統(tǒng) 數(shù)據(jù)存儲解決方案 在線升級解決方案,Boot Block 不占用片內(nèi)Flash,在利用IAP代碼來操作片內(nèi)Flash時,必須熟悉片內(nèi)Flash的扇區(qū)分布。片內(nèi)Flash的操作是以“扇區(qū)”為單位進行的,每個“扇區(qū)”的大小不定。 由于IAP代碼位于Boot區(qū)內(nèi),所以IAP命令不允許對Boot扇區(qū)執(zhí)行寫/擦除操作。,片內(nèi)512KB Flash,用戶Flash (128/25
6、6KB),片內(nèi)256KB Flash,片內(nèi)128KB Flash,片內(nèi)Flash系統(tǒng),對于LPC2368/78來說,Boot區(qū)位于512kB Flash的頂部,因此在LPC2368/78器件中,只有504kB Flash可供用戶使用。,用戶Flash (504KB),片內(nèi)Flash系統(tǒng),概述 Boot簡介 片內(nèi)Flash存儲系統(tǒng) 數(shù)據(jù)存儲解決方案 在線升級解決方案,數(shù)據(jù)存儲解決方案,系統(tǒng)概述,通過IAP,用戶可以使用片內(nèi)Flash作為非易失性數(shù)據(jù)存儲器,存儲一些設(shè)備的配置信息。這樣不僅可以節(jié)約成本,而且還可以減小線路板的面積。,LPC2364,Flash,Flash,Flash,系統(tǒng)概述,利用
7、IAP將Flash作為數(shù)據(jù)存儲器時,用戶需要控制自身代碼量的大小及代碼定位。絕對不能夠出現(xiàn)Flash數(shù)據(jù)區(qū)和Flash代碼區(qū)重疊的現(xiàn)象。因為在利用IAP向片內(nèi)Flash存儲器寫入數(shù)據(jù)時,需要對數(shù)據(jù)扇區(qū)進行擦除。如果數(shù)據(jù)區(qū)和代碼區(qū)重合,就有可能會破壞系統(tǒng)的代碼空間,造成系統(tǒng)死機或崩潰。,通過IAP向片內(nèi)Flash的扇區(qū)7寫入512個字節(jié)的數(shù)據(jù)。,注意:任何Flash都是有壽命的,如果對片內(nèi)Flash的操作過于頻繁,就會對其造成損壞,LPC2300的Flash擦除/寫入次數(shù)為10萬次。,系統(tǒng)概述,使用IAP將SRAM中的數(shù)據(jù)編程到Flash時,源數(shù)據(jù)區(qū)只能夠使用片內(nèi)局部總線上的SRAM,不能使用通
8、用USB SRAM和以太網(wǎng)SRAM。,片內(nèi) SRAM,如果一個數(shù)據(jù)是從偶地址開始的連續(xù)存儲,那么它就是半字對齊,否則就是非半字對齊; 如果一個數(shù)據(jù)是以能被4整除的地址開始的連續(xù)存儲,那么它就是字對齊,否則就是非字對齊。,小知識:存儲數(shù)據(jù)的對齊方式,片內(nèi)Flash編程步驟,擦除操作之前必須先選擇扇區(qū),一次可以選擇多個扇區(qū),使用IAP之前需要定義的一些常量,寫入數(shù)據(jù)之前要先擦除扇區(qū),已擦除的可不必重復(fù)擦,IAP提供數(shù)據(jù)校驗手段,用戶不必自己動手校驗數(shù)據(jù),編程操作之前必須先選擇扇區(qū),一次可以選擇多個扇區(qū),字對齊的SRAM數(shù)據(jù)區(qū)數(shù)據(jù)寫入到256字節(jié)對齊的Flash中,一次寫入256、512、1024或
9、4096字節(jié)。,片內(nèi)Flash編程步驟,#defineIAP_FCCLK48000 #define IAP_ENTER_ADR0 x7FFFFFF1 uint32paramin8; uint32paramout8;,通過在使用IAP代碼之前,需要定義一些常量,如系統(tǒng)時鐘、IAP函數(shù)入口、IAP入口緩沖區(qū)和出口緩沖區(qū)等。,確定系統(tǒng)參數(shù),片內(nèi)Flash編程步驟,uint32 SelSector(uint8 sec1,uint8 sec2) paramin0 = IAP_SELECTOR; paramin1 = sec1; paramin2 = sec2; (*(void(*)()IAP_ENTER
10、_ADR)(paramin,paramout); return(paramout0); ,對某一個扇區(qū)執(zhí)行擦除、寫入等操作之前,必須先選擇該扇區(qū)。但也可以一次選擇多個扇區(qū)。,選擇扇區(qū)(可選),片內(nèi)Flash編程步驟,uint32 EraseSector(uint32 sec1,uint32 sec2) paramin0 = IAP_ERASESECTOR; paramin1 = sec1; paramin2 = sec2; paramin3 = IAP_FCCLK; (*(void(*)()IAP_ENTER_ADR)(paramin,paramout); return(paramout0);
11、 ,LPC2300片內(nèi)Flash在寫入數(shù)據(jù)前需要執(zhí)行擦除操作。如果目標區(qū)域已經(jīng)被擦除,那么就不必重復(fù)擦除,可直接寫入數(shù)據(jù)。擦除操作一次可以擦除多個扇區(qū)。,擦除扇區(qū)(可選),執(zhí)行完以上幾步后,就可以編程Flash了。執(zhí)行編程扇區(qū)的操作時,IAP函數(shù)會將RAM中的數(shù)據(jù)拷貝到Flash中。,片內(nèi)Flash編程步驟,uint32 RamToFlash(uint32 dst, uint32 src, uint32 no) paramin0 = IAP_RAMTOFLASH; paramin1 = dst; paramin2 = src; paramin3 = no; paramin4 = IAP_FCC
12、LK; (*(void(*)()IAP_ENTER_ADR)(paramin,paramout); return(paramout0); ,編程扇區(qū),IAP代碼還為用戶提供了一個數(shù)據(jù)校驗的手段,這樣用戶就可以不必自己動手來校驗寫入Flash中的數(shù)據(jù)是否正確。,片內(nèi)Flash編程步驟,uint32 Compare(uint32 dst, uint32 src, uint32 no) paramin0 = IAP_COMPARE; paramin1 = dst; paramin2 = src; paramin3 = no; (*(void(*)()IAP_ENTER_ADR)(paramin,pa
13、ramout); return(paramout0); ,校驗數(shù)據(jù)(可選),向扇區(qū)7寫入512個字節(jié)的數(shù)據(jù),扇區(qū)7可以作為一個E2PROM來使用,如存儲一些系統(tǒng)的配置信息。,函數(shù)主體,#defineDestAddr0 x00007000 int main (void) _align(4) uint8 SendData512; uint32 i; for(i = 0; i 512; i+) SendDatai = i; SelSector(7, 7); EraseSector(7,7); SelSector(7, 7); RamToFlash(DestAddr, (uint32)SendData
14、, 512); while(1); ,編程后的Flash區(qū)域,擦除后的Flash區(qū)域,概述 Boot簡介 片內(nèi)Flash存儲系統(tǒng) 數(shù)據(jù)存儲解決方案 在線升級解決方案,在線升級解決方案,系統(tǒng)概述,“在線升級”實際上是Flash數(shù)據(jù)存儲的一個應(yīng)用特例。系統(tǒng)開發(fā)完畢后,在應(yīng)用過程中,如果需要增加部分功能,那么為了避免重新拆裝設(shè)備,可以借助“在線升級”方式。 目前,在線升級是很多系統(tǒng)都必需的一個功能,對于LPC2300來說,利用IAP函數(shù)即可實現(xiàn)在線升級。用戶程序接收新的代碼,然后調(diào)用IAP函數(shù)將新的代碼編程到Flash扇區(qū)中,實現(xiàn)在線升級。,系統(tǒng)通過串口接收升級代碼,然后調(diào)用IAP函數(shù)實現(xiàn)在線升級。
15、為了實現(xiàn)在線升級,本系統(tǒng)將芯片的片內(nèi)Flash重新分區(qū):,Boot代碼區(qū):又叫固件區(qū),存放系統(tǒng)的BootLoader,可完成代碼升級,首地址位于0 x0000 0000;,LOW區(qū)和HIGH區(qū):用戶代碼分為兩個區(qū),LOW區(qū)和HIGH區(qū),當(dāng)程序位于LOW區(qū)時,可以對HIGH區(qū)進行升級。反之,如果程序位于HIGH區(qū),可以對LOW區(qū)進行升級。LOW區(qū)的首地址為:0 x0000 8000,HIGH區(qū)的首地址為:0 x0001 0000,每個用戶代碼區(qū)的容量為32kB;,程序標志區(qū):標記當(dāng)前用戶程序運行的區(qū),程序標志區(qū)的首地址為:0 x0000 4000。對于這個區(qū)間,僅僅使用了前4個字節(jié),用來保存當(dāng)前
16、用戶代碼區(qū)的首地址。如程序標志 0 x0000 8000,則當(dāng)前程序運行在LOW區(qū);如程序標志 = 0 x0001 0000,則當(dāng)前程序運行在HIGH區(qū);如程序標志為其它值,則當(dāng)前程序運行在固件區(qū)域。,升級HIGH區(qū)代碼,UART0,通過IAP對Flash編程,ARM7 處理器核,0 x0001 0000,0 x0000 8000,程序運行在LOW區(qū),P0.6處于低電平,串口接收升級代碼,修改程序標志,標識程序運行在高區(qū),CPU運行HIGH區(qū)的用戶代碼,ARM7 處理器核,此處為用戶編寫的Boot代碼,有別于由芯片廠商固化在片內(nèi)的Boot代碼。,復(fù)位后CPU運行用戶Boot代碼,軟件設(shè)計,“在線升級”模板,為了實現(xiàn)在線升級,我們專門設(shè)計了一套新的模板。該模板具有兩個編譯選項:HIGH和LOW。 當(dāng)需要升級HIGH區(qū)時,就使用HIGH選項進行編譯,用戶代碼位于HIGH區(qū); 當(dāng)需要升級LOW區(qū)時,就使用LOW選項進行編譯,用戶代碼位于LOW區(qū)。,編譯選項及其位置,用戶程序代碼編寫區(qū),代碼量不得超過16K,位于系統(tǒng)Boot代碼區(qū),用戶不能隨便修改,升級方法,使用“在線升級模板”建立工程,編譯以后產(chǎn)生樹狀的文件結(jié)構(gòu)。LOW和HIGH選項都會生成兩個二進制文件SYSTEM和USER。,LOW選項編譯結(jié)果,HIGH選項編譯結(jié)果,當(dāng)前程序運行在LOW區(qū),那么只能升級HIGH區(qū)。系統(tǒng)復(fù)位后,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項目管理培訓(xùn)課件
- 城市污水管網(wǎng)建設(shè)項目數(shù)字化方案(范文參考)
- 2025年垃圾收轉(zhuǎn)裝備項目發(fā)展計劃
- 市政污水管網(wǎng)改造項目資金申請報告(范文模板)
- 健康飲食產(chǎn)業(yè)園項目建議書
- 香港八井加油站維護修復(fù)計劃
- 物業(yè)元旦宣傳的標語(320句)
- 2025年跑道磨擦系數(shù)測試設(shè)備合作協(xié)議書
- 西藏拉薩中學(xué)2024-2025學(xué)年高二英語下學(xué)期第七次月考試題含解析
- 物流配送服務(wù)操作指南
- 山東中醫(yī)藥大學(xué)2020-2021學(xué)年內(nèi)科護理學(xué)試題及答案1
- 公司制成檢驗記錄表
- DB32T 4174-2021 城市居住區(qū)和單位綠化標準
- 基本原理與性能特點多自由度電磁軸承課件
- Q∕SY 1836-2015 鍋爐 加熱爐燃油(氣)燃燒器及安全聯(lián)鎖保護裝置檢測規(guī)范
- 北京輸變電工程標準工藝應(yīng)用圖冊(圖文并茂)
- 儀器使用記錄表
- 石河子大學(xué)化學(xué)化工學(xué)院學(xué)院綜合測評方案-理學(xué)院
- 《汽車電工電子技術(shù)》全套教案(完整版)
- 國家職業(yè)技能標準 (2021年版) 嬰幼兒發(fā)展引導(dǎo)員
- (高清正版)JJF(浙)1091—2014內(nèi)測卡尺校準規(guī)范
評論
0/150
提交評論