一種基于單片機的醫用滅菌器控制系統設計
1 軟件無(wú)線(xiàn)升級系統方案
本文引用地址:http://dyxdggzs.com/article/201611/340338.htm基于無(wú)線(xiàn)通信的遠程監控系統(如遠程電網(wǎng)質(zhì)量監控系統、水情測報系統和城市路燈監控系統等)應用越來(lái)越廣泛,而在實(shí)際使用過(guò)程中,由于需求的變化,經(jīng)常要對其終端設備軟件進(jìn)行修改或升級。一般情況下,無(wú)線(xiàn)監控系統與終端距離較遠,終端分散且工作環(huán)境較差。如果維護人員到現場(chǎng)進(jìn)行軟件升級,不但維護費用很高,而且還可能使終端設備長(cháng)時(shí)間不能正常工作。
為解決這一難題,本文提出一種利用ST公司的STR710FZ2T6作為終端微控制器,融合IAP(In Application Programming,在應用編程)技術(shù)和GPRS無(wú)線(xiàn)網(wǎng)絡(luò )通信技術(shù)的軟件升級系統方案。軟件無(wú)線(xiàn)升級系統整體框圖如圖1所示。

圖1 軟件無(wú)線(xiàn)升級系統整體框圖
2 系統硬件和軟件設計
2.1 硬件設計
本文選用的是ST公司的一款工業(yè)級微控制器STR710FZ2T6。它是基于A(yíng)RM7TDMI的32位RISC CPU,擁有豐富的外設和增強的I/O功能,并提供高達33 MHz的直接存取速度以及50 MHz零等待狀態(tài)的序列閃存;具有(256 KB+16 KB) Flash 和64 KB SRAM,內部Flash可重復擦寫(xiě)10萬(wàn)次,數據保持20年,支持自編程;外部存儲器接口(EMI)可支持4個(gè)SRAM、Flash、ROM等存儲類(lèi)型;芯片有多種boot方式。另外,STR710FZ2T6能夠通過(guò)運行在Flash中的程序來(lái)對自身的Flash進(jìn)行更新。這個(gè)功能使其能夠通過(guò)CAN、UART、USB、無(wú)線(xiàn)通信等接口將程序下載到自身的Flash中。
系統結構如圖2所示。根據微控制器STR710FZ2T6的特點(diǎn)以及無(wú)線(xiàn)監控終端的功能要求,硬件設計包括由電源電路、復位電路、JTAG接口電路、晶振電路組成的芯片工作最小系統,以及在最小系統上擴展的串行接口模塊、外存儲器模塊、數據顯示模塊、數據采集模塊和SIM300 GSM/GPRS通信模塊。其中,擴展的外存儲器包括SST公司的具有16位數據寬度的Flash存儲器SST39VF1601和ISSI公司的SRAM存儲器IS61LV25616AL。

圖2 軟件無(wú)線(xiàn)升級系統結構框圖
2.2 終端軟件設計
系統終端軟件的設計包括終端引導程序設計和終端應用程序的設計。引導程序和應用程序在STR710FZ2T6中所存放的位置不同。將啟動(dòng)模式配置為從片內Flash引導之后,系統終端微控制器將復位,啟動(dòng)之后先執行引導程序。引導程序在執行過(guò)程中決定是否啟動(dòng)IAP升級程序;應用程序實(shí)現終端的各種功能,如命令和數據的接收、發(fā)送,以及新版本應用程序升級包的下載。
2.2.1 終端引導程序設計
系統設計時(shí),終端引導程序通過(guò)JTAG接口燒寫(xiě)到STR710FZ2T6的Flash扇區起始位置(0x40000000)處。整個(gè)引導程序占用Flash的前兩個(gè)扇區,通過(guò)啟動(dòng)模式的選擇,將這塊Flash映射到0x00000000,保證系統上電后自動(dòng)運行引導程序。終端重新啟動(dòng)時(shí),STR710FZ2T6從0x40000000地址開(kāi)始讀取指令并執行。
經(jīng)過(guò)實(shí)驗證明:將IAP升級程序存放在用戶(hù)引導部分是非常合理的,能夠避免由于應用程序升級失敗而造成的系統崩潰。由于終端引導程序在產(chǎn)品出廠(chǎng)前固化,若Flash編程失敗,微控制器將重新啟動(dòng),IAP程序利用存儲器SST39VF1601中保存的最新版本的應用程序,重新對Flash進(jìn)行編程。由于引導程序有多次編程Flash扇區的能力,系統應用程序代碼的完整性以及應用程序升級的可靠性才得以保證。引導程序流程如圖3所示。

