文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2013)04-0029-03
設(shè)備的運(yùn)行維護(hù)在嵌入式系統(tǒng)生命周期中占有絕大部分時(shí)間,因此研究一種能使現(xiàn)場(chǎng)工程師方便快捷地升級(jí)軟件而又絕不破壞設(shè)備可用性的技術(shù)方案是十分必要的。隨著物流網(wǎng)及相關(guān)領(lǐng)域的技術(shù)發(fā)展,RFID技術(shù)已經(jīng)得到廣泛應(yīng)用[1]。
本文針對(duì)應(yīng)用高頻RFID技術(shù)的嵌入式設(shè)備設(shè)計(jì)了一種基于IAP技術(shù)的運(yùn)行時(shí)軟件升級(jí)方案,利用高頻大容量RFID對(duì)系統(tǒng)進(jìn)行軟件升級(jí)。軟件架構(gòu)上設(shè)計(jì)引導(dǎo)程序、應(yīng)用程序、升級(jí)程序。該方案確保系統(tǒng)無(wú)論升級(jí)是否成功都可以維持正常工作。
該技術(shù)在基于IAP11F62X單片機(jī)和FM1702SL非接觸卡讀寫控制器的水控器硬件平臺(tái),以及基于STM32F-
103RC單片機(jī)和FM1701非接觸卡讀寫控制器的加油機(jī)控制板硬件平臺(tái)上進(jìn)行驗(yàn)證。投入批量運(yùn)行兩年多來(lái),極大降低了現(xiàn)場(chǎng)維護(hù)成本。
本文首先介紹基于高頻RFID系統(tǒng)的IAP方案軟件架構(gòu)、引導(dǎo)程序設(shè)計(jì)及應(yīng)用程序設(shè)計(jì),然后在硬件平臺(tái)上進(jìn)行了驗(yàn)證。
1 IAP方案設(shè)計(jì)
為了不破壞設(shè)備的可用性,又可以便捷地對(duì)系統(tǒng)進(jìn)行升級(jí),方案設(shè)計(jì)時(shí)將軟件系統(tǒng)劃分為引導(dǎo)程序、應(yīng)用程序、升級(jí)程序、用戶數(shù)據(jù)和IAP參數(shù)區(qū),如圖1所示。
引導(dǎo)程序負(fù)責(zé)檢查應(yīng)用程序和升級(jí)程序的數(shù)據(jù)完整性,決定是否升級(jí)軟件或者恢復(fù)舊版本軟件,最后運(yùn)行應(yīng)用程序。應(yīng)用程序和升級(jí)程序都是當(dāng)前設(shè)備的應(yīng)用軟件,兩者僅版本不同:一個(gè)為當(dāng)前版本,一個(gè)為待升級(jí)版本。在應(yīng)用程序和升級(jí)程序中包含IAP功能,從RFID中讀取升級(jí)數(shù)據(jù)寫入相應(yīng)升級(jí)程序區(qū)域。
1.1 引導(dǎo)程序設(shè)計(jì)
設(shè)備上電或復(fù)位時(shí)首先運(yùn)行引導(dǎo)程序,工作時(shí)不依賴任何外部功能。程序進(jìn)行硬件自檢,設(shè)置中斷向量,檢查應(yīng)用程序和升級(jí)程序的數(shù)據(jù)完整性,并根據(jù)IAP參數(shù)的設(shè)置決定是需要升級(jí)程序還是回滾恢復(fù)舊版本應(yīng)用程序,再判斷升級(jí)過程是否被中斷并決定是否繼續(xù)升級(jí)。引導(dǎo)程序流程如圖2(a)所示。
為了確保系統(tǒng)可用型,升級(jí)過程中先要備份當(dāng)前版本應(yīng)用程序,通過一個(gè)緩存頁(yè)面,升級(jí)程序和應(yīng)用程序按Flash頁(yè)塊進(jìn)行交換,復(fù)制次序如圖2(b)所示,確保升級(jí)過程既不破壞原有版本程序代碼,也不丟失新版本程序。
根據(jù)Flash按頁(yè)擦除、字節(jié)寫入的特性,在IAP參數(shù)區(qū),用8 B共64 bit代表64個(gè)頁(yè)面,初始化時(shí)為0xff,完成一頁(yè)則依次清除一位,這種寫模式下不需要擦除頁(yè)面即可記錄升級(jí)進(jìn)度。一旦升級(jí)過程發(fā)生斷電等意外,開機(jī)重啟后可以檢測(cè)到升級(jí)斷點(diǎn),繼續(xù)升級(jí)。
如果升級(jí)后應(yīng)用程序功能不穩(wěn)定,還可以在應(yīng)用程序中通過管理卡設(shè)置,回滾恢復(fù)到原來(lái)版本。這個(gè)過程和升級(jí)新版本軟件過程一樣,只是不需要讀取升級(jí)卡,僅需通過管理卡設(shè)置回滾標(biāo)志,通知引導(dǎo)程序“升級(jí)”(恢復(fù))到原來(lái)版本應(yīng)用程序。
1.2 應(yīng)用程序設(shè)計(jì)
應(yīng)用程序完成所需設(shè)備功能后,還需要實(shí)現(xiàn)讀取升級(jí)卡寫入升級(jí)程序區(qū),或者通過管理卡設(shè)置回滾標(biāo)志,在應(yīng)用程序的卡處理過程中增加升級(jí)卡處理,應(yīng)用程序流程如圖3(a)所示。
在應(yīng)用程序檢測(cè)到有卡時(shí),執(zhí)行卡事件處理流程中,如圖3(b)所示,識(shí)別卡的類型如果是消費(fèi)卡或管理卡,則進(jìn)入相應(yīng)功能處理。管理卡與程序版本相關(guān)的只有版本選擇參數(shù),置位時(shí)寫入IAP參數(shù)區(qū),由引導(dǎo)程序交換應(yīng)用程序和升級(jí)程序,主要用于升級(jí)后的版本回退。
識(shí)別到升級(jí)卡時(shí),讀取升級(jí)卡格式數(shù)據(jù)塊。如果當(dāng)前已經(jīng)讀取過升級(jí)卡并寫過升級(jí)程序區(qū),則升級(jí)卡版本信息必須與已經(jīng)寫入的升級(jí)卡版本一致才能繼續(xù)讀入。確認(rèn)校驗(yàn)數(shù)據(jù)完整性后,根據(jù)數(shù)據(jù)地址信息寫入升級(jí)程序區(qū),否則提示拒絕該卡,確保升級(jí)卡版本一致。如果尚未讀取過升級(jí)卡,則先讀取并判斷升級(jí)卡版本。如果與應(yīng)用程序或升級(jí)程序版本重復(fù),則提示已經(jīng)升級(jí);如果為新版本軟件,則需要先擦除升級(jí)程序區(qū)Flash,再根據(jù)升級(jí)卡頭信息寫入升級(jí)程序區(qū)。如果本套升級(jí)卡已經(jīng)全部讀取并寫入升級(jí)程序區(qū),則更新IAP參數(shù),軟件復(fù)位跳轉(zhuǎn)到引導(dǎo)程序。
2 IAP硬件平臺(tái)設(shè)計(jì)
目前支持IAP的51單片機(jī)有STC的IAP11F系列以及新茂、新唐(華邦)和SST等很多型號(hào),而基于ARM的單片機(jī)基本都支持IAP功能,這里以兩種典型應(yīng)用為例介紹IAP系統(tǒng)設(shè)計(jì)。
2.1 51單片機(jī)系統(tǒng)
水控器是應(yīng)用于飲用水或浴室等用水管理的設(shè)備,通過控制電磁閥管理出水,通過定時(shí)器計(jì)時(shí)收費(fèi),通過脈沖式流量傳感器計(jì)量收費(fèi),或者通過RTC時(shí)鐘包時(shí)收費(fèi)。
系統(tǒng)采用STC公司的IAP11F60X單片機(jī),具有62 KB程序空間,引導(dǎo)程序占1 KB,應(yīng)用程序和升級(jí)程序各占28 KB,IAP參數(shù)占1 KB(2頁(yè)),其余為用戶數(shù)據(jù)區(qū)[2]。
射頻模塊為FM1702SL,單片機(jī)通過模擬SPI與之連接,可以讀取ISO14442A標(biāo)準(zhǔn)系列非接觸卡。具體功能模塊見圖4。
在項(xiàng)目設(shè)置中需要設(shè)置應(yīng)用程序起始地址,例如在本系統(tǒng)中起始地址設(shè)為0x0400,此外需要特別處理中斷向量。51單片機(jī)的中斷向量為固定地址,此時(shí)中斷向量都在引導(dǎo)程序中,而中斷服務(wù)函數(shù)均在應(yīng)用程序中,因此需要在引導(dǎo)程序中設(shè)置中斷跳轉(zhuǎn)到應(yīng)用程序中,舉例如下:
;-----定時(shí)中斷0----------------
ORG 000BH
LJMP AP_ADDR+0BH
;-----定時(shí)中斷1----------------
ORG 001BH
LJMP AP_ADDR+1BH
;-----------------------------
AP_ADDR 定義為應(yīng)用程序起始地址,而在應(yīng)用程序中依然通過以下語(yǔ)法實(shí)現(xiàn)中斷函數(shù):
void timer0_ISR(void) interrupt 1 using 1
void timer1_ISR(void) interrupt 3 using 1
使用IAP11F62X單片機(jī),在處理完升級(jí)卡后可以通過給IAP_CONTR賦值0x20強(qiáng)制軟件復(fù)位跳轉(zhuǎn)到引導(dǎo)程序,引導(dǎo)程序完成升級(jí)。然后通過LJMP AP_ADDR 指令跳轉(zhuǎn)到應(yīng)用程序,完成IAP過程并繼續(xù)運(yùn)行。
2.2 STM32單片機(jī)系統(tǒng)IAP
某型非接觸卡加油機(jī)控制板采用STM32F103RC處理器,具有256 KB Flash,讀卡電路采用性價(jià)比更高的FM1701,由軟件實(shí)現(xiàn)FM1208 CPU卡的加密認(rèn)證讀取,通過車號(hào)識(shí)別模塊識(shí)別車輛,并可以通過串口攝像模塊拍照,與加油記錄一起保存在大容量串口Flash中,其結(jié)構(gòu)框圖如圖5所示。
STM32位處理器IAP功能與51單片機(jī)系統(tǒng)大體相似,需要設(shè)置程序起始位置,引導(dǎo)程序必須設(shè)置為Flash基地址(0x08000000),而應(yīng)用程序地址則是0x0800-2000。不同之處在于STM32的中斷向量表可以通過NVIC_Set-VectorTable函數(shù)設(shè)置到0x08002000,而不必通過引導(dǎo)程序跳轉(zhuǎn)[3]。此外,STM32F103RC具有48 KB SRAM,可以讀入升級(jí)卡全部數(shù)據(jù),校驗(yàn)正確后寫入Flash。
引導(dǎo)程序完成升級(jí)程序代碼復(fù)制交換后,通過絕對(duì)地址跳轉(zhuǎn)語(yǔ)句即可跳轉(zhuǎn)到指定地址的應(yīng)用程序執(zhí)行。應(yīng)用程序也通過相同語(yǔ)句跳轉(zhuǎn)到引導(dǎo)程序執(zhí)行,僅地址不同。
3 主機(jī)寫升級(jí)卡軟件
主機(jī)寫卡軟件讀取HEX格式或者BIN格式程序文件,按IC卡容量分割后寫入升級(jí)卡。由于RFID卡數(shù)據(jù)容量有限,升級(jí)程序可能需要寫入多張升級(jí)卡。
規(guī)劃卡數(shù)據(jù)的存放時(shí),必須考慮升級(jí)時(shí)的卡類型識(shí)別以及版本控制、數(shù)據(jù)完整性等,因此需要設(shè)計(jì)格式頭,如圖6所示。
識(shí)別碼用于確認(rèn)該卡為本設(shè)備所用;類型碼用于判定識(shí)別卡類型屬于消費(fèi)卡、管理卡或升級(jí)卡;版本為本卡內(nèi)應(yīng)用程序版本號(hào);起始地址和數(shù)據(jù)長(zhǎng)度為卡內(nèi)數(shù)據(jù)在升級(jí)程序空間內(nèi)的起始地址和數(shù)據(jù)字節(jié)數(shù);卡數(shù)說(shuō)明升級(jí)程序共包含多少?gòu)埧?;卡序則是說(shuō)明當(dāng)前卡為第幾張卡;數(shù)據(jù)校驗(yàn)用于驗(yàn)證卡內(nèi)數(shù)據(jù)的完整性。主機(jī)寫卡軟件根據(jù)應(yīng)用程序大小計(jì)算所需升級(jí)卡數(shù)量,并依次寫入升級(jí)卡格式以及數(shù)據(jù)[4]。
4 功能驗(yàn)證
該升級(jí)方案應(yīng)用于某型非接觸卡水控器,采用4 KB數(shù)據(jù)容量的FM11F32卡作為升級(jí)介質(zhì),單片機(jī)為IAP11F62X。一套升級(jí)卡一直控制在7張卡以內(nèi)。某型非接觸卡加油機(jī)控制板也采用這一方案,采用8 KB數(shù)據(jù)容量的FM1208 CPU卡作為升級(jí)介質(zhì),單片機(jī)為STM32-
F103RC。由于加油站現(xiàn)場(chǎng)環(huán)境限制,這種升級(jí)方式更易于接受[5]。
在設(shè)備運(yùn)行的近2年時(shí)間時(shí),由于修復(fù)BUG、調(diào)整功能等需求,設(shè)備進(jìn)行了十多次升級(jí),正因?yàn)椴捎眠@種方式,沒有給用戶和維護(hù)人員帶來(lái)額外負(fù)擔(dān)。
本設(shè)計(jì)采用大容量RFID卡作為升級(jí)介質(zhì),無(wú)須下載線,更不必拆開設(shè)備,就可以進(jìn)行現(xiàn)場(chǎng)升級(jí),極大降低了維護(hù)難度。雖然由于目前非接觸卡存儲(chǔ)容量有限,可能需要多張IC卡才能完成升級(jí),但由于設(shè)備讀卡速度快,整個(gè)軟件升級(jí)過程也不過兩三分鐘時(shí)間。實(shí)際應(yīng)用證明,這種升級(jí)方式無(wú)論用戶還是現(xiàn)場(chǎng)維護(hù)人員都易于接受,具有較高的應(yīng)用價(jià)值。
參考文獻(xiàn)
[1] 王愛英.智能卡技術(shù)[M].北京:清華大學(xué)出版社,2009.
[2] 丁向榮.STC系列增強(qiáng)型8051單片機(jī)原理與應(yīng)用[M].北京:電子工業(yè)出版社,2011.
[3] 李寧.基于MDK的STM32處理器開發(fā)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2008.
[4] 鄭群星.RFID原理[M].臺(tái)北:全華圖書股份有限公司,2011.
[5] 王幸之.單片機(jī)應(yīng)用系統(tǒng)電磁干擾與抗干擾技術(shù)[M].北京:北京航空航天大學(xué)出版社,2006.