《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于dsPIC33F系列單片機的應用程序升級方法
基于dsPIC33F系列單片機的應用程序升級方法
現代電子技術
徐藝文
摘要: 為了適應客戶需求變化或程序BUG的修改,利用dsPIC33F單片機運行時的自編程特性,實現了基于該單片機的應用程序升級功能。在詳細描述基本原理的基礎上,給出了引導程序的實現流程圖,并提供實現流程中一些關鍵細節的實現方法,最后對實際應用中的升級正確性及繼點續傳問題進行了探討。該方法的實現原理同樣適用于其他具備運行時自編程或有應用編程功能的單片機中。
Abstract:
Key words :

0 引言
    dsPIC33F系列單片機是美國微芯公司(Microchip)推出的一款高性能單片機,它將數字信號處理器(Digital Signal Processor,DSP)的高速運算能力與單片機的控制特性無縫地集成在一起,為嵌入式系統設計提供了高性價比的單芯片、單指令流的解決方案,在音頻處理、視頻處理及工業控制等方面得到了廣泛應用。但是在實際應用中,由于客戶需求變化或程序BUG修改等原因,經常出現需要使單片機應用程序升級的情況,本文利用dsPIC33F單片機運行時的自編程(Run-Time Serf-Programming,RTSP)特性,實現了基于該單片機應用程序的升級功能。

1 基本原理
   
dsPIC33F系列單片機提供了兩種方式用于對其內部程序存儲器進行編程:在線串行編程(In-Circuit Serial Programming,ICSP)和運行時自編程(Run-TimeSelf-Programming,RTSP)。ICSP使用5根線對單片機編程,主要用于產品調試或生產過程中,顯然不適合用于產品運行時的程序升級。RTSP是通過使用TBLRD(表讀)和TBLWT(表寫)指令來完成的,使用RTSP可以一次將64條指令(192 B)的塊(或“行”)或單個程序存儲字寫入程序存儲器,也可以一次擦除512條指令(1 536 B)的塊(或“頁”),由于該方法采用程序指令實現了自編程,可應用于產品運行時的程序升級,因此本文采用RTSP方法實現基于dsPIC33F系列單片機的應用程序升級功能。程序升級的實質是對程序存儲器內容的更新,所以有必要先了解一下dsPIC33F單片機的程序存儲器內部結構。
1.1 dsPIC33F單片機的程序存儲器內部結構
   
dsPIC33F單片機的程序存儲器結構如圖1所示。一般情況下,“復位地址”的內容為全0,單片機復位后均從程序存儲器地址0的位置上開始執行,即從圖1中的“GOTO指令”位置開始執行。在這里存放了一個跳轉指令,直接指向用戶程序的首址,默認情況下該位置的指令為“GOTO 0x200”,即默認跳轉到首址為0x200的用戶程序(圖1中的“用戶程序存儲空間”)開始執行。dsPIC33F單片機具有2個中斷向量表,即“中斷向量表”和“備用中斷向量表”,地址分別從0x000004~0x0000FF和0x000100~0x0001FF這兩個中斷向量表允許使用不同的中斷服務程序來處理每個中斷源。程序升級功能正是基于程序存儲器內部結構的以上特性而實現。


1.2 程序升級功能的實現流程
   
將圖1中的“用戶程序存儲空間”分為引導程序和應用程序2部分,如圖2(a)所示。引導程序用于引導用戶程序是進入升級狀態,還是進入正常運行狀態,若進入升級狀態則接收新的程序數據,并更新程序存儲器的內容;若進入正常運行狀態則程序跳轉到應用程序區。應用程序是為了實現產品功能而編寫的程序,也就是本文所謂“程序升級”的對象。
    實際應用中,將外部非易失性存儲器(如E2PROM)的某些存儲單元值當作是否進行程序升級的標志(以下簡稱程序升級標志)。單片機上電或復位后首先執行“GOTO0x400”指令,即跳轉到引導程序。默認情況下程序升級標志是處于“正常運行”狀態下的,引導程序調用跳轉指令將用戶程序引導到應用程序區,若運行過程中發現服務器有新的應用程序版本或接收到服務器發來的升級程序命令時,單片機將程序升級標志設置為“程序升級”狀態,然后軟件復位單片機。這時程序再次跳轉到引導程序,根據程序升級標志,單片機進入程序升級狀態,接收新的程序,并更新程序存儲器的內容,升級完成后,單片機將程序升級標志設置為“正常運行”狀態,然后再次軟件復位,此時單片機運行于新的應用程序中。
    由于引導程序和應用程序都可能用到中斷,因此應用程序采用中斷向量表,引導程序采用備用中斷向量表,以執行各自相應的中斷服務子程序。值得注意的是,在圖2(a)中引導程序的首址為0x000400,這是因為dsPIC33F單片機執行一次擦除指令會擦除512條指令空間(即1“ 塊”,占用1 024個地址單元),這意味著程序升級必須以1 024(即0x400)為單位。同理,應用程序的首址必須為0x400的整數倍,本文采用0x00C800。
    從以上基本原理的分析可看出,程序升級功能的實現主要就是引導程序的實現。

