?

基于LPC2000系列ARM的工業儀表IAP升級實現

2018-03-06 12:59張偉陳月紅
科技資訊 2018年23期
關鍵詞:嵌入式

張偉 陳月紅

摘 要:隨著計算機網絡技術以及微電子技術的發展,嵌入式系統在各行各業的應用越來越廣泛,傳統的嵌入式系統的不足逐漸暴露無遺,ARM嵌入式系統逐漸成為很多行業的最佳選擇,工業儀表亦是如此。根據工業現場儀表嵌入式系統軟件升級困難的現狀,本文敘述了IAP(In-Application Programming)升級技術原理和ARM在線編程的方案,該方案摒棄傳統的使用ISP接口和仿真器進行程序更新的方式,實現了固件的靈活存儲與升級。

關鍵詞:ARM 嵌入式 IAP 工業儀表

中圖分類號:TP311 文獻標識碼:A 文章編號:1672-3791(2018)08(b)-0107-02

LPC2000系列ARM處理器是目前最為流行的微處理器之一,是一種高性能、低功耗、低成本的RISC微處理器。LPC2000系列微控制器是基于支持仿真的ARM7TDMI-S CPC內核,支持ARM和Thumb指令集。它采用ARM7架構的微控制單元。ARM具有大量的片內存儲器和豐富的片內外設,具有連接片內外設功能的VISI外設總線、與中斷控制器接口的AMBA高性能總線和與片內存儲器控制器接口的ARM7局部總線。

傳統的LPC2000處理器更新的方式是采用仿真器和ISP下載。ISP,即In-System Programming,在線編程。具有ISP功能的單片機芯片,通過簡單的下載線,可以直接在電路板上給芯片寫入或者擦除程序,且支持在線調試。仿真器下載在工業應用現場程序更新時,操作復雜、成本高。雖然ISP下載成本較低,但其更新程序的來源和操作都受到硬件的限制。

1 IAP介紹

IAP詳細描述為In Application Programming,是指在應用編程中,單片機程序自身可以往程序存儲器里寫數據或修改程序,IAP是在Flash程序存儲器中的一種編程模式,是程序正在應用過程中的編程。在產品運行時,對Flash的部分區域存儲進行擦除、讀寫操作等,使其數據改變,這為數據存儲和固件的現場升級帶來了更大的靈活性。

IAP技術的實現,首先需要在產品上預留一個通信口,在產品應用過程中,如果boot程序檢測到上位機有新的下載需求,就可以通過這個通信口將數據下載到存儲區中運行,從而實現固件程序的更新升級[2]。

以Boot Loader的功能與設計過程為例,從系統操作角度來看,Boot Loader是先于操作系統內核運行的一段程序。其主要作用在于硬件設備的初始化,即通過監理內存空間的映射圖,來使系統的軟硬件環境達到操作內核調用的狀態[3]。

#define iap_entry(in, out) ((void (*)())(0x7ffffff1))(in, out),in是輸入參數,out是輸出參數,調用iap_entry函數就可以實現存儲器扇區選擇、擦除、查空、拷貝和校驗等。

2 功能設計

將IAP代碼放于LPC2000系列ARM存儲器的扇區0和扇區1中,即地址0x00000000~0x00001FFF的8KB空間,作為系統啟動的BootLoader(啟動引導)程序,從存儲器地址0x00002000開始存放應用程序代碼。IAP的靈活性在于,更新程序時不需要像ISP那樣進行跳線操作,也不需要專用軟件,數據來源也沒有限制,可以來至串口、U盤、以太網口等。本設計選擇的數據來源為串口。圖2為IAP升級的過程。

BootLoader啟動代碼的分析與移植是嵌入式產品研發中最重要的環節之一。近年來,嵌入式技術已取得了飛速的發展,但對于其最本質的核心部分Boot Loader的分析卻不是很多。實踐證明,BootLoader的優越與否,對嵌入式系統的性能起到決定性的作用[4]。

每次上電或重新啟動后,ARM都會首先運行BootLoader程序,等待PC端軟件的更新程序命令或運行原來存儲器中的程序,當在3s鐘內接收到0xAA 0x55數據幀時,BootLoader程序進入等待更新程序模式,否則檢測存儲器應用程序區是否有應用程序,若有則運行應用程序。當BootLoader程序進入更新程序模式時,首先讀取芯片的ID,然后根據芯片ID來確定芯片的程序存儲器的扇區結構,同時PC端下載軟件開始發送16進制格式的程序文件的數據幀,程序文件的數據幀格式為以0x79做幀頭,16進制文件的每行數據作為幀的數據部分。

圖3是PC端下載軟件的界面,在下載時先正確設置串口,選擇起始扇區為2,其他設置默認,選擇需要下載的HEX格式文件,然后下載即可。下載有兩種模式:手動和自動模式,下載過程中,軟件狀態欄會顯示當前操作狀態。

需要注意的是,為了讓用戶代碼運行地址從0x00002000開始,在開發應用程序時,將ADS的ARM Linker選項卡中RO Base設為0x00002000,在相應的分散加載文件中修改程序加載地址為0x00002000。因為處理器要切換到Thumb指令執行IAP代碼,需要將ARM C Compiler下的ARM/Thumb Interwoking選項勾上。另外IAP函數使用了RAM空間的高32字節空間,因此應用程序不應該使用該空間,應用程序堆棧不能超過RAM頂端-32,在啟動代碼中設置如下:

;Build the SYS stack

;設置系統模式堆棧

MSR CPSR_c, #0xdf

LDR SP, =StackUsr-32 ; iap減32

MOV PC, R0

3 結語

隨著ARM嵌入式技術在儀表中的應用,人們不僅對系統的性能和可靠性有很高的要求,產品是否能升級也成為重要的指標。本設計開發了LPC2000系列ARM的BootLoader程序和PC端下載軟件,在儀表程序的現場更新中得到了很好的應用。

參考文獻

[1] 姚夢濤,杭佳,趙漢清,等.基于ARM的嵌入式軟硬件系統設計與實現[J].電子技術與軟件工程,2017(15):202.

[2] 易前旭.基于無線IAP的工業嵌入式系統升級技術應用探討[J].科技致富向導,2014(24):185.

[3] 孫李斌,趙明明.嵌入式系統軟件設計中ARM和Linux的核心技術分析[J].電子世界,2017(12):40.

猜你喜歡
嵌入式
嵌入式LINUX操作系統的研究
嵌入式的特點及發展機遇
嵌入式組件技術的研究及應用
基于嵌入式系統的游戲程序設計
“嵌入式系統概論”課程設計
電子設計應用(2004年7期)2004-09-02
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合