單片機(jī)開(kāi)發(fā)相關(guān)_第1頁(yè)
單片機(jī)開(kāi)發(fā)相關(guān)_第2頁(yè)
單片機(jī)開(kāi)發(fā)相關(guān)_第3頁(yè)
單片機(jī)開(kāi)發(fā)相關(guān)_第4頁(yè)
單片機(jī)開(kāi)發(fā)相關(guān)_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

IAP及其應(yīng)用以LPC2300為例,講述IAP功能在實(shí)際使用過(guò)程中的應(yīng)用方法以及相關(guān)解決方案產(chǎn)品應(yīng)用筆記AN070701概述Boot簡(jiǎn)介片內(nèi)Flash存儲(chǔ)系統(tǒng)數(shù)據(jù)存儲(chǔ)解決方案在線升級(jí)解決方案概述Boot簡(jiǎn)介片內(nèi)Flash存儲(chǔ)系統(tǒng)數(shù)據(jù)存儲(chǔ)解決方案在線升級(jí)解決方案IAP(In

Appplication

Program),即在應(yīng)用中編程。顧名思義,就是在系統(tǒng)運(yùn)行的過(guò)程中動(dòng)態(tài)編程,對(duì)程序執(zhí)行代碼的動(dòng)態(tài)修改。IAP技術(shù)應(yīng)用于嵌入式系統(tǒng)的數(shù)據(jù)存儲(chǔ)和在線升級(jí)。例如在程序運(yùn)行工程中產(chǎn)生4k字節(jié)數(shù)據(jù)表,為了避免占用SRAM空間,用戶可以使用IAP技術(shù)將此表寫(xiě)入片內(nèi)Flash。又如用戶在開(kāi)發(fā)完一個(gè)系統(tǒng)后要增加新的軟件功能,可以使用IAP技術(shù)在線升級(jí)程序,避免重新拆裝設(shè)備。概述概述Boot簡(jiǎn)介片內(nèi)Flash存儲(chǔ)系統(tǒng)數(shù)據(jù)存儲(chǔ)解決方案在線升級(jí)解決方案LPC2300系列處理器在出廠時(shí),由廠家在片內(nèi)固化了一段Boot代碼。Boot裝載程序控制芯片復(fù)位后的初始化操作,并提供對(duì)Flash編程的方法。

Boot程序可以對(duì)芯片進(jìn)行擦除、編程。在系統(tǒng)編程(ISP)在應(yīng)用編程(IAP)Boot簡(jiǎn)介Boot重映射Boot區(qū)裝位載于程地序址提0供x了00I0SP7和E0IA0P0編~程0x接00口0,7

F可FF以F處實(shí)?,F(xiàn)不對(duì)過(guò)片,內(nèi)芯Fla片sh上存電儲(chǔ)以器后的,編會(huì)程首。先對(duì)Boot區(qū)執(zhí)行一次重映射,映射到片內(nèi)存儲(chǔ)器空間的最高處,即接近2G(0x8000

0000)的地方。0x0000

003F0x0000

00002.0GB1.0GB8KB

Boot

Block

重映射片內(nèi)靜態(tài)RAM8KB

Boot

Block片內(nèi)Flash異常向量表0.0GB0x4000

00000x0007

FFFF0x0007

E0000x7FFF

FFFF0x7FFF

E000地址重映射ARM7處理器核外設(shè)控制器RAMBootBlockFLASHJTAGUART0串口在系統(tǒng)編程(ISP)在系統(tǒng)編程是通過(guò)Boot裝載程序和UART0對(duì)片內(nèi)Flash存儲(chǔ)器進(jìn)行擦除/編程的方法。UART0ARM7處理器核CPU運(yùn)行

Boot代碼通過(guò)ISP對(duì)Flash編程ARM7處理器核外設(shè)控制器RAMBootBlockFLASHJTAGUART0在應(yīng)用編程(IAP)在應(yīng)用編程是用戶的應(yīng)用代碼對(duì)片內(nèi)Flash存儲(chǔ)器進(jìn)行擦除/編程的方法。ARM7處理器核CPU運(yùn)行

