張偉 陳月紅
摘 要:隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)以及微電子技術(shù)的發(fā)展,嵌入式系統(tǒng)在各行各業(yè)的應(yīng)用越來(lái)越廣泛,傳統(tǒng)的嵌入式系統(tǒng)的不足逐漸暴露無(wú)遺,ARM嵌入式系統(tǒng)逐漸成為很多行業(yè)的最佳選擇,工業(yè)儀表亦是如此。根據(jù)工業(yè)現(xiàn)場(chǎng)儀表嵌入式系統(tǒng)軟件升級(jí)困難的現(xiàn)狀,本文敘述了IAP(In-Application Programming)升級(jí)技術(shù)原理和ARM在線(xiàn)編程的方案,該方案摒棄傳統(tǒng)的使用ISP接口和仿真器進(jìn)行程序更新的方式,實(shí)現(xiàn)了固件的靈活存儲(chǔ)與升級(jí)。
關(guān)鍵詞:ARM 嵌入式 IAP 工業(yè)儀表
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2018)08(b)-0107-02
LPC2000系列ARM處理器是目前最為流行的微處理器之一,是一種高性能、低功耗、低成本的RISC微處理器。LPC2000系列微控制器是基于支持仿真的ARM7TDMI-S CPC內(nèi)核,支持ARM和Thumb指令集。它采用ARM7架構(gòu)的微控制單元。ARM具有大量的片內(nèi)存儲(chǔ)器和豐富的片內(nèi)外設(shè),具有連接片內(nèi)外設(shè)功能的VISI外設(shè)總線(xiàn)、與中斷控制器接口的AMBA高性能總線(xiàn)和與片內(nèi)存儲(chǔ)器控制器接口的ARM7局部總線(xiàn)。
傳統(tǒng)的LPC2000處理器更新的方式是采用仿真器和ISP下載。ISP,即In-System Programming,在線(xiàn)編程。具有ISP功能的單片機(jī)芯片,通過(guò)簡(jiǎn)單的下載線(xiàn),可以直接在電路板上給芯片寫(xiě)入或者擦除程序,且支持在線(xiàn)調(diào)試。仿真器下載在工業(yè)應(yīng)用現(xiàn)場(chǎng)程序更新時(shí),操作復(fù)雜、成本高。雖然ISP下載成本較低,但其更新程序的來(lái)源和操作都受到硬件的限制。
1 IAP介紹
IAP詳細(xì)描述為In Application Programming,是指在應(yīng)用編程中,單片機(jī)程序自身可以往程序存儲(chǔ)器里寫(xiě)數(shù)據(jù)或修改程序,IAP是在Flash程序存儲(chǔ)器中的一種編程模式,是程序正在應(yīng)用過(guò)程中的編程。在產(chǎn)品運(yùn)行時(shí),對(duì)Flash的部分區(qū)域存儲(chǔ)進(jìn)行擦除、讀寫(xiě)操作等,使其數(shù)據(jù)改變,這為數(shù)據(jù)存儲(chǔ)和固件的現(xiàn)場(chǎng)升級(jí)帶來(lái)了更大的靈活性。
IAP技術(shù)的實(shí)現(xiàn),首先需要在產(chǎn)品上預(yù)留一個(gè)通信口,在產(chǎn)品應(yīng)用過(guò)程中,如果boot程序檢測(cè)到上位機(jī)有新的下載需求,就可以通過(guò)這個(gè)通信口將數(shù)據(jù)下載到存儲(chǔ)區(qū)中運(yùn)行,從而實(shí)現(xiàn)固件程序的更新升級(jí)[2]。
以Boot Loader的功能與設(shè)計(jì)過(guò)程為例,從系統(tǒng)操作角度來(lái)看,Boot Loader是先于操作系統(tǒng)內(nèi)核運(yùn)行的一段程序。其主要作用在于硬件設(shè)備的初始化,即通過(guò)監(jiān)理內(nèi)存空間的映射圖,來(lái)使系統(tǒng)的軟硬件環(huán)境達(dá)到操作內(nèi)核調(diào)用的狀態(tài)[3]。
#define iap_entry(in, out) ((void (*)())(0x7ffffff1))(in, out),in是輸入?yún)?shù),out是輸出參數(shù),調(diào)用iap_entry函數(shù)就可以實(shí)現(xiàn)存儲(chǔ)器扇區(qū)選擇、擦除、查空、拷貝和校驗(yàn)等。
2 功能設(shè)計(jì)
將IAP代碼放于LPC2000系列ARM存儲(chǔ)器的扇區(qū)0和扇區(qū)1中,即地址0x00000000~0x00001FFF的8KB空間,作為系統(tǒng)啟動(dòng)的BootLoader(啟動(dòng)引導(dǎo))程序,從存儲(chǔ)器地址0x00002000開(kāi)始存放應(yīng)用程序代碼。IAP的靈活性在于,更新程序時(shí)不需要像ISP那樣進(jìn)行跳線(xiàn)操作,也不需要專(zhuān)用軟件,數(shù)據(jù)來(lái)源也沒(méi)有限制,可以來(lái)至串口、U盤(pán)、以太網(wǎng)口等。本設(shè)計(jì)選擇的數(shù)據(jù)來(lái)源為串口。圖2為IAP升級(jí)的過(guò)程。
BootLoader啟動(dòng)代碼的分析與移植是嵌入式產(chǎn)品研發(fā)中最重要的環(huán)節(jié)之一。近年來(lái),嵌入式技術(shù)已取得了飛速的發(fā)展,但對(duì)于其最本質(zhì)的核心部分Boot Loader的分析卻不是很多。實(shí)踐證明,BootLoader的優(yōu)越與否,對(duì)嵌入式系統(tǒng)的性能起到?jīng)Q定性的作用[4]。
每次上電或重新啟動(dòng)后,ARM都會(huì)首先運(yùn)行BootLoader程序,等待PC端軟件的更新程序命令或運(yùn)行原來(lái)存儲(chǔ)器中的程序,當(dāng)在3s鐘內(nèi)接收到0xAA 0x55數(shù)據(jù)幀時(shí),BootLoader程序進(jìn)入等待更新程序模式,否則檢測(cè)存儲(chǔ)器應(yīng)用程序區(qū)是否有應(yīng)用程序,若有則運(yùn)行應(yīng)用程序。當(dāng)BootLoader程序進(jìn)入更新程序模式時(shí),首先讀取芯片的ID,然后根據(jù)芯片ID來(lái)確定芯片的程序存儲(chǔ)器的扇區(qū)結(jié)構(gòu),同時(shí)PC端下載軟件開(kāi)始發(fā)送16進(jìn)制格式的程序文件的數(shù)據(jù)幀,程序文件的數(shù)據(jù)幀格式為以0x79做幀頭,16進(jìn)制文件的每行數(shù)據(jù)作為幀的數(shù)據(jù)部分。
圖3是PC端下載軟件的界面,在下載時(shí)先正確設(shè)置串口,選擇起始扇區(qū)為2,其他設(shè)置默認(rèn),選擇需要下載的HEX格式文件,然后下載即可。下載有兩種模式:手動(dòng)和自動(dòng)模式,下載過(guò)程中,軟件狀態(tài)欄會(huì)顯示當(dāng)前操作狀態(tài)。
需要注意的是,為了讓用戶(hù)代碼運(yùn)行地址從0x00002000開(kāi)始,在開(kāi)發(fā)應(yīng)用程序時(shí),將ADS的ARM Linker選項(xiàng)卡中RO Base設(shè)為0x00002000,在相應(yīng)的分散加載文件中修改程序加載地址為0x00002000。因?yàn)樘幚砥饕袚Q到Thumb指令執(zhí)行IAP代碼,需要將ARM C Compiler下的ARM/Thumb Interwoking選項(xiàng)勾上。另外IAP函數(shù)使用了RAM空間的高32字節(jié)空間,因此應(yīng)用程序不應(yīng)該使用該空間,應(yīng)用程序堆棧不能超過(guò)RAM頂端-32,在啟動(dòng)代碼中設(shè)置如下:
;Build the SYS stack
;設(shè)置系統(tǒng)模式堆棧
MSR CPSR_c, #0xdf
LDR SP, =StackUsr-32 ; iap減32
MOV PC, R0
3 結(jié)語(yǔ)
隨著ARM嵌入式技術(shù)在儀表中的應(yīng)用,人們不僅對(duì)系統(tǒng)的性能和可靠性有很高的要求,產(chǎn)品是否能升級(jí)也成為重要的指標(biāo)。本設(shè)計(jì)開(kāi)發(fā)了LPC2000系列ARM的BootLoader程序和PC端下載軟件,在儀表程序的現(xiàn)場(chǎng)更新中得到了很好的應(yīng)用。
參考文獻(xiàn)
[1] 姚夢(mèng)濤,杭佳,趙漢清,等.基于ARM的嵌入式軟硬件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)與軟件工程,2017(15):202.
[2] 易前旭.基于無(wú)線(xiàn)IAP的工業(yè)嵌入式系統(tǒng)升級(jí)技術(shù)應(yīng)用探討[J].科技致富向?qū)В?014(24):185.
[3] 孫李斌,趙明明.嵌入式系統(tǒng)軟件設(shè)計(jì)中ARM和Linux的核心技術(shù)分析[J].電子世界,2017(12):40.