圖3 終端引導程序流程
終端引導程序的主要函數說(shuō)明:
?、?nbsp;main()主函數。用于初始化UART接口,PLL設定等,根據升級標志和新版本號判斷是否繼續執行IAP。若升級標志置位,且新版本號大于當前的版本號,則啟動(dòng)IAP升級程序,否則運行終端應用程序。
int __main(void)
?、?nbsp;對片內Flash進(jìn)行初始化操作。
void FLASH_Init(void)
?、?nbsp;從第二扇區算起,計算代碼需要的扇區數。
u32 FLASH_SectorMask(vu32 Size)
?、?nbsp;將新代碼需要的扇區去掉寫(xiě)保護,為扇區擦除做準備。
void FLASH_WritePrConfig(u32 Xsectors,FunctionalState NewState)
?、?nbsp;將新代碼需要的扇區進(jìn)行擦除,為寫(xiě)做準備。
void FLASH_SectorErase(u32 Xsectors)
?、?nbsp;將新代碼寫(xiě)入Flash扇區中。
void FLASH_WordWrite(u32 XtargetAdd,u32 Xdata)
2.2.2 終端應用程序設計
終端應用程序設定的起始地址是STR710Z2T6的0x40004000處,并可占用之后的整個(gè)Flash空間。終端應用程序不但完成日常各項工作任務(wù),而且還負責接收監控中心服務(wù)器發(fā)送的應用程序升級命令。當收到升級命令后,終端回應服務(wù)器此時(shí)若接收升級代碼,則應用程序將升級包按照幀的方式通過(guò)GPRS模塊從服務(wù)器下載到終端,通過(guò)校驗后保存到終端外部Flash存儲器SST39VF1601中,下載成功后置位升級標志和記錄升級包版本號以備引導程序升級。由于升級包的下載過(guò)程可看成是數據傳輸過(guò)程,應用程序可在下載升級包的同時(shí)進(jìn)行其他任務(wù),且不影響終端的正常工作。當終端應用程序下載完升級包之后,應用程序對必要的現場(chǎng)進(jìn)行保存然后主動(dòng)復位,微控制器啟動(dòng)之后直接執行引導程序,并進(jìn)行Flash編程。由于很多系統終端日常任務(wù)繁多,可通過(guò)程序中相應的設置,使新代碼下載和Flash編程盡量選擇在終端可能空閑的時(shí)間段,從而盡可能地減少升級應用程序對終端正常工作的影響。
3 通信協(xié)議的設計
參照通信規約和已存在的無(wú)線(xiàn)配電監控系統的協(xié)議,本文定義了3種類(lèi)型的協(xié)議幀:服務(wù)器請求升級幀、升級代碼數據幀和終端回應幀。
協(xié)議幀公共數據段:

通信幀部分數據段說(shuō)明:
?、?nbsp;數據長(cháng)度。表示數據域的字節數(由2字節構成),為0時(shí)表示無(wú)數據,其值為此數據段到校驗和之前的數據字節數之和。
?、?nbsp;升級軟件版本號。無(wú)線(xiàn)監控系統終端收到升級請求幀之后,將此數據段和其本身的軟件版本進(jìn)行比較。如果版本號小于將要升級的軟件版本,終端將回應服務(wù)器同意升級,否則放棄升級。
?、?nbsp;升級文件長(cháng)度。用來(lái)判斷存儲空間夠不夠存放將要升級的文件,以及升級代碼是否傳輸完畢[4]。
4 終端編程注意事項
(1) 編程代碼大小。IAP編程是用戶(hù)的IAP代碼對片內Flash存儲器進(jìn)行擦除/編程的過(guò)程。由于片內Flash存儲空間的限制以及代碼存儲空間的限定,編程時(shí)不但需要控制IAP自身代碼量的大小,而且還要控制終端應用程序代碼的大小,絕對不能夠超出所指定的存儲范圍。
(2) 提高遠程升級速度的措施。為了提高系統遠程升級的速度,在代碼傳輸過(guò)程本文采取3種措施:
?、?nbsp;數據壓縮。數據壓縮是解決由于數據大而導致整個(gè)下載過(guò)程時(shí)間長(cháng)問(wèn)題的最有效的辦法,本系統中服務(wù)器將升級代碼進(jìn)行壓縮,終端設備接收到之后進(jìn)行解壓、存儲。由于應用程序的代碼滿(mǎn)足ARM指令集的特征,所以壓縮效率較高。
?、?nbsp;應用程序分塊加載。在日常系統維護中,無(wú)論對系統進(jìn)行升級或是修改程序中的“bug”,其實(shí)修改的只是程序中的一小部分,而大部分程序還保持原樣。因此,合理的方法是只把修改的代碼,而不是把整個(gè)二進(jìn)制文件下載到遠程終端。具體的實(shí)現辦法是,建立分散文件,在其中按功能將應用程序劃分為多個(gè)裝載區,并為每個(gè)裝載區留有足夠大的空間,為以后的升級、修改做準備。這種做法大大減小了數據傳輸量,提高了軟件升級速度。
?、?nbsp;小數據塊傳輸。由于系統采用錯誤重傳機制,根據實(shí)際應用經(jīng)驗,數據塊越大出現錯誤的機率就越大;同時(shí),由于數據塊大,傳輸一幀的速率較低,雖然接收到的數據幀較大,但由于錯誤的機率和傳輸的速率,反而造成效率低下。采用小數據塊傳輸,雖然一幀數據塊小,但彌補了上述不足。
(3) 遠程通信的誤碼處理。程序代碼傳輸過(guò)程中,終端校驗數據正確后存入SST39VF1601,檢驗錯誤時(shí)向服務(wù)器返回錯誤的編碼和幀序號并請求重發(fā),直到檢測到結束幀為止。服務(wù)器發(fā)送最后一幀時(shí),如果該幀的數據長(cháng)度不夠,用00填充直到滿(mǎn)足協(xié)議中規定的長(cháng)度。對于數據傳輸過(guò)程中產(chǎn)生的誤碼,系統采用最有效的解決辦法是CRC循環(huán)冗余效驗和重傳機制。
(4) 相同的存儲區,不同的運行區域。由于需要對Flash進(jìn)行編程,但是對Flash操作的代碼不能在Flash本身運行,因此這部分代碼必須在內部RAM中運行??梢酝ㄟ^(guò)分散加載文件設置函數的運行空間。
(5) 用戶(hù)中斷。在系統中IAP程序燒寫(xiě)在從0x00000000開(kāi)始的兩個(gè)Flash扇區內,而用戶(hù)程序則是存儲在從0x40004000開(kāi)始的Flash空間中。如果用戶(hù)程序產(chǎn)生中斷,那么內核會(huì )讀取到IAP的向量表,導致程序跑飛。解決辦法是,在跳轉到用戶(hù)程序之前,IAP程序把用戶(hù)程序的向量表拷貝到片內RAM中,然后將RAM重映射到0x00000000地址,最后進(jìn)行跳轉,這樣就可以保證0x00000000地址有用戶(hù)程序的向量表。
由于RAM的起始地址用來(lái)存放用戶(hù)程序的中斷向表,往其中寫(xiě)入數據時(shí),需保證這些向量表不被覆蓋,故IAP程序、用戶(hù)程序的RW base使用的是0x20000100[5]。
結語(yǔ)
本文利用ARM微控制器和GPRS模塊,提出了一種解決無(wú)線(xiàn)監控系統終端軟件升級和維護困難問(wèn)題的方案。相信在未來(lái)通信方式更加先進(jìn)、微控制器性能更加優(yōu)越的基礎上,軟件無(wú)線(xiàn)升級技術(shù)的應用會(huì )越來(lái)越廣泛。
評論