Boot代碼通過(guò)各種途徑獲取用戶代碼通過(guò)IAP對(duì)Flash編程在應(yīng)用編程(IAP)IAP程序是Thumb代碼,位于地址0x7FFFFFF0。在ARM系統(tǒng)中實(shí)現(xiàn)狀態(tài)轉(zhuǎn)換的指令是“BXAddr”,目標(biāo)地址Addr的最低位(bit0)僅來(lái)確定最終狀態(tài),實(shí)際的“目的地址=Addr

&

0xFFFFFFFE”。在調(diào)用IAP函數(shù)時(shí),不僅要實(shí)現(xiàn)跳轉(zhuǎn)而且還…………Thumb代碼…0x…7FFF

FFF1

&

0x7FFF

FFFEBX

0x7FFF

FFF1IAP程序入口Bit0=1使處理器切換到

Thumb狀態(tài)要注意完:此成為狀示意態(tài)代碼轉(zhuǎn),換。實(shí)際編程中請(qǐng)用LDR

R0,=0x7FFFFAFFR1M代碼BAXRMR狀0態(tài)代字碼對(duì)替齊代。0x0000

40000x0000

40040x7FFF

FFF00x7FFF

FFF2Thumb狀態(tài)半字對(duì)齊ARM寄存器 命令參數(shù)表 命令結(jié)果表命令代碼參數(shù)1……狀態(tài)代碼結(jié)果1……結(jié)果nR0R1參數(shù)n參數(shù)表最大數(shù)目為5在應(yīng)用編程(IAP)在調(diào)用IAP函數(shù)時(shí),寄存器R0中的字指針指向存儲(chǔ)器(RAM)中包含的命令代碼和參數(shù),它作為函數(shù)的入口參數(shù),函數(shù)執(zhí)行的返回值保存在寄存器R1中的字指針指向存儲(chǔ)器(RAM)中,包含狀態(tài)代碼和結(jié)果。結(jié)果表最大數(shù)目為2#define

IAP_LOCATIONtypedef void

(*IAP)

(unsigned

int

[

]

,

unsigned

int

[

]);……IAP

iap_entry;unsigned

long

command[5];unsigned

long

result[2];iap_entry

=

(IAP)

IAP_LOCATION;iap_entry

(command

,

result);在應(yīng)用編程(IAP)執(zhí)行跳轉(zhuǎn)指令時(shí),如果“目的地址”的bit0=

1,表示處理器需要進(jìn)行狀態(tài)切換,由ARM狀態(tài)切換到Thumb狀態(tài),Thumb代碼是“半字”對(duì)齊格式,即地址&0xFFFFFFFE。因此,雖然此處跳轉(zhuǎn)目的地址=0x7FFFFFF1,實(shí)際上跳轉(zhuǎn)到地址

0x7FFFFFF0,同時(shí)進(jìn)行切換到Thumb狀態(tài)。0x7FFFFFF1

IAP程序入口調(diào)用IAP定義函數(shù)類(lèi)型指針定義函數(shù)指針I(yè)AP命令表IAP返回值設(shè)置函數(shù)指針在應(yīng)用編程(IAP)由于IAP是Thumb代碼,因此,需要在ADS編譯選項(xiàng)中,選中ARM/ThumbInterworking選型,這樣ARM和Thumb指令就可以混合編譯。在應(yīng)用編程(IAP)IAP程序會(huì)使用片內(nèi)RAM空間的頂部32個(gè)字節(jié),因此,在支持IAP的場(chǎng)合,用戶程序應(yīng)該避免使用這部分空間。IAP代碼使用8KB

Boot

Block

重映射頂部32字節(jié)8KB

片內(nèi)靜態(tài)RAM片內(nèi)Flash異常向量表0x0000

003F0x0000

00000x4000

1FFF0x4000

1FE00x4000

00000x7FFF

FFFF0x7FFF

E000LPC23648KB

Boot

Block

重映射頂部32字節(jié)32KB

片內(nèi)靜態(tài)RAM片內(nèi)Flash異常向量表0x0000

003F0x0000

00000x4000

7FFF0x4000

7FE00x4000

00000x7FFF

FFFF0x7FFF

