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