基于PIC單片機(jī)的應(yīng)用程序升級方法
0 引言
dsPIC33F系列單片機(jī)是美國微芯公司(Microchip)推出的一款高性能單片機(jī),它將數(shù)字信號處理器(Digital Signal Processor,DSP)的高速運(yùn)算能力與單片機(jī)的控制特性無縫地集成在一起,為嵌入式系統(tǒng)設(shè)計提供了高性價比的單芯片、單指令流的解決方案,在音頻處理、視頻處理及工業(yè)控制等方面得到了廣泛應(yīng)用。但是在實際應(yīng)用中,由于客戶需求變化或程序BUG修改等原因,經(jīng)常出現(xiàn)需要使單片機(jī)應(yīng)用程序升級的情況,本文利用dsPIC33F單片機(jī)運(yùn)行時的自編程(Run-Time Serf-Programming,RTSP)特性,實現(xiàn)了基于該單片機(jī)應(yīng)用程序的升級功能。
1 基本原理
dsPIC33F系列單片機(jī)提供了兩種方式用于對其內(nèi)部程序存儲器進(jìn)行編程:在線串行編程(In-Circuit Serial Programming,ICSP)和運(yùn)行時自編程(Run-TimeSelf-Programming,RTSP)。ICSP使用5根線對單片機(jī)編程,主要用于產(chǎn)品調(diào)試或生產(chǎn)過程中,顯然不適合用于產(chǎn)品運(yùn)行時的程序升級。RTSP是通過使用TBLRD(表讀)和TBLWT(表寫)指令來完成的,使用RTSP可以一次將64條指令(192 B)的塊(或“行”)或單個程序存儲字寫入程序存儲器,也可以一次擦除512條指令(1 536 B)的塊(或“頁”),由于該方法采用程序指令實現(xiàn)了自編程,可應(yīng)用于產(chǎn)品運(yùn)行時的程序升級,因此本文采用RTSP方法實現(xiàn)基于dsPIC33F系列單片機(jī)的應(yīng)用程序升級功能。程序升級的實質(zhì)是對程序存儲器內(nèi)容的更新,所以有必要先了解一下dsPIC33F單片機(jī)的程序存儲器內(nèi)部結(jié)構(gòu)。
1.1 dsPIC33F單片機(jī)的程序存儲器內(nèi)部結(jié)構(gòu)
dsPIC33F單片機(jī)的程序存儲器結(jié)構(gòu)如圖1所示。一般情況下,“復(fù)位地址”的內(nèi)容為全0,單片機(jī)復(fù)位后均從程序存儲器地址0的位置上開始執(zhí)行,即從圖1中的“GOTO指令”位置開始執(zhí)行。在這里存放了一個跳轉(zhuǎn)指令,直接指向用戶程序的首址,默認(rèn)情況下該位置的指令為“GOTO 0x200”,即默認(rèn)跳轉(zhuǎn)到首址為0x200的用戶程序(圖1中的“用戶程序存儲空間”)開始執(zhí)行。dsPIC33F單片機(jī)具有2個中斷向量表,即“中斷向量表”和“備用中斷向量表”,地址分別從0x000004~0x0000FF和0x000100~0x0001FF這兩個中斷向量表允許使用不同的中斷服務(wù)程序來處理每個中斷源。程序升級功能正是基于程序存儲器內(nèi)部結(jié)構(gòu)的以上特性而實現(xiàn)。
1.2 程序升級功能的實現(xiàn)流程
將圖1中的“用戶程序存儲空間”分為引導(dǎo)程序和應(yīng)用程序2部分,如圖2(a)所示。引導(dǎo)程序用于引導(dǎo)用戶程序是進(jìn)入升級狀態(tài),還是進(jìn)入正常運(yùn)行狀態(tài),若進(jìn)入升級狀態(tài)則接收新的程序數(shù)據(jù),并更新程序存儲器的內(nèi)容;若進(jìn)入正常運(yùn)行狀態(tài)則程序跳轉(zhuǎn)到應(yīng)用程序區(qū)。應(yīng)用程序是為了實現(xiàn)產(chǎn)品功能而編寫的程序,也就是本文所謂“程序升級”的對象。
評論