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