摘 要:本文以ARM處理器為平臺,以恩智浦公司的LPC2136為例,在In-Application Progamming(IAP)技術(shù)原理基礎(chǔ)上設(shè)計(jì)并實(shí)現(xiàn)了嵌入式微處理器在線及遠(yuǎn)程升級技術(shù)。該技術(shù)摒棄了傳統(tǒng)升級前需要打開設(shè)備跳線等繁瑣過程,并解決了升級過程意外中斷、傳輸誤碼等關(guān)鍵難點(diǎn)問題。
關(guān)鍵詞:應(yīng)用編程;ARM;啟動(dòng)裝載程序
中圖分類號:TP368.11;TN06 文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2018)08-0050-02
Abstract:This paper takes ARM processor as the platform,takes LPC2136 of NXP Company as an example,and designs and implements the online and remote upgrade technology of embedded microprocessor on the basis of the principle of In-Application Progamming(IAP)technology. The technology eliminates the tedious process of opening device jumpers before upgrading,and solves the key problems such as unexpected interruption during the upgrade process,transmission error code and so on.
Keywords:application programming;ARM;boot loader
0 引 言
目前嵌入式系統(tǒng)應(yīng)用相關(guān)技術(shù)取得了突飛猛進(jìn)的發(fā)展,嵌入式應(yīng)用已經(jīng)深入到工業(yè)控制、通信、消費(fèi)類電子、信息家電等不同領(lǐng)域,同時(shí)ARM處理器芯片由于其突出的低功耗、高性能、應(yīng)用范圍廣泛等特點(diǎn)在嵌入式系統(tǒng)中得到廣泛的應(yīng)用。為了能夠滿足客戶需求的變化,為現(xiàn)有產(chǎn)品提供新的功能或修正原有系統(tǒng)存在的缺陷,從而延長原有產(chǎn)品的生命周期,降低維護(hù)保養(yǎng)費(fèi)用,產(chǎn)品所設(shè)計(jì)的嵌入式系統(tǒng)支持固件升級是必不可少的。在很多嵌入式應(yīng)用場合,由于所使用的設(shè)備正在承擔(dān)關(guān)鍵的職能,不能因?yàn)楣碳夁^程而中斷該設(shè)備的使用。
目前的固件升級方法,往往需要打開設(shè)備跳線等繁瑣過程,升級過程可能出現(xiàn)意外中斷、傳輸無碼等問題,固件升級完畢,需要對固件系統(tǒng)進(jìn)行復(fù)位后,才能繼續(xù)工作,不能提供連續(xù)的服務(wù)。本文以恩智浦(NXP)公司的ARM7芯片LPC2136為例,提出基于ARM的固件升級方法,可以在系統(tǒng)運(yùn)行過程中完成固件升級、提供連續(xù)的服務(wù),具備良好的可靠性和擴(kuò)展性。
1 IAP基本原理
應(yīng)用編程(IAP)函數(shù)是固化在微處理器內(nèi)部Flash上的功能函數(shù)代碼,用戶程序可以直接通過調(diào)用這些代碼來對內(nèi)部Flash進(jìn)行擦除和編程操作。IAP技術(shù)主要應(yīng)用于嵌入式系統(tǒng)的數(shù)據(jù)存儲和在線升級過程,通??衫眯酒拇锌诮拥接?jì)算機(jī)的RS232口、通過現(xiàn)有的Internet、無線網(wǎng)絡(luò)或者其他通信方式很方便地實(shí)現(xiàn)在線以及遠(yuǎn)程升級和維護(hù)。LPC2136的IAP程序位于芯片的Boot Block中,芯片出廠時(shí)由廠家寫入,不可修改。IAP程序是Thumb代碼,位于地址0x7FFFFFFO[1](重映射后地址)處。用戶可通過跳轉(zhuǎn)到該地址來調(diào)用相應(yīng)的IAP函數(shù),具體的調(diào)用方法可見文獻(xiàn)[2]中的相關(guān)章節(jié)。由于IAP代碼是Thumb代碼,要設(shè)置編譯器以支持從ARM指令集到Thumb指令集的轉(zhuǎn)換[3]。對于LPC2136的應(yīng)用編程來說,應(yīng)當(dāng)通過寄存器r0中的字指針指向存儲器(RAM)包含的命令代碼和參數(shù)來調(diào)用IAP程序。IAP命令的結(jié)果返回到寄存器r1所指向的返回表。用戶可通過傳遞寄存器r0和r1中的相同指針重用命令表來得到結(jié)果。參數(shù)表應(yīng)當(dāng)大到足夠保存所有的結(jié)果,以防結(jié)果的數(shù)目大于參數(shù)的數(shù)目。IAP參數(shù)傳遞如圖1所示,參數(shù)和結(jié)果的數(shù)目根據(jù)IAP命令有所不同。參數(shù)的最大數(shù)目為5,由“將RAM內(nèi)容復(fù)制到Flash”命令傳遞。結(jié)果的最大數(shù)目為2,“扇區(qū)查空”命令返回。命令處理程序在接收到一個(gè)未定義的命令時(shí)發(fā)送狀態(tài)代碼INVALID_COMMAND。
2 基于IAP的ARM片內(nèi)Flash的固件升級軟件設(shè)計(jì)
本文基于IAP的ARM片內(nèi)Flash的固件升級設(shè)計(jì),將ARM片內(nèi)Flash劃分為2個(gè)區(qū)域,其中一個(gè)區(qū)域用來正常運(yùn)行固件,另一個(gè)區(qū)域用來升級固件;獲取新版本的固件,存儲在外部存儲器存儲中,以及設(shè)置各用戶固件備份區(qū)的升級標(biāo)志;當(dāng)需要升級時(shí),將需升級的固件更新到用戶代碼分區(qū)2中;同時(shí)系統(tǒng)在升級過程中,執(zhí)行用戶代碼分區(qū)1中的固件,并不需要系統(tǒng)暫停去實(shí)現(xiàn)固件升級,可以在系統(tǒng)運(yùn)行過程中完成固件升級,可以提供連續(xù)的服務(wù),保證升級完成后系統(tǒng)中至少有一套可執(zhí)行的固件,對于升級后的固件的可執(zhí)行性和執(zhí)行結(jié)果能夠進(jìn)行可靠識別。
將ARM片內(nèi)Flash劃分為用戶代碼分區(qū)1和用戶代碼分區(qū)2,其中,用戶代碼分區(qū)1為低地址區(qū)域,用戶代碼分區(qū)2為高地址區(qū)域,例如,對于地址為1000的ARM片內(nèi)Flash,將地址從0至500劃分為戶代碼分區(qū)1,將地址從500至1000劃分為戶代碼分區(qū)2。為了進(jìn)一步確保固件升級數(shù)據(jù)的安全性,防止升級過程出現(xiàn)的意外中斷、傳輸數(shù)據(jù)錯(cuò)誤等情況,進(jìn)行固件升級信息完整性的判斷?;贏RM的固件升級流程,如圖2所示。具體的執(zhí)行操作步驟:(1)系統(tǒng)將ARM片內(nèi)Flash劃分為用戶代碼分區(qū)1和用戶代碼分區(qū)2。(2)將初始固件導(dǎo)入到用戶代碼分區(qū)1,系統(tǒng)執(zhí)行用戶代碼分區(qū)1中的固件。(3)當(dāng)升級ARM固件時(shí),系統(tǒng)獲取新版本的固件,并導(dǎo)入外部存儲器。在外部存儲器中,初始化外部存儲器時(shí),設(shè)置每個(gè)用戶固件備份區(qū)的升級標(biāo)志為不需升級;當(dāng)有新版本的固件時(shí),將新版本的固件存儲在其中一個(gè)用戶固件備份區(qū),并設(shè)置該用戶固件備份區(qū)的升級標(biāo)志為需要升級。(4)系統(tǒng)檢測外部存儲器中的升級標(biāo)志,當(dāng)需要升級時(shí),獲取所需升級固件的長度信息。(5)獲取所需升級固件的校驗(yàn)信息,判斷固件升級信息是否完整,若是,則進(jìn)行步驟(6);若否,則進(jìn)行步驟(7)。(6)將需升級的固件, 從用戶固件備份區(qū)更新到用戶代碼分區(qū)2。(7)繼續(xù)執(zhí)行用戶代碼分區(qū)1的固件。
為了提高系統(tǒng)固件運(yùn)行的安全性,如圖3所示固件升級后系統(tǒng)進(jìn)行重啟動(dòng),裝載程序(Boot Loader)并判斷固件的升級執(zhí)行情況,具體的操作步驟:(1)系統(tǒng)重啟動(dòng)。(2)系統(tǒng)判斷是否需要升級固件;若是,則進(jìn)入步驟(3);若否,則進(jìn)行步驟(4)。(3)按圖1所示的方法進(jìn)行固件升級。(4)判斷用戶代碼分區(qū)2的執(zhí)行成功標(biāo)志是否為真;若否,則進(jìn)行步驟(6);若是,則進(jìn)行步驟(5)。(5)試執(zhí)行用戶代碼分區(qū)2的固件,設(shè)置用戶代碼分區(qū)2的執(zhí)行成功標(biāo)志為假(即清除用戶代碼分區(qū)2執(zhí)行成功標(biāo)識);判斷用戶代碼分區(qū)2的固件執(zhí)行是否成功,若是,則進(jìn)行步驟(7);若否,則進(jìn)行步驟(6)。(6)執(zhí)行用戶代碼分區(qū)1的固件。(7)正式執(zhí)行用戶代碼分區(qū)2的固件,并設(shè)置用戶代碼分區(qū)2的執(zhí)行成功標(biāo)志為真。正式執(zhí)行用戶代碼分區(qū)2的固件,由用戶代碼分區(qū)2的固件負(fù)責(zé)設(shè)置用戶代碼分區(qū)2的執(zhí)行成功標(biāo)志為真。
3 結(jié) 論
根據(jù)上述方法編寫的固件升級程序,能夠穩(wěn)定地接收外部發(fā)來的新程序,并成功燒寫進(jìn)片內(nèi)Flash區(qū),實(shí)現(xiàn)程序的更新;該設(shè)計(jì)可有效處理升級過程意外中斷、數(shù)據(jù)傳輸錯(cuò)誤等異常情況,確保軟件正常運(yùn)行。本文的設(shè)計(jì)以LPC2136為例實(shí)現(xiàn),對于具有IAP功能的其他公司的ARM7芯片的固件程序更新也有借鑒意義。
參考文獻(xiàn):
[1] 恩智浦半導(dǎo)體公司.LPC2131/2/4/6/8用戶手冊RV4.0 [Z].荷蘭:恩智浦半導(dǎo)體公司,2012.
[2] 周立功,張華.深入淺出ARM7—LPC213x/214x(上) [M].北京:北京航空航天大學(xué)出版社,2005.
作者簡介:方彬浩(1978.10-),男,漢族,廣東人,碩士。研究方向:電子設(shè)備嵌入式技術(shù)研究。