2 引導程序的實現
2.1 程序流程
   
進入引導程序后,程序的執行流程如下:
    (1)初始化電路板,包括單片機的工作頻率、外圍接口等,尤其要注意啟用單片機的“備用中斷向量表”。因為dsPIC33F單片機復位后默認啟用“中斷向量表”,而由基本原理的說明可看出,引導程序必須采用“備用中斷向量表”。
    (2)判斷程序走向,通過程序升級標志判斷是跳轉到應用程序,還是執行程序升級流程。
    (3)若程序升級標志為“正常運行”,則調用GOTO指令跳轉到應用程序。
    (4)若程序升級標志為“程序升級”,則執行程序升級流程,這是引導程序的重點。
    程序升級按“塊”更新,每“塊”包含1 024個存儲單元(以字為單位),即每幀數據需包含2 048個字節的程序代碼。在更新程序時并不是簡單地用接收到的新程序代碼覆蓋舊程序,對于一些特殊幀需特殊處理,通過對比應用程序編譯后的程序存儲器結構與實際應用中的程序存儲器結構可以很好地理解這點。圖2(a)所示為實際應用中的程序存儲器內部結構;(b)為應用程序編譯后的程序存儲器結構。通過對比這兩張圖可以看出,“GOTO指令”、“備用中斷向量表”、“引導程序”這些區間的程序不能直接覆蓋,若“GOTO指令”被覆蓋,則程序升級后程序直接跳轉到應用程序,不會執行引導程序;若“備用中斷向量表”被覆蓋,則引導程序中的中斷服務程序無法執行;若“引導程序”區間的內容被覆蓋,則引導程序被清空,顯然會帶來災難性的后果。因此對于第1幀數據需特別處理,該幀數據對應程序存儲器第1塊(地址為0~0x3FF)的內容,包含“GOTO指令”、“復位地址”、“中斷向量表”和“備用中斷向量表”的內容,為了保證"GOTO指令”和“備用中斷向量表”的內容不被修改,需要先讀出原“GOTO指令”和“備用中斷向量表”的內容,替代接收數據緩沖區中對應位置的內容,然后寫入程序存儲區的第1塊;對于第2幀到第50幀(0xe800/0x400),這些是引導程序的內容,顯然不能做任何修改,因此這幾幀數據接收后直接丟棄;從第51幀到最后一幀,這是應用程序的內容,也是真正要升級的內容,所以可直接覆蓋舊內容。程序升級后,將程序更新標志恢復為“正常運行”狀態,然后復位CPU,則經引導程序又進入了新的應用程序,從而實現了應用程序的升級。
    基于以上說明可得引導程序的詳細流程如圖3所示。


2.2 關鍵細節的實現
   
(1)啟用“備用中斷向量表”。設置INTCON2寄存器中ALTIVT控制位的值,其值設置為“1”則啟用“備用中斷向量表”;設置為“0”則啟用“中斷向量表”。
    (2)程序首址的設置。在以上流程的說明中談到引導程序的首址為0x400,而應用程序的首址為0xc800,則設置程序的首址可通過修改鏈接描述文件(.gld文件)實現。以dsPIC33FJ256GP710單片機為例,將引導程序首址改為0x400,其實現步驟為:打開p33FJ256GP710.gld文件,將其中的“program(xr):ORIGIN=0x200,LENGTH=0x2AA00”改為“pro-gram(xr) :ORIGIN=0x400,LENGTH=0x2A900”;將“_ _CODE_ BASE=0x200”改為“_ _CODE_BASE=0x400”。應用程序首址的修改也采用相同方法。
    (3)讀/寫程序存儲器。在參考文獻中有很完整的原理說明,也有完整的源代碼,可直接使用。
    (4)軟件復位CPU。在應用程序運行過程中發現需升級程序或在引導程序中升級程序完畢時,均需對CPU進行軟件復位,這可通過dsPIC33F單片機提供的“reset”指令實現,可在程序相應位置執行“reset”指令即可。

3 實際應用中若干問題的探討
3.1 程序升級正確性問題
   