E000LPC2366/68/78IAP代碼使用小知識(shí):當(dāng)前程序狀態(tài)寄存器ARM內(nèi)核包含1個(gè)當(dāng)前程序狀態(tài)寄存器(CPSR)。CPSR反映當(dāng)前處理器的狀態(tài),其包含:4個(gè)條件代碼標(biāo)志(負(fù)標(biāo)志N、零標(biāo)志Z、進(jìn)位標(biāo)志

C和溢出標(biāo)志V);2個(gè)中斷禁止位(IRQ禁止與FIQ禁止);5個(gè)對(duì)當(dāng)前處理器模式進(jìn)行編碼的位(M[4:0]);1個(gè)用于指示當(dāng)前執(zhí)行指令的位(ARM指令還是

Thumb指令)。程序狀態(tài)寄存器的格式條件代碼標(biāo)志 保留NZCV——IM0M1M2M3M4TF—.

.

.31

30

29

28

27

268

7

6

5

4

3

2

1

0控制位溢出標(biāo)志進(jìn)位或借位擴(kuò)展零負(fù)或小于模式位狀態(tài)位

FIQ禁止IRQ禁止NZCVIM0M1M2M3M4TF條件代碼標(biāo)志各標(biāo)志位的含義如下:負(fù)標(biāo)志N:運(yùn)算結(jié)果的第31位值,記錄標(biāo)志設(shè)置操作的結(jié)果;零標(biāo)志Z:如果標(biāo)志設(shè)置的操作為0,則置位;進(jìn)位標(biāo)志C:記錄無(wú)符號(hào)加法溢出,減法無(wú)借位,循環(huán)移位;溢出標(biāo)志V:記錄標(biāo)志設(shè)置操作的有符號(hào)溢出??刂莆?31、處中理斷器禁模狀止式態(tài)控位制MT位;0I和~FM;4。;行。?當(dāng)控制位I置位時(shí),IRQ中斷被禁止;?當(dāng)控制位T置位時(shí),處理器正在Thumb狀態(tài)下?當(dāng)控制位F置位時(shí),F(xiàn)IQ中斷被禁止。?當(dāng)控制位T清零時(shí),處理器正在ARM狀態(tài)下運(yùn)警告:絕對(duì)不要強(qiáng)制改變CPSR寄存器中的控制

T。如果這樣做,處理器將進(jìn)入一個(gè)無(wú)法預(yù)測(cè)的態(tài)。位

CPSR,

SPSR_abt CPSR,

SPSR_abt11011

未定義

R0~R7,

SP_und,

LR_und,

PC, R0~R12,

R13_und,

R14_und,

PC,狀

CPSR,

SPSR_und CPSR,

SPSR_und11111

系統(tǒng)

R0~R7,

SP,

LR,

PC, R0~R14,

PC,CPSR

CPSRM[4:0]模式可見(jiàn)的Thumb狀態(tài)寄存器可見(jiàn)的ARM狀態(tài)寄存器10000用戶R0~R7,

SP,

LR,

PC,

CPSRR0~R14,

PC,

CPSR10001快速中斷R0~R7,

SP_fiq,

LR_fiq,

PC,CPSR,

SPSR_fiqR0~R7,R8_fiq~R14_fiq,PC,

運(yùn)行CPSR,

SPSR_fiq10010中斷R0~R7,

SP_irq,

LR_irq,

PC,CPSR,

SPSR_fiqR0~R12,

R13_irq,

R14_irq,

PC,CPSR,

SPSR_irq10011管理R0~R7,

SP_svc,

LR_svc,

PC,CPSR,

SPSR_svcR0~R12,

R13_svc,

R14_svc,

PC,CPSR,

SPSR_svc10111中止R0~R7,

SP_abt,

LR_abt,

PC,R0~R12,

R13_abt,

R14_abt,

PC,注意:不是所有模式位的組合都定義了有效的處理器模式,如果將非法值寫(xiě)入M[4:0]中,處理器將進(jìn)入一個(gè)無(wú)法恢復(fù)的模式。保留位CPSR中的保留位被保留將來(lái)使用。當(dāng)改變

CPSR標(biāo)志和控制位時(shí),請(qǐng)確認(rèn)沒(méi)有改變這些保留位。另外,請(qǐng)確保您的程序不依賴于包含特定值的保留位,因?yàn)閷?lái)的處理器可能會(huì)將這些位設(shè)置為1或者0。在應(yīng)用編程(IAP)用戶可以在啟動(dòng)代InitStack函數(shù)內(nèi)調(diào)整各……;設(shè)置系統(tǒng)模式堆棧MSR CPSR_c,

#0xdfLDR

SP,

=StackUsr

32MOV PC,

