基于PIC單片機的應用程序升級方法
(1)啟用“備用中斷向量表”。設置INTCON2寄存器中ALTIVT控制位的值,其值設置為“1”則啟用“備用中斷向量表”;設置為“0”則啟用“中斷向量表”。
(2)程序首址的設置。在以上流程的說(shuō)明中談到引導程序的首址為0x400,而應用程序的首址為0xc800,則設置程序的首址可通過(guò)修改鏈接描述文件(.gld文件)實(shí)現。以dsPIC33FJ256GP710單片機為例,將引導程序首址改為0x400,其實(shí)現步驟為:打開(kāi)p33FJ256GP710.gld文件,將其中的“program(xr):ORIGIN=0x200,LENGTH=0x2AA00”改為“pro-gram(xr) :ORIGIN=0x400,LENGTH=0x2A900”;將“_ _CODE_ BASE=0x200”改為“_ _CODE_BASE=0x400”。應用程序首址的修改也采用相同方法。
(3)讀/寫(xiě)程序存儲器。在參考文獻中有很完整的原理說(shuō)明,也有完整的源代碼,可直接使用。
(4)軟件復位CPU。在應用程序運行過(guò)程中發(fā)現需升級程序或在引導程序中升級程序完畢時(shí),均需對CPU進(jìn)行軟件復位,這可通過(guò)dsPIC33F單片機提供的“reset”指令實(shí)現,可在程序相應位置執行“reset”指令即可。
3 實(shí)際應用中若干問(wèn)題的探討
3.1 程序升級正確性問(wèn)題
上文僅重點(diǎn)說(shuō)明了程序升級的方法,未對程序升級的正確性展開(kāi)討論,但在實(shí)際應用中,由于傳輸干擾的存在,接收的新程序數據可能出錯,這時(shí)如果沒(méi)有相應的應對措施,顯然會(huì )影響到產(chǎn)品的正常運行。為了保證程序升級的正確性,常用的應對措施有以下幾種:
(1)對每幀數據進(jìn)行嚴格的校驗(如CRC校驗),校驗通過(guò)后再更新相應的程序存儲區;更新程序存儲區后,重新讀出程序存儲區數據,并與接收到的數據進(jìn)行比較。只有當數據比較無(wú)誤后才開(kāi)始接收下一幀數據。
(2)若不考慮硬件成本,也可外置一個(gè)數據存儲器,將所有新程序數據完全接收并校驗通過(guò)后才統一更新程序存儲器,最后把整個(gè)程序存儲器的數據與接收到的數據逐一比對,若比對無(wú)誤則升級結束。
(3)若應用程序占用空間不大,也可將程序存儲器中應用程序區再分為兩部分。程序升級時(shí)輪流覆蓋這兩部分,這種操作方式使程序存儲器同時(shí)保存舊版本和新版本兩個(gè)應用程序,當新版本程序因某種原因運行不正常時(shí),可由引導程序將應用程序切換到舊版本。
第(1)種方法最容易實(shí)現,但是應用程序只有在整個(gè)升級過(guò)程完全結束后才可以正常運行,若升級過(guò)程因某種原因通信中斷,則應用程序一直無(wú)法運行,這是該方法最大的缺陷。
第(2)種方法也很容易實(shí)現,而且由于它是在新程序數據全部接收后才開(kāi)始升級,因此克服了第(1)種方法的缺陷,但是該方法需增加硬件成本,且要占用單片機更多的硬件資源(用于與外部存儲器之間的交互)。
第(3)種方法也可以克服第(1)種方法的缺陷,而且不需增加硬件成本,但是該方法的實(shí)現顯然比前兩種方法復雜得多。以上3種方法各有優(yōu)缺點(diǎn),在實(shí)際應用中可根據實(shí)際情況選擇。
3.2 斷點(diǎn)續傳問(wèn)題
在實(shí)際應用中,可能因某種原因(如斷電復位)而需重新開(kāi)始程序升級,這時(shí)如果還是從第1幀數據開(kāi)始傳輸,則會(huì )造成時(shí)間上的浪費,而且對于一些以流量計費的通信網(wǎng)絡(luò )(如GPRS)還會(huì )造成通信費用的浪費,因此在實(shí)際應用中有必要實(shí)現“斷點(diǎn)續傳”功能。這可通過(guò)模仿FTP斷點(diǎn)續傳原理來(lái)實(shí)現,即單片機每正確接收并存儲一幀數據則刷新存儲于外部非易失性存儲器(如EEPROM)中的升級信息(含當前幀號),若重新開(kāi)始程序升級,則將當前升級信息發(fā)給服務(wù)器,服務(wù)器可從“斷點(diǎn)”開(kāi)始發(fā)送數據,從而實(shí)現了“斷點(diǎn)續傳”功能。
4 結語(yǔ)
基于dsPIC33F系列單片機的應用程序升級方法已在開(kāi)發(fā)設計的IPPhone和安防系統等產(chǎn)品中成功應用,且運行穩定可靠。雖然本文討論的程序升級方法是基于dsPIC33F系列單片機,但其基本原理同樣適用于其他具備運行時(shí)自編程或有應用編程(In Appplication Program,IAP)功能的單片機中。
評論