上文僅重點說明了程序升級的方法,未對程序升級的正確性展開討論,但在實際應用中,由于傳輸干擾的存在,接收的新程序數據可能出錯,這時如果沒有相應的應對措施,顯然會影響到產品的正常運行。為了保證程序升級的正確性,常用的應對措施有以下幾種:
    (1)對每幀數據進行嚴格的校驗(如CRC校驗),校驗通過后再更新相應的程序存儲區;更新程序存儲區后,重新讀出程序存儲區數據,并與接收到的數據進行比較。只有當數據比較無誤后才開始接收下一幀數據。
    (2)若不考慮硬件成本,也可外置一個數據存儲器,將所有新程序數據完全接收并校驗通過后才統一更新程序存儲器,最后把整個程序存儲器的數據與接收到的數據逐一比對,若比對無誤則升級結束。
    (3)若應用程序占用空間不大,也可將程序存儲器中應用程序區再分為兩部分。程序升級時輪流覆蓋這兩部分,這種操作方式使程序存儲器同時保存舊版本和新版本兩個應用程序,當新版本程序因某種原因運行不正常時,可由引導程序將應用程序切換到舊版本。
    第(1)種方法最容易實現,但是應用程序只有在整個升級過程完全結束后才可以正常運行,若升級過程因某種原因通信中斷,則應用程序一直無法運行,這是該方法最大的缺陷。
    第(2)種方法也很容易實現,而且由于它是在新程序數據全部接收后才開始升級,因此克服了第(1)種方法的缺陷,但是該方法需增加硬件成本,且要占用單片機更多的硬件資源(用于與外部存儲器之間的交互)。
    第(3)種方法也可以克服第(1)種方法的缺陷,而且不需增加硬件成本,但是該方法的實現顯然比前兩種方法復雜得多。以上3種方法各有優缺點,在實際應用中可根據實際情況選擇。
3.2 斷點續傳問題
   
在實際應用中,可能因某種原因(如斷電復位)而需重新開始程序升級,這時如果還是從第1幀數據開始傳輸,則會造成時間上的浪費,而且對于一些以流量計費的通信網絡(如GPRS)還會造成通信費用的浪費,因此在實際應用中有必要實現“斷點續傳”功能。這可通過模仿FTP斷點續傳原理來實現,即單片機每正確接收并存儲一幀數據則刷新存儲于外部非易失性存儲器(如EEPROM)中的升級信息(含當前幀號),若重新開始程序升級,則將當前升級信息發給服務器,服務器可從“斷點”開始發送數據,從而實現了“斷點續傳”功能。

4 結語
   