R0避免使用片內(nèi)RAM的頂部32個(gè)字節(jié)……InitS…ta…ck7

6

5

4

3

2

1I

F

T M4

M3

M2

M碼Startup.s文件中的個(gè)模式的堆??臻g位置。01

M0……1

1

0

1

1

1

1

1……7

6

5

4

3

2

1

0系統(tǒng)模式

ARM狀態(tài)

IRQ禁止

FIQ禁止在應(yīng)用編程(IAP)IAP的命令表ISP命令命令代碼準(zhǔn)備編程扇區(qū)50將RAM內(nèi)容復(fù)制到Flash51擦除扇區(qū)52扇區(qū)查空53讀器件ID54讀boot代碼版本55比較56IAP各命令返回代碼及意義表返回代碼符號(hào)描述0CMD_SUCCESS命令被成功執(zhí)行。1INVALID_COMMAND無(wú)效命令。2SRC_ADDR_ERROR源地址沒(méi)有以字為邊界。3DST_ADDR_ERROR目標(biāo)地址的邊界錯(cuò)誤。4SRC_ADDR_NOT_MAPPED源地址沒(méi)有位于存儲(chǔ)器映射中。計(jì)數(shù)值必須考慮可用性。5DST_ADDR_NOT_MAPPED目標(biāo)地址沒(méi)有位于到存儲(chǔ)器映射中。計(jì)數(shù)值必須考慮到可用性。6COUNT_ERROR字節(jié)計(jì)數(shù)值不是4的倍數(shù)或是一個(gè)非法值。7INVALID_SECTOR扇區(qū)號(hào)無(wú)效。8SECTOR_NOT_BLANK扇區(qū)非空。9SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION為寫(xiě)操作準(zhǔn)備扇區(qū)命令未執(zhí)行。10COMPARE_ERROR源和目標(biāo)數(shù)據(jù)不相等。11BUSYFlash編程硬件接口忙。概述Boot簡(jiǎn)介片內(nèi)Flash存儲(chǔ)系統(tǒng)數(shù)據(jù)存儲(chǔ)解決方案在線升級(jí)解決方案BootBlock不占用片內(nèi)

Flash(LPC2364/66)用戶Flash(128/256KB)0x0000

0000存儲(chǔ)器空間Boot

Block(8KB)用戶Flash(128/256KB)0x0007

FFFF0x0007

E000在利用IAP代碼來(lái)操作片內(nèi)Flash時(shí),必須熟悉片內(nèi)Flash的扇區(qū)分布。片內(nèi)Flash的操作是以“扇區(qū)”為單位進(jìn)行的,每個(gè)“扇區(qū)”的大小不定。由于IAP代碼位于Boot區(qū)內(nèi),所以IAP命令不允許對(duì)Boot扇區(qū)執(zhí)行寫(xiě)/擦除操作。內(nèi)512KBFlash用戶FlashBoot0x0007

FFFF0x0007

E000扇區(qū)0(4K)0x0000

0000

0x0000

0000(500x40K0B00)7000扇區(qū)7(4K)……扇區(qū)8(32K)片扇區(qū)10(32K)扇區(qū)14(32K)…………0x0003

80000x0003

FFFF存儲(chǔ)0器x0空00間1

FFFF扇區(qū)分布(LPC2368/78)片內(nèi)256KBFlashB0lxo0c0k0(18K8B00)

0片內(nèi)128KB0x00F0l0as8h000片內(nèi)Flash系統(tǒng)對(duì)于LPC2368/78來(lái)說(shuō),Boot區(qū)位于512kBFlash的頂部,因此在LPC2368/78器件中,只有

504kB

Flash可供用戶使用。用戶Flash(504KB)(LPC2368/78)存儲(chǔ)器空間Boot

Block(8KB)用戶Flash(504KB)0x0000

00000x0007

FFFF0x0007

