基于LPC2124的一個(gè)遠(yuǎn)程系統(tǒng)軟件升級(jí)方案
掃描二維碼
隨時(shí)隨地手機(jī)看文章
關(guān)鍵詞 LPC2124 遠(yuǎn)程IAP軟件升級(jí) GPRS監(jiān)控終端
引 言
用電現(xiàn)場(chǎng)監(jiān)控終端是一種與多功能計(jì)量設(shè)備同步計(jì)量并全方位監(jiān)控用電狀況的智能化設(shè)備,在目前全國(guó)電力緊缺的情況下,起到了削峰填谷,提高電網(wǎng)運(yùn)行效率的作用,尤其適合于對(duì)用電大戶的用電監(jiān)控。
市場(chǎng)的需求和應(yīng)用技術(shù)的成熟往往是矛盾的,用戶總希望盡快用到功能完善、技術(shù)先進(jìn)的產(chǎn)品,但從新技術(shù)到應(yīng)用總有一個(gè)過(guò)程。這個(gè)過(guò)程的長(zhǎng)短最大程度上決定了產(chǎn)品的市場(chǎng)前景,如果要好好把握市場(chǎng),常常不得不一邊開拓市場(chǎng)一邊完善技術(shù)。實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),要做出好的產(chǎn)品,必須與用戶形成互動(dòng)的關(guān)系,利用用戶的反饋信息對(duì)產(chǎn)品不斷完善。另外,產(chǎn)品長(zhǎng)時(shí)間使用后,終端程序設(shè)計(jì)上的缺陷也就慢慢浮出水面,這就要求對(duì)終端系統(tǒng)程序進(jìn)行升級(jí)。如果對(duì)幾百個(gè)終端進(jìn)行現(xiàn)場(chǎng)ISP升級(jí),那么不但浪費(fèi)大量的人力、財(cái)力,更重要的是浪費(fèi)了寶貴的時(shí)間,延誤了開拓市場(chǎng)的機(jī)遇,降低了用戶對(duì)產(chǎn)品的信譽(yù)度。
在Internet飛速發(fā)展的時(shí)代,將終端接入到Internet是解決上述問題的可靠、現(xiàn)實(shí)的方案。本設(shè)計(jì)方案應(yīng)用于用電現(xiàn)場(chǎng)監(jiān)控終端,采用高性能Philips ARM MCULPC2124,結(jié)合GPRS技術(shù)實(shí)現(xiàn)終端系統(tǒng)程序的遠(yuǎn)程升級(jí)。
1 LPC2124芯片簡(jiǎn)介
1.1 功能介紹
LPC2124基于一個(gè)支持實(shí)時(shí)仿真和跟蹤的16/32位ARM7TDMI-SCPU,并帶有236 KB嵌入的高速Flash存儲(chǔ)器和16 KB RAM。對(duì)于內(nèi)嵌Flash存儲(chǔ)器支持JTAG、ISP、IAP等多種編程方式。
LPC2124具有非常小的64腳封裝、極低的功耗、多個(gè)32位定時(shí)器、4路10位ADC、PWM輸出、46個(gè)GPIO以及多達(dá)9個(gè)外部中斷,且內(nèi)置了寬范圍的串行通信接口,使它們特別適用于工業(yè)控制中。因?yàn)橛秒姳O(jiān)控終端對(duì)硬件資源要求高,軟件功能復(fù)雜,實(shí)時(shí)性強(qiáng),所以采用LPC2124可以提高產(chǎn)品的性價(jià)比。
1.2 Flash存儲(chǔ)系統(tǒng)
LPC2124存儲(chǔ)系統(tǒng)包含256 KB的17個(gè)扇區(qū)。Flash存儲(chǔ)器從O地址開始并向上增加,17個(gè)扇區(qū)的大小也不連續(xù)分布,17個(gè)扇區(qū)總?cè)萘繛?48 KB,剩下的8 KB存儲(chǔ)空間為Boot扇區(qū)。Boot扇區(qū)位于Flash存儲(chǔ)系統(tǒng)的頂端部分,地址空間是0x0003 EO00~0x0003FFFF。LPC2124存儲(chǔ)系統(tǒng)的地址分配如圖1所示。
Boot Block占用第17扇區(qū),即Boot扇區(qū)。該扇區(qū)的存儲(chǔ)空間專用來(lái)存放B00t裝載程序,控制復(fù)位后的初始化操作,并提供Flash的編程方法(代碼)。B00t裝載器可啟動(dòng)對(duì)空白片的編程、已編程器件的擦除和再編程以及在運(yùn)行的系統(tǒng)中由應(yīng)用程序對(duì)Flash存儲(chǔ)器進(jìn)行編程。
1.3 Flash存儲(chǔ)系統(tǒng)的編程
LPC2124支持多種方式對(duì)Flash進(jìn)行編程,用來(lái)寫入用戶代碼或數(shù)據(jù)。第一種是通過(guò)內(nèi)置的串行JTAG接口;第二種是通過(guò)UART0進(jìn)行在系統(tǒng)編程(ISP);第三種是通過(guò)在應(yīng)用編程(IAP)實(shí)現(xiàn)。
1.3.1 JTAG編程
LPC2124的JTAG Flash編程可方便下載程序到片內(nèi)Flash,但JTAG接口更主要的是提供硬件系統(tǒng)調(diào)試功能,諸如實(shí)現(xiàn)軟件的斷點(diǎn)、單步。JTAG Flash編程要中斷應(yīng)用軟件的正常運(yùn)行,連線較多,通信距離較短,而且要現(xiàn)場(chǎng)編程,只適應(yīng)于產(chǎn)品在開發(fā)期的調(diào)試使用。
1.3.2 在系統(tǒng)編程
ISP(In-Svstam Programming)技術(shù),即在系統(tǒng)可編程技術(shù),是指電路板上的空白器件可以編程寫入最終用戶代碼,而無(wú)需從電路板上取下器件;已編程的器件也可用ISP方式擦除或再編程。LPC2124支持ISP的Flash編程,但要巾止應(yīng)用軟件的正常運(yùn)行,且需要提供一定的硬件資源+包括UARTO口、RS232驅(qū)動(dòng)和CPU特殊引腳的狀態(tài);編程要求現(xiàn)場(chǎng)操作,非常適用于便攜式智能儀器的升級(jí),但顯然不適用于用電監(jiān)測(cè)終端這類安裝環(huán)境特殊的設(shè)備。ISP編程原理詳見參考文獻(xiàn)。
1.3.3 在應(yīng)用編程
在應(yīng)用編程IAP(In-Application Programming)是應(yīng)用在F1ash程序存儲(chǔ)器的一種編程模式。簡(jiǎn)單地說(shuō)就是在應(yīng)用程序控制下,對(duì)程序某段存儲(chǔ)空間進(jìn)行讀取、擦除或?qū)懭氩僮鳌EcISP操作非常相似。具有在線編程功能,且克服了ISP的不足之處。它可以在應(yīng)用程序正常運(yùn)行的情況下對(duì)另外一段程序Flash進(jìn)行讀/寫操作,甚至可以控制對(duì)某段、某頁(yè)甚至某個(gè)字節(jié)的讀/寫操作。這為數(shù)據(jù)存儲(chǔ)和固件的現(xiàn)場(chǎng)升級(jí)帶來(lái)了極大的靈活性。
2 IAP功能的硬件設(shè)計(jì)
基于LPC2124的以上3種編程方法的分析,IAP實(shí)現(xiàn)對(duì)終端程序升級(jí)自然是最佳選擇方案。下面介紹一種基于GPRS的遠(yuǎn)程IAP系統(tǒng)方案,系統(tǒng)框圖如圖2所示。
AT45DB08081B,8Mb串行Flash存儲(chǔ)器,兼有ROM的掉電數(shù)據(jù)保存和RAM的讀/寫速度,最快支持20MHz的時(shí)鐘頻率,擦寫次數(shù)達(dá)10000次,內(nèi)置2個(gè)264字節(jié)SRAM緩沖器,使得對(duì)主存儲(chǔ)體的編程可以連續(xù)進(jìn)行,省去編程等待時(shí)間。AT45DB081B采用CASON-8封裝,支持2.5~3.6 V低電壓,操作功耗低,支持模式O和3的SPI總線接口,與MCU接口簡(jiǎn)單,穩(wěn)定可靠,非常適用于數(shù)字語(yǔ)音、圖像、程序代碼和數(shù)據(jù)的存儲(chǔ)應(yīng)用中。在本設(shè)計(jì)中采用模式0與LPC2124通信,速度可達(dá)MCU主頻的1/8。
GPRS模塊使用Wavecom公司生產(chǎn)的Q2406B,雙頻GPRS/GSM模塊(EGSM900/1800 MHz或EGSM900/l900 MHz),內(nèi)置TCP/IP,與標(biāo)準(zhǔn)AT指令完全兼容;其設(shè)計(jì)開發(fā)符合ETSI GSM Phase 2+標(biāo)準(zhǔn)。
3 IAP功能的軟件設(shè)計(jì)
3.1 IAP編程接口
LPC2124的IAP程序位于Boot扇區(qū),復(fù)位后整個(gè)Bool扇區(qū)被映射到存儲(chǔ)地址Ox7FFFFE000~Ox7FFFFFFF處;而IAP的入口地址為0x7FFFFFFFo,程序?yàn)門humb代碼。IAP編程命令使用RAM的最高端32字節(jié),所以應(yīng)用程序應(yīng)保留這部分RAM。在使用IAP擦除/編程操作過(guò)程中,片內(nèi)Flash存儲(chǔ)器不可訪問。當(dāng)用戶應(yīng)用程序運(yùn)行時(shí),用戶F1ash區(qū)域的中斷向量有效,所以在調(diào)用Flash擦除/寫IAP之前,用戶應(yīng)當(dāng)禁止中斷或確保用戶中斷向量在:RAM中有效和中斷處理程序位于RAM中。IAP代碼不使用或禁止中斷。
3.2 IAP編程C語(yǔ)言實(shí)現(xiàn)
對(duì)于在應(yīng)用編程,LPC2124是通過(guò)寄存器R0中的字指針指向存儲(chǔ)器(RAM)包含的命令代碼和參數(shù)來(lái)調(diào)用IAP程序。IAP命令的結(jié)果返回到寄存器R1所指向的存儲(chǔ)器(RAM)。
調(diào)用LPC2124的IAP可使用如下C語(yǔ)言代碼:
◆定義IAP程序入口地址
#definc lAP_LOCATl0N Ox7FFFFFFFl
◆定義數(shù)據(jù)結(jié)構(gòu)來(lái)傳遞IAP命令表和結(jié)果給IAP程序
unslgned long Command[5];
unsigncd long Result[2];
◆定義函數(shù)類型指針,函數(shù)包括兩個(gè)參數(shù),無(wú)返回值
typcdef void(*IAP)(unsigned int[],unsigncdim int[]);
IAP iap_entry; //定義函數(shù)指針
◆設(shè)置函數(shù)指針
iap_entry=(IAP)IAP_LOCATION;
◆使用下面的語(yǔ)句來(lái)調(diào)用IAP
iap_entry(command,result);
本系統(tǒng)是基于LPC2124工程模板進(jìn)行移植的,在ADSl.2嵌入式軟件開發(fā)平臺(tái)上,用C語(yǔ)言直接調(diào)用IAP程序代碼實(shí)現(xiàn)IAP編程。IAP的命令碼、狀態(tài)碼和命令詳解以及IAP功能的詳細(xì)應(yīng)用見參考文獻(xiàn)。
4 遠(yuǎn)程升級(jí)在用電現(xiàn)場(chǎng)監(jiān)控終端的應(yīng)用
終端軟件系統(tǒng)的設(shè)計(jì)包括用戶引導(dǎo)程序設(shè)計(jì)(與Boot裝載程序有區(qū)別,前者由用戶設(shè)計(jì),后者由芯片生產(chǎn)商設(shè)計(jì)并固化)和應(yīng)用程序的設(shè)計(jì)。它們?cè)贚PC2124中的入口地址不同,終端復(fù)位后,如果未進(jìn)入ISP編程狀態(tài),則首先執(zhí)行用戶引導(dǎo)程序,由用戶引導(dǎo)程序決定執(zhí)行IAP升級(jí)還是正常運(yùn)行;應(yīng)用程序?qū)崿F(xiàn)終端的各種功能,包括新版本應(yīng)用程序升級(jí)包的下載。
4.1 終端用戶引導(dǎo)程序設(shè)計(jì)
終端用戶引導(dǎo)程序是基于文件系統(tǒng)的思想來(lái)設(shè)計(jì)的。終端的應(yīng)用程序代碼存放在LPC2124的Flash存儲(chǔ)器中,終端正常運(yùn)行時(shí),MCU不停地從Flash中讀取指令。如果對(duì)應(yīng)用程序升級(jí),即對(duì)應(yīng)用程序占用的Flash存儲(chǔ)器扇區(qū)進(jìn)行擦除和再編程,顯然執(zhí)行Flash編程的代碼占用的Flash扇區(qū)不能被擦除,那么升級(jí)程序的代碼只能用單獨(dú)的扇區(qū)存放,升級(jí)程序的執(zhí)行可由應(yīng)用程序調(diào)用,也可作為單獨(dú)的程序執(zhí)行。由于LPC2124的IAP代碼采用16位Thumb指令集,執(zhí)行IAP的過(guò)程中應(yīng)禁止或者關(guān)閉中斷。如果將升級(jí)程序采用應(yīng)用程序調(diào)用的方式來(lái)設(shè)計(jì),會(huì)增加應(yīng)用程序設(shè)計(jì)的復(fù)雜性,升級(jí)的可靠性較差。LPC2124復(fù)位后,由于Boot程序總是從Flash的0地址讀取指令,所以升級(jí)程序代碼放在起始扇區(qū)內(nèi),設(shè)計(jì)為用戶引導(dǎo)程序的一部分,而用戶引導(dǎo)程序總是不被修改的。如果升級(jí)過(guò)程失敗,MCU復(fù)位后應(yīng)用程序可以重新升級(jí),增強(qiáng)了升級(jí)的可靠性。
終端用戶引導(dǎo)程序在系統(tǒng)上電后執(zhí)行。首先它檢查應(yīng)用程序升級(jí)標(biāo)志和版本號(hào)。當(dāng)檢查到升級(jí)標(biāo)志置位且出現(xiàn)新版本號(hào)時(shí),從AT45DB081B中讀取應(yīng)用程序升級(jí)包,然后執(zhí)行LPC2124的Flash編程動(dòng)作,實(shí)現(xiàn)對(duì)應(yīng)用程序的升級(jí)。升級(jí)任務(wù)完成后,清除升級(jí)標(biāo)志和更新應(yīng)用程序版本,最后轉(zhuǎn)移到應(yīng)用程序入口并執(zhí)行應(yīng)用程序代碼。引導(dǎo)過(guò)程流程如圖3所示。
4.2 終端應(yīng)用程序設(shè)計(jì)
終端應(yīng)用程序負(fù)責(zé)完成終端的數(shù)據(jù)采集、更新、掃描,并上報(bào)告警事件,控制現(xiàn)場(chǎng)執(zhí)行機(jī)構(gòu),執(zhí)行前置機(jī)的遠(yuǎn)程命令及保存各種歷史數(shù)據(jù)等。前置機(jī)的遠(yuǎn)程命令包括讀/寫終端命令、中繼命令和遠(yuǎn)程升級(jí)命令。當(dāng)終端接收到前置機(jī)的遠(yuǎn)程升級(jí)命令后,終端分析升級(jí)命令幀,讀取升級(jí)包信息,包括包總長(zhǎng)度、包校驗(yàn)碼、幀序號(hào)和幀校驗(yàn)碼,然后應(yīng)答前置機(jī)并請(qǐng)求發(fā)送后繼數(shù)據(jù)幀,終端對(duì)后繼數(shù)據(jù)幀進(jìn)行校驗(yàn),校驗(yàn)正確則應(yīng)答成功和接收下一幀數(shù)據(jù),否則應(yīng)答失敗并要求終端重發(fā)。連續(xù)5次重發(fā)失敗,則認(rèn)為網(wǎng)絡(luò)通信質(zhì)量差而取消當(dāng)前升級(jí)操作,保存成功接收到的幀號(hào)和數(shù)據(jù)校驗(yàn)和以備續(xù)傳。應(yīng)用程序升級(jí)包按幀的方式通過(guò)GPRS Modem,由前置機(jī)下載到終端,并保存到終端的AT45DB081B Flash存儲(chǔ)器。下載成功后,置位升級(jí)標(biāo)志和記錄升級(jí)包版本號(hào),以備用戶引導(dǎo)程序升級(jí)。
升級(jí)包的下載過(guò)程可看成是數(shù)據(jù)的傳輸過(guò)程,應(yīng)用程序可同步實(shí)現(xiàn)終端的其他各種功能,不影響終端的正常運(yùn)行。應(yīng)用程序升級(jí)包下載成功后,終端進(jìn)行必要的現(xiàn)場(chǎng)保存并主動(dòng)復(fù)位,從而執(zhí)行用戶引導(dǎo)程序升級(jí)的最后一步——Flash編程。另外,也可在終端里配置升級(jí)時(shí)間,避開終端任務(wù)重負(fù)荷階段,使得升級(jí)過(guò)程對(duì)終端正常工作的影響降低到最小。
應(yīng)用程序升級(jí)包的下載流程如圖4所示。
4.3 通信協(xié)議的設(shè)計(jì)
GPRS與Internet連接建立后,進(jìn)入數(shù)據(jù)透明傳輸階段。本系統(tǒng)在完善的TCP/IP機(jī)制基礎(chǔ)上設(shè)計(jì)用戶應(yīng)用層協(xié)議。為實(shí)現(xiàn)系統(tǒng)某個(gè)終端的系統(tǒng)軟件升級(jí),前置機(jī)將要升級(jí)的程序代碼轉(zhuǎn)化為寫終端升級(jí)代碼幀,接入Internet到GPRS網(wǎng)絡(luò),透明傳輸下載到目標(biāo)終端。根據(jù)江西省用電現(xiàn)場(chǎng)服務(wù)與管理系統(tǒng)通信規(guī)約,將寫終端升級(jí)代碼幀分為3種:前置機(jī)升級(jí)請(qǐng)求幀、升級(jí)代碼數(shù)據(jù)幀和終端回應(yīng)幀。幀格式在參考文獻(xiàn)中有詳細(xì)說(shuō)明。
5 遠(yuǎn)程IAP應(yīng)用的可靠性探討
終端應(yīng)用程序的升級(jí)過(guò)程不免要受到環(huán)境的干擾,如終端掉電、異常的終端復(fù)位和網(wǎng)絡(luò)通信阻塞等故障,都會(huì)導(dǎo)致終端遠(yuǎn)程IAP的失敗,因此必須提供一套可靠的軟硬件機(jī)制來(lái)保證終端IAP過(guò)程的正常工作。以下是本系統(tǒng)中采取的措施:
◆終端掉電及異常復(fù)位處理。由于終端的停電及電網(wǎng)波動(dòng)等干擾引起的終端復(fù)位,都將中止終端的升級(jí)過(guò)程,導(dǎo)致升級(jí)失敗。本系統(tǒng)采用下載和IAP過(guò)程完全分離的升級(jí)方式。IAP位于用戶引導(dǎo)程序部分,不被擦除。AT45DB08lB中總是備份最新版本終端應(yīng)用程序,所以任何階段操作失敗都能保證終端的正常工作。另外,在終端配備蓄電池和充電電路,在終端主電源來(lái)電時(shí)對(duì)蓄電池充電,使得終端掉電時(shí)也可正常運(yùn)行,遠(yuǎn)程IAP過(guò)程更為可靠。
◆遠(yuǎn)程通信的誤碼處理。對(duì)數(shù)據(jù)傳輸過(guò)程產(chǎn)生的誤碼,通用的、有效的解決辦法,就是用CRC循環(huán)冗余校驗(yàn)和重傳機(jī)制。數(shù)據(jù)校驗(yàn)碼校驗(yàn)正確后存入AT45DB081B,錯(cuò)誤時(shí)返回錯(cuò)誤編碼發(fā)和幀序號(hào)請(qǐng)求重發(fā),直到檢測(cè)到結(jié)束幀。結(jié)束幀數(shù)據(jù)長(zhǎng)度不夠,用00填充。
◆網(wǎng)絡(luò)阻塞、故障處理。由于地形和環(huán)境因素的影響,GPRS網(wǎng)絡(luò)在遠(yuǎn)程IAP的通信過(guò)程中可能出現(xiàn)阻塞或斷開的情況。這時(shí)終端和前置機(jī)對(duì)無(wú)回應(yīng)幀采用延時(shí)重發(fā)的機(jī)制,連續(xù)5次不成功則斷開GPRS網(wǎng)并重新連接,終端保存升級(jí)的下載斷點(diǎn)信息,以待網(wǎng)絡(luò)恢復(fù)后繼續(xù)傳數(shù)據(jù)。
結(jié)語(yǔ)
該設(shè)計(jì)方案基本解決了本系統(tǒng)的遠(yuǎn)程代碼升級(jí)的問題,增強(qiáng)了系統(tǒng)軟件維護(hù)的方便性,縮短了新產(chǎn)品的上市時(shí)間,也為用戶提供了更安全、快捷的服務(wù)。用GPRS網(wǎng)絡(luò)作為傳輸通道,為接入Internet困難的偏遠(yuǎn)地區(qū)的現(xiàn)場(chǎng)用電監(jiān)控終端的遠(yuǎn)程維護(hù),提出了一種全新的、可靠的設(shè)計(jì)方案。