文獻(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)無論升級(jí)是否成功都可以維持正常工作,。
該技術(shù)在基于IAP11F62X單片機(jī)和FM1702SL非接觸卡讀寫控制器的水控器硬件平臺(tái),以及基于STM32F-
103RC單片機(jī)和FM1701非接觸卡讀寫控制器的加油機(jī)控制板硬件平臺(tái)上進(jìn)行驗(yàn)證,。投入批量運(yùn)行兩年多來,,極大降低了現(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è)緩存頁面,,升級(jí)程序和應(yīng)用程序按Flash頁塊進(jìn)行交換,,復(fù)制次序如圖2(b)所示,確保升級(jí)過程既不破壞原有版本程序代碼,,也不丟失新版本程序,。
根據(jù)Flash按頁擦除、字節(jié)寫入的特性,,在IAP參數(shù)區(qū),,用8 B共64 bit代表64個(gè)頁面,初始化時(shí)為0xff,,完成一頁則依次清除一位,,這種寫模式下不需要擦除頁面即可記錄升級(jí)進(jìn)度。一旦升級(jí)過程發(fā)生斷電等意外,,開機(jī)重啟后可以檢測(cè)到升級(jí)斷點(diǎn),,繼續(xù)升級(jí)。
如果升級(jí)后應(yīng)用程序功能不穩(wěn)定,,還可以在應(yīng)用程序中通過管理卡設(shè)置,,回滾恢復(fù)到原來版本。這個(gè)過程和升級(jí)新版本軟件過程一樣,,只是不需要讀取升級(jí)卡,,僅需通過管理卡設(shè)置回滾標(biāo)志,通知引導(dǎo)程序“升級(jí)”(恢復(fù))到原來版本應(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頁),,其余為用戶數(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)用程序中依然通過以下語法實(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)語句即可跳轉(zhuǎn)到指定地址的應(yīng)用程序執(zhí)行,。應(yīng)用程序也通過相同語句跳轉(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ù)說明升級(jí)程序共包含多少張卡,;卡序則是說明當(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ù)人員帶來額外負(fù)擔(dān)。
本設(shè)計(jì)采用大容量RFID卡作為升級(jí)介質(zhì),,無須下載線,,更不必拆開設(shè)備,就可以進(jìn)行現(xiàn)場(chǎng)升級(jí),,極大降低了維護(hù)難度,。雖然由于目前非接觸卡存儲(chǔ)容量有限,可能需要多張IC卡才能完成升級(jí),,但由于設(shè)備讀卡速度快,,整個(gè)軟件升級(jí)過程也不過兩三分鐘時(shí)間,。實(shí)際應(yīng)用證明,這種升級(jí)方式無論用戶還是現(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.