E000扇區(qū)27(4K)……扇區(qū)22(4K)扇區(qū)21(32K)……扇區(qū)8(32K)扇區(qū)7(4K)……扇區(qū)0(4K)0x00070x0007DFFFD0000x000780000x000700000x000080000x000070000x00000000扇區(qū)分布片內(nèi)Flash系統(tǒng)概述Boot簡(jiǎn)介片內(nèi)Flash存儲(chǔ)系統(tǒng)數(shù)據(jù)存儲(chǔ)解決方案在線升級(jí)解決方案數(shù)據(jù)存儲(chǔ)解決方案系統(tǒng)概述通過(guò)IAP,用戶可以使用片內(nèi)Flash作為非易失性數(shù)據(jù)存儲(chǔ)器,存儲(chǔ)一些設(shè)備的配置信息。這樣不僅可以節(jié)約成本,而且還可以減小線路板的面積。LPC2364FlashFlashFlash系統(tǒng)概述利用IAP將Flash作為數(shù)據(jù)存儲(chǔ)器時(shí),用戶需要控制自身代碼量的大小及代碼定位。絕對(duì)不能夠出現(xiàn)Flash

數(shù)據(jù)區(qū)和Flash代碼區(qū)重疊的現(xiàn)象。因?yàn)樵诶肐AP向片內(nèi)Flash存儲(chǔ)器寫(xiě)入數(shù)據(jù)時(shí),需要對(duì)數(shù)據(jù)扇區(qū)進(jìn)行擦除。如果數(shù)據(jù)區(qū)和代碼區(qū)重合,就有可能會(huì)破壞系統(tǒng)的代

碼空間,造成系統(tǒng)死機(jī)或崩潰。用途扇區(qū)大小代碼空間0~628kB數(shù)據(jù)空間74kB注通意過(guò):IAP任向何片F(xiàn)內(nèi)lasFhl都ash是的有扇壽區(qū)命7的寫(xiě),入如51果2個(gè)對(duì)字片節(jié)內(nèi)的Fl數(shù)as據(jù)h

。的操作過(guò)于頻繁,就會(huì)對(duì)其造成損壞,LPC2300的

Flash擦除/寫(xiě)入次數(shù)為10萬(wàn)次。系統(tǒng)概述使用IAP將SRAM中的數(shù)據(jù)編程到Flash時(shí),源數(shù)據(jù)區(qū)只能夠使用片內(nèi)局部總線上的SRAM,不能使用通用

USB

SRAM和以太網(wǎng)SRAM。片內(nèi)SRAM片內(nèi)FlashARM7TDMIAHB橋AHB橋16kSRAM8k 4k

SRAMSRAM

USB控制器局部總線AHB1AHB2小知識(shí):存儲(chǔ)數(shù)據(jù)的對(duì)齊方式如果一個(gè)數(shù)據(jù)是從偶地址開(kāi)始的連續(xù)存儲(chǔ),那么它就是半字對(duì)齊,否則就是非半字對(duì)齊;如果一個(gè)數(shù)據(jù)是以能被4整除的地址開(kāi)始的連續(xù)存儲(chǔ),那么它就是字對(duì)齊,否則就是非字對(duì)齊。方式半字對(duì)齊字對(duì)齊…………地址0x40020x40040x40040x4008…………特征Bit0=0其他位為任意值Bit1=0,Bit0=0其他位為任意值片內(nèi)Flash編程步驟確定系統(tǒng)參數(shù)選擇扇區(qū)(可選)擦除扇區(qū)(可選)選擇扇區(qū)編程扇區(qū)校驗(yàn)數(shù)據(jù)(可選)擦除操作之前必須先選擇扇區(qū),一次可以選擇多個(gè)扇區(qū)使用IAP之前需要定義的一些常量寫(xiě)入數(shù)據(jù)之前要先擦除扇區(qū),已擦除的可不必重復(fù)擦IAP提供數(shù)據(jù)校驗(yàn)手段,用戶不必自己動(dòng)手校驗(yàn)數(shù)據(jù)編程操作之前必須先選擇扇區(qū),一次可以選擇多個(gè)扇區(qū)字對(duì)齊的SRAM數(shù)據(jù)區(qū)數(shù)據(jù)寫(xiě)入到256字節(jié)對(duì)齊的Flash中,一次寫(xiě)入256、512、1024或4096字節(jié)。片內(nèi)Flash編程步驟通過(guò)在使用IAP代碼之前,需要定義一些常量,如系統(tǒng)時(shí)鐘、IAP函數(shù)入口、IAP入口緩沖區(qū)和出口緩沖區(qū)等。確定系統(tǒng)參數(shù)選擇扇區(qū)(可選)擦除扇區(qū)(可選)選擇扇區(qū)編程扇區(qū)校驗(yàn)數(shù)據(jù)(可選)#define#defineuint32paramin[8];uint32paramout[8];IAP_FCCLK