基于dsPIC33F系列單片機的應用程序升級方法已在開發設計的IPPhone和安防系統等產品中成功應用,且運行穩定可靠。雖然本文討論的程序升級方法是基于dsPIC33F系列單片機,但其基本原理同樣適用于其他具備運行時自編程或有應用編程(In Appplication Program,IAP)功能的單片機中。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美激情一二三区| 亚洲一区二区三区四区视频| 亚洲大胆在线| 亚洲免费在线看| 久久久久久97三级| 午夜宅男欧美| 女女同性女同一区二区三区91| 欧美日韩亚洲网| 亚洲国产天堂久久综合网| 国产伦精品一区二区三区视频孕妇| 一区福利视频| 99热免费精品| 亚洲国产网站| 欧美一区二区视频观看视频| 一本色道久久精品| 欧美日韩一区成人| 久久一区二区视频| 小黄鸭精品密入口导航| 久久狠狠一本精品综合网| 久久夜色精品亚洲噜噜国产mv| 在线观看欧美日本| 99国产精品99久久久久久粉嫩| 亚洲午夜激情免费视频| 一区二区三区免费看| 欧美精品久久天天躁| 亚洲一区二区精品| 国产精品视频专区| 欧美日韩一二三区| 欧美精选午夜久久久乱码6080| 欧美精品一卡| 午夜在线视频一区二区区别| 亚洲毛片在线观看.| 国产精品毛片在线看| 亚洲视频视频在线| 国产欧美日韩亚洲精品| 99精品视频免费在线观看| 亚洲一区二区av电影| 欧美制服丝袜第一页| 亚洲综合视频网| 亚洲国产精品久久久久久女王| 亚洲黄页视频免费观看| 嫩草影视亚洲| 国产精品一区二区在线观看网站| 久久久国产精彩视频美女艺术照福利| 136国产福利精品导航| 亚洲欧美日韩国产一区二区| 久热re这里精品视频在线6| 麻豆精品网站| 亚洲第一网站免费视频| 欧美日韩在线视频一区二区| 国产精品每日更新| 午夜久久美女| 欧美在线视频免费| 欧美深夜影院| 久久精品观看| 欧美日韩高清不卡| 蜜月aⅴ免费一区二区三区| 一本一本久久a久久精品牛牛影视| 亚洲国产va精品久久久不卡综合| 久久欧美肥婆一二区| 国产精品99久久久久久www| 国产久一道中文一区| 亚洲视频 欧洲视频| 国产女精品视频网站免费| 久久精品一区蜜桃臀影院| 欧美激情一区二区三区全黄| 欧美在线视频日韩| 亚洲午夜极品| 欧美日韩一级片在线观看| 欧美www在线| 亚洲六月丁香色婷婷综合久久| 亚洲精品久久久久久久久| 欧美日韩网址| 亚洲国产精品国自产拍av秋霞| 99re在线精品| 亚洲午夜电影| 在线观看日韩av| 久久嫩草精品久久久精品| 国产精品永久| 136国产福利精品导航| 亚洲国产高潮在线观看| 亚洲精品美女久久7777777| 欧美一区久久| 性欧美精品高清| 国产精品www色诱视频| 欧美吻胸吃奶大尺度电影| 国产欧美综合一区二区三区| 国产精品免费网站在线观看| 欧美理论大片| 女人香蕉久久**毛片精品| 久久久久久精| 亚洲伊人久久综合| 国产精品视频福利| 亚洲精品国产品国语在线app| 欧美日韩精品久久久| 久久夜色精品国产| 国产精品国产三级国产普通话蜜臀| 亚洲综合激情| 欧美一区二区三区另类| 久久精品亚洲一区二区| 国产资源精品在线观看| 久久精品一本久久99精品| 在线成人h网| 亚洲国产欧美日韩| 国产精品入口夜色视频大尺度| 亚洲电影免费在线| 久久久久久久尹人综合网亚洲| 亚洲另类在线视频| 欧美一区二区三区精品| 欧美一区二区高清| 亚洲福利视频一区二区| 亚洲精品日韩一| 国产精品久久国产精品99gif| 毛片一区二区三区| 国产目拍亚洲精品99久久精品| 欧美黄色影院| 欧美成人激情视频| 1024成人网色www| 国产一区二区三区在线观看视频| 国产亚洲一区二区在线观看| 欧美日本一道本在线视频| 噜噜噜噜噜久久久久久91| 欧美精品在线视频| 伊人久久成人| 欧美日韩在线精品一区二区三区| 欧美一二三区在线观看| 欧美3dxxxxhd| 激情91久久| 狠狠色丁香久久婷婷综合丁香| 亚洲精选国产| 亚洲国产三级网| 99精品欧美| 欧美精品久久一区二区| 欧美四级电影网站| 亚洲中午字幕| 久久久久久亚洲精品不卡4k岛国| 一本久久综合亚洲鲁鲁五月天| 久久久午夜精品| 久久人人爽爽爽人久久久| 99在线热播精品免费99热| 国产精品久久久一区麻豆最新章节| 欧美日韩dvd在线观看| 久久精品国产v日韩v亚洲| 欧美激情中文字幕在线| 亚洲视频1区| 国产亚洲欧美日韩精品| 一色屋精品视频免费看| 欧美女同在线视频| 欧美日韩人人澡狠狠躁视频| 亚洲成人资源| 亚洲视频在线观看网站| 国产一区二区三区四区五区美女| 在线亚洲+欧美+日本专区| 欧美一区二区在线| 国产精品美女一区二区| 欧美视频在线免费| 国内外成人在线视频| 欧美在线免费观看亚洲| 亚洲一区二区影院| 亚洲精品国产精品国自产在线| 欧美aⅴ99久久黑人专区| 国内偷自视频区视频综合| 亚洲欧美另类综合偷拍| 久久精品国亚洲| 欧美激情a∨在线视频播放| 午夜视频在线观看一区| 一区二区三区日韩精品| 午夜免费电影一区在线观看| 午夜久久tv| 欧美人与禽猛交乱配| 欧美精品午夜| 国产亚洲一区二区三区在线播放| 99国产精品99久久久久久| 久久久久久久久久久久久女国产乱| 国产精品五区| 亚洲精品视频一区二区三区| 激情五月***国产精品| 在线视频你懂得一区二区三区| 亚洲午夜精品视频| 亚洲精品婷婷| 国内成人精品一区| 99国产精品久久久久久久久久| 欧美国产极速在线| 国产精品你懂的在线欣赏| 一本色道久久综合亚洲精品高清| 久久久久久尹人网香蕉| 国产精品一区二区三区久久| 久久久久88色偷偷免费| 国产精品视频免费观看| 国产欧美日韩麻豆91| 欧美精品一区二区精品网| 亚洲图片自拍偷拍| 亚洲电影在线免费观看| 久久久噜噜噜| 99re这里只有精品6| 久久精品在线视频| 亚洲三级观看| 国产精品三上| 午夜精品一区二区三区在线| 欧美电影在线观看| 欧美视频网站| 在线亚洲一区观看| 一本色道久久综合精品竹菊| 国产欧美视频在线观看| 99综合在线| 国产一区自拍视频| 亚洲人成艺术| 亚洲美女福利视频网站| 亚洲一区区二区| 久久www成人_看片免费不卡| 久久国产高清| 亚洲欧美另类综合偷拍| 亚洲国产综合91精品麻豆| 国产一区视频观看| 亚洲精品免费在线| 亚洲午夜电影| 禁断一区二区三区在线| 亚洲天堂av综合网| 亚洲精品韩国| 欧美午夜久久久| 国产精品v亚洲精品v日韩精品| 一本色道久久99精品综合| 亚洲美女福利视频网站| 久久精品成人一区二区三区蜜臀| 欧美日韩亚洲一区三区| 亚洲你懂的在线视频| 午夜日韩福利| 99re6这里只有精品| 激情综合色综合久久| 国产精品一区二区三区观看| 夜夜嗨av一区二区三区中文字幕| 亚洲人成精品久久久久| 亚洲综合色自拍一区| 亚洲视频在线观看网站| 亚洲欧美激情视频在线观看一区二区三区| 久久久久在线观看| 免费在线观看一区二区| 国产精品国产三级国产专播精品人| 免费高清在线一区| 亚洲天堂激情| 欧美日韩一区二区三区高清| 亚洲美女视频| 欧美福利视频在线观看| 亚洲欧洲日夜超级视频| 久久国产99| 亚洲视频大全| 亚洲深爱激情| 亚洲乱码视频| 亚洲一级免费视频| 一区二区三区鲁丝不卡| aa日韩免费精品视频一| 欧美专区福利在线| 在线精品视频在线观看高清| 欧美激情精品久久久久久蜜臀| 99这里只有久久精品视频| 午夜日韩电影| 亚洲视频网站在线观看| 亚洲欧美大片| 国产精品对白刺激久久久| 久久精品视频在线播放| 欧美美女视频| 午夜精品美女久久久久av福利| 精东粉嫩av免费一区二区三区| 激情av一区二区| 久久综合亚洲社区| 国产一区二区三区高清在线观看| 国产精品电影网站| 亚洲视频在线观看| 国产精品对白刺激久久久| 亚洲视频1区2区| 欧美在线观看视频一区二区三区| 欧美精品亚洲精品| 99在线|亚洲一区二区| 国产精品久久久久久亚洲调教| 国产日韩精品电影| 免费看的黄色欧美网站| 国产日韩欧美在线视频观看| 欧美视频二区36p| 欧美在线一二三| 亚洲精品影院| 欧美制服丝袜第一页| 欧美日韩一区二区在线播放| 欧美日韩一区二区视频在线观看| 欧美第十八页| 国产精品自拍视频| 欧美国产亚洲精品久久久8v| 亚洲精选一区| 久久午夜色播影院免费高清| 国产视频久久久久| 在线不卡a资源高清| 午夜精品99久久免费| 久久精品日韩欧美| 国产精品成人观看视频国产奇米| 欧美特黄一级| 国产精品美女在线观看| 99成人精品| 国产毛片精品国产一区二区三区| 亚洲高清成人| 久久av一区二区三区漫画| 欧美亚洲免费在线| 欧美韩日高清| 亚洲欧美怡红院| 国产精品毛片在线| 亚洲美女黄色| 夜夜嗨av一区二区三区免费区| 中日韩美女免费视频网址在线观看| 午夜欧美视频| 亚洲欧洲在线观看| 亚洲第一免费播放区| 欧美大片在线观看一区二区| 日韩亚洲在线| 欧美成人按摩| 久久精品视频在线| 欧美三区免费完整视频在线观看| 日韩一级黄色大片| 久久久久国产精品一区| 欧美专区在线观看| 国产精品久久精品日日| 亚洲影视九九影院在线观看| 免费在线欧美视频| 国产伦精品一区二区三区| 国产精品欧美日韩| 国产区欧美区日韩区| 国产无遮挡一区二区三区毛片日本| 国产欧美日韩另类视频免费观看| 亚洲三级性片| 在线一区免费观看| 老司机精品久久|