基于IAP技術(shù)的ADuC702x固件升級(jí)方案
摘要:本文介紹了一種基于ADuC702x的智能儀表在應(yīng)用編程升級(jí)固件程序的方案。該方案已成功應(yīng)用于光通訊和其他產(chǎn)品中,使產(chǎn)品的固件程序升級(jí)變得簡(jiǎn)單方便,且實(shí)踐驗(yàn)證具有高可靠性。
本文引用地址:http://cafeforensic.com/article/119691.htm關(guān)鍵詞:ADuC702x;IAP;在應(yīng)用編程;遠(yuǎn)程升級(jí)
引言
目前,智能儀表等產(chǎn)品的設(shè)計(jì)主要以微控制器為控制核心,但是其設(shè)計(jì)往往不可能一步到位,尤其是固件程序部分,需要根據(jù)產(chǎn)品使用反饋不斷地進(jìn)行修改和完善。當(dāng)程序需要根據(jù)用戶需求變更時(shí),傳統(tǒng)情況下需要將產(chǎn)品拆卸下來(lái)返回原廠修改程序,或請(qǐng)專業(yè)的維修服務(wù)人員親自到設(shè)備現(xiàn)場(chǎng),將設(shè)備取下或者打開(kāi)設(shè)備,通過(guò)JTAG方式連接PC等來(lái)重新燒寫(xiě)程序。在應(yīng)用編程(In Application Programming,IAP)技術(shù)可實(shí)現(xiàn)對(duì)產(chǎn)品的在應(yīng)用升級(jí)。
ADuC702x系列微處理器由ADI公司生產(chǎn),集成了ARM7TDMI 16位/32位RISC(精簡(jiǎn)指令集計(jì)算機(jī))內(nèi)核,具有8kB的SRAM、62kB的Flash/EE存儲(chǔ)器,可通過(guò)UART或JTAG端口在線編程,最高處理能力達(dá)44MIPS。當(dāng)工作頻率為41.78 MHz時(shí),典型的功耗為120mW。
ADuC702x在線IAP升級(jí)方案
ADuC702x系列微處理器物理存儲(chǔ)結(jié)構(gòu)地址如圖1所示,其程序通常放置在62kB的Flash/EE存儲(chǔ)器內(nèi),該Flash/EE可通過(guò)該系列微處理器內(nèi)部Flash Control Interface進(jìn)行讀寫(xiě)訪問(wèn)操作,通過(guò)該操作實(shí)現(xiàn)IAP固件程序升級(jí)功能。后續(xù)IAP方案研究和程序設(shè)計(jì)均針對(duì)該Flash/EE實(shí)施。
使用IAP對(duì)ADuC702x升級(jí),首先需要了解ADuC702x的Flash/EE基本存儲(chǔ)結(jié)構(gòu)和對(duì)程序存放的Flash/EE進(jìn)行合理分區(qū)規(guī)劃。Flash/EE基本存儲(chǔ)結(jié)構(gòu)如圖2所示,從圖中可以看出,F(xiàn)lash/EE地址從0x00080000到0x0008FFFF,總大小為64kB,其Flash(閃存)的位寬為16位,因而Flash大小即為32k×16b。Flash中512B(即256×16b)為一塊,為最小Flash讀寫(xiě)操作單元。64kB Flash中有2kB(1k×16b)用于該系列微處理器出廠固化啟動(dòng)引導(dǎo)程序,即為On-Chip kernel(片上內(nèi)核),該段程序空間不能為用戶所使用。另外一部分62kB(31×16b)為用戶可使用程序段,該段程序用于存放用戶代碼,在IAP方案設(shè)計(jì)中IAP操作指代對(duì)此62kB的Flash/EE操作。
通過(guò)對(duì)62kB此段用戶可使用的Flash/EE做一定的分區(qū)規(guī)劃和操作,實(shí)現(xiàn)IAP固件程序升級(jí)。對(duì)62kB此段Flash/EE規(guī)劃如圖3所示。從圖3中可知,IAP使用將用戶可使用的Flash/EE劃分為了三個(gè)區(qū):Bootloader區(qū),User Application區(qū)以及Flag標(biāo)志區(qū)。三個(gè)Flash區(qū)功能描述如下。
1. Bootloader區(qū):用來(lái)存放用戶編寫(xiě)的Bootloader代碼,該代碼類(lèi)似于PC機(jī)的BIOS(基本輸入輸出系統(tǒng)),一旦固化成功,該段程序?qū)⒉辉俑?,除非Bootloader代碼出現(xiàn)BUG(錯(cuò)誤),該段程序只能用ISP(在系統(tǒng)編程)方式通過(guò)串口通訊或者JTAG方式寫(xiě)入ADuC702x內(nèi)部。
2. User Application(用戶應(yīng)用)區(qū):該區(qū)用來(lái)存放用戶應(yīng)用程序代碼,用戶代碼的固化需要有配套的PC機(jī)程序通過(guò)串口來(lái)完成,該P(yáng)C機(jī)程序需要根據(jù)指定的協(xié)議和流程編寫(xiě),該協(xié)議和流程將在下文中給出。
3. Flag標(biāo)志區(qū):用來(lái)存放各個(gè)標(biāo)志,用戶代碼程序是否有效標(biāo)志,是否進(jìn)入Bootloader標(biāo)志(該標(biāo)志用來(lái)IAP更新應(yīng)用程序)。Flag定義如圖4所示。
程序啟動(dòng)流程如圖5所示。
下文對(duì)Bootloader程序、User程序設(shè)計(jì)以及Flag進(jìn)行詳細(xì)的闡述。
BootLoader程序設(shè)計(jì)及固化
一、BootLoader程序設(shè)計(jì)
本設(shè)計(jì)在Keil for ARM集成環(huán)境下使用。首先在Keil軟件下新建一個(gè)工程,并選擇芯片型號(hào)為ADuC702x,且不拷貝startup文件。然后分別添加對(duì)應(yīng)源文件,在Keil環(huán)境中配置BootLoader程序起始地址為0x00080000,大小0x5000;SM起始地址為0x00010040,大小為0x1FC0。
二、Bootloader程序固化
Bootloader固化有兩種方式:UART0和JTAG。UART0固化程序參照ADI公司ARMWSD.exe;JTAG下載可以使用ULINK系列仿真器。
評(píng)論