48000IAP_ENTER_A定DR義C0CxL7KFF值F大FF小F,1IAP入口參數(shù)緩沖區(qū)IAP出口參數(shù)緩沖區(qū)I單AP位入為口K地Hz址定義確定系統(tǒng)參數(shù)片內(nèi)Flash編程步驟對(duì)某一個(gè)扇區(qū)執(zhí)行擦除、寫(xiě)入等操作之前,必須先選擇該扇區(qū)。但也可以一次選擇多個(gè)扇區(qū)。確定系統(tǒng)參數(shù)選擇扇區(qū)(可選)擦除扇區(qū)(可選)選擇扇區(qū)編程扇區(qū)校驗(yàn)數(shù)據(jù)(可選)uint32

SelSector(uint8

sec1,uint8

sec2){paramin[0]

=

IAP_SELECTOR;paramin[1]=sec1;paramin[2]=sec2;(*(void(*)())IAP_ENTER_ADR)(paramin,paramout);return(paramout[0]);}設(shè)置扇起區(qū)始選扇擇區(qū)命令字設(shè)置終止扇區(qū)選擇扇區(qū)(可選)返回操調(diào)作用狀I(lǐng)A態(tài)P碼服務(wù)程序片內(nèi)Flash編程步驟LPC2300片內(nèi)Flash在寫(xiě)入數(shù)據(jù)前需要執(zhí)行擦除操作。如果目標(biāo)區(qū)域已經(jīng)被擦除,那么就不必重復(fù)擦除,可直

接寫(xiě)入數(shù)據(jù)。擦除操作一次可以擦除多個(gè)扇區(qū)。確定系統(tǒng)參數(shù)選擇扇區(qū)(可選)擦除扇區(qū)(可選)選擇扇區(qū)編程扇區(qū)校驗(yàn)數(shù)據(jù)(可選)uint32

EraseSector(uint32

sec1,uint32

sec2){paramin[0]

=

IAP_ERASESECTOR;paramin[1]=sec1;paramin[2]=sec2;paramin[3]=IAP_FCCLK;(*(void(*)())IAP_ENTER_ADR)(paramin,paramout);return(paramout[0]);}設(shè)置扇起區(qū)始擦扇除區(qū)命令字設(shè)置終止扇區(qū)擦除扇區(qū)(可選)返回操調(diào)作用狀I(lǐng)A態(tài)P碼服務(wù)程序片內(nèi)Flash編程步驟執(zhí)行完以上幾步后,就可以編程Flash了。執(zhí)行編程扇區(qū)的操作時(shí),IAP函數(shù)會(huì)將RAM中的數(shù)據(jù)拷貝到Flash中。確定系統(tǒng)參數(shù)選擇扇區(qū)(可選)擦除扇區(qū)(可選)選擇扇區(qū)編程扇區(qū)校驗(yàn)數(shù)據(jù)(可選)uint32

RamToFlash(uint32

dst,

uint32

src,

uint32

no){paramin[0]

=

IAP_RAMTOFLASH;paramin[3]=no;(*(void(*)())IAP_ENTER_ADR)(paramin,paramout);return(paramout[0]);}設(shè)置扇區(qū)編程命令字paramin[1]=dst;

設(shè)置Flash目標(biāo)地址paramin[2]=src;設(shè)置SRAM源地址編程扇區(qū)返回操調(diào)作用狀I(lǐng)A態(tài)P碼服務(wù)程序設(shè)置復(fù)制字節(jié)數(shù)paramin[4]=IAP_FCCLK2;

56/512/1024/4096片內(nèi)Flash編程步驟IAP代碼還為用戶提供了一個(gè)數(shù)據(jù)校驗(yàn)的手段,這樣用戶就可以不必自己動(dòng)手來(lái)校驗(yàn)寫(xiě)入Flash中的數(shù)據(jù)是否正確。確定系統(tǒng)參數(shù)選擇扇區(qū)(可選)擦除扇區(qū)(可選)選擇扇區(qū)編程扇區(qū)校驗(yàn)數(shù)據(jù)(可選)uint32

Compare(uint32

dst,

uint32

src,

uint32

no){paramin[0]

=

IAP_COMPARE;paramin[1]=dst;paramin[2]=src;paramin[3]=no;return(paramout[0]);}設(shè)置數(shù)目據(jù)標(biāo)比地較址命令字設(shè)置源地址校驗(yàn)數(shù)據(jù)(可選)返回操調(diào)作用狀I(lǐng)A態(tài)P碼服務(wù)程序比較字節(jié)個(gè)數(shù)(*(void(*)())IAP_ENTER_A必D須R)能(p被ar4a整mi除n,paramout);}SelSector(7,7);EraseSector(7,7);SelSector(7,7);RamToFlash(DestAddr,

(uint32)SendData,

512);while(1);}函數(shù)主體向扇區(qū)7寫(xiě)入512個(gè)字節(jié)的數(shù)據(jù),扇區(qū)7可以作為一個(gè)E2PROM來(lái)使用,如存儲(chǔ)一些系統(tǒng)的配置信息。#define DestAddr

0x00007000

扇區(qū)7的起始地址intmain(void){__align(4)

uint8

SendData[512];uint32

i;

以字對(duì)齊定義變量區(qū)for(i

=

0;

i

<

512;

i++){SendData[i]=i;

初始化變量區(qū)數(shù)據(jù)選擇扇區(qū)7擦除扇區(qū)7選擇扇區(qū)7寫(xiě)入數(shù)據(jù)到Flash編程后的Flash區(qū)域編程后的Flash區(qū)域擦除后的Flash區(qū)域擦除后的Flash區(qū)域概述Boot簡(jiǎn)介片內(nèi)Flash存儲(chǔ)系統(tǒng)數(shù)據(jù)存儲(chǔ)解決方案在線升級(jí)解決方案在線升級(jí)解決方案系統(tǒng)概述“系在統(tǒng)線通升過(guò)級(jí)串”口實(shí)接際收上升是級(jí)Fl代as碼h數(shù),據(jù)然存后儲(chǔ)調(diào)的用一IA個(gè)P函應(yīng)數(shù)用實(shí)特

例現(xiàn)。在系線統(tǒng)升開(kāi)級(jí)發(fā)。完為畢了后實(shí),現(xiàn)在線用升過(guò)級(jí)程,中本,系如統(tǒng)果將需芯要片增的加片

內(nèi)部F分la功sh能重,新那分么區(qū)為:了避免重新拆裝設(shè)備,可以借助BLOooWt代區(qū)碼和區(qū)HI:G又H區(qū)叫:固用件戶區(qū)代碼分為兩個(gè)區(qū)

LOW“在線程升序級(jí)標(biāo)”志方區(qū)式:。標(biāo)記當(dāng)前用戶,程存序放運(yùn)系行統(tǒng)的區(qū),程序B區(qū)標(biāo)目o志和o前t區(qū)HL,oI的Ga在dH首e線區(qū)r地,升,址可級(jí)當(dāng)為完是程:成很序0代多x位0碼系于0升0統(tǒng)L0O級(jí)都4W,0必0區(qū)首需0時(shí)。地的,對(duì)址一可于位個(gè)以這于功對(duì)個(gè)能區(qū),間,對(duì)于0H僅LxIP僅G0C0H使203區(qū)0用0進(jìn)0了0來(lái)行0前說(shuō)0升4;,個(gè)級(jí)利字。用節(jié)反I,之AP用,函來(lái)如數(shù)保果即存程可當(dāng)序?qū)嵡拔滑F(xiàn)用于在戶H線I代G升H碼級(jí)區(qū)區(qū)。,用戶可的程首以序地對(duì)接L址收O。W新如區(qū)的程進(jìn)代序行碼標(biāo)升,志級(jí)然=。后0L調(diào)Ox0用W0I0區(qū)A0P的函80首數(shù)0地0將,址新則為的當(dāng):代前碼程編程0序到x運(yùn)0F0l行a0s0h在扇8L0O區(qū)0W0中,區(qū),H;實(shí)IG如現(xiàn)H程在區(qū)序線的標(biāo)升首志級(jí)地。=址為0x:0000x100000010,0則0當(dāng)00前,程每序個(gè)運(yùn)用行戶在代H碼IG區(qū)H的區(qū)容;量如為程3序2k標(biāo)B;志為其它值,則當(dāng)前程序運(yùn)行在固件區(qū)域。ARM7處理器核RAMFLASHUART0串口P0.6升級(jí)HIGH區(qū)代碼UART0通過(guò)IAP對(duì)Flash編程

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論