<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 8031+PSD813實現(xiàn)在線編程

          8031+PSD813實現(xiàn)在線編程

          作者: 時間:2012-01-30 來源:網(wǎng)絡(luò) 收藏

          引言

            “在應(yīng)用可再編程”(In-Application reProgrammable,簡稱IAP)通常稱為“在線編程”,已經(jīng)不是陌生的概念了。要實現(xiàn)嵌入式微控制器/處理器系統(tǒng)的IAP功能,就意味著可以用主機(PC機或服務(wù)器)通過通信通道把固件(程序代碼)下載到應(yīng)用系統(tǒng)的存儲器中去。具有了IAP功能的電子產(chǎn)品有諸多益處:縮短開發(fā)進程,搶先占領(lǐng)市場;在裝配線上即可編程和測試;現(xiàn)場甚至是遠(yuǎn)程升級程序代碼,降低維護/升級成本。IAP技術(shù)對于通信、電力領(lǐng)域非常重要,如IC卡電話、分時計費電表等產(chǎn)品,通過遠(yuǎn)程更新代碼能大大降低后期服務(wù)費用。

            目前最常用的微控制器仍是MCS-51系列,其有限的存儲空間、運行時不能更改程序代碼、程序/數(shù)據(jù)空間必須分開等條件限制了IAP功能的實現(xiàn),其中要解決的關(guān)鍵問題有以下幾個方面:

           ?。?) 存儲器可在線再編程。
           ?。?) 增加第二個存儲器陣列,用于IAP期間MCU的運行。
           ?。?) 實現(xiàn)對程序存儲器的寫入。
           ?。?) 地址譯碼自動生成。

            Waferscale(WSI)公司推出的Easy FlashTM系列可編程外圍芯片產(chǎn)品PSD8XX是針對實現(xiàn)IAP問題而設(shè)計的,片內(nèi)提供了IAP所必需的兩塊獨立的存儲器陣列和自動地址譯碼電路,與 80C51構(gòu)成兩芯片的IAP完整解決方案。我們用到的F1芯片內(nèi)部有:1MB Flash主存儲器、第二塊256KB EEPROM存儲器、16KB SRAM、復(fù)雜的可編程邏輯陣列CPLD,擴展I/O口及JTAG接口等功能模塊。

          一、 方案說明

            在介紹方案之前,首先介紹將用到的PSD的兩個內(nèi)部寄存器:頁寄存器(page)和VM寄存器。在PSD內(nèi)部有一組控制寄存器用來對PSD進行設(shè)置,如I/O口方式、JTAG配置等。它們的地址是基址CSIOP加偏移地址。CSIOP地址可以在Able語言(見附錄)中設(shè)定。頁寄存器的偏移地址是E0H,VM寄存器的是E2H。當(dāng)CSIOP被定義為0900H時,它們的訪問地址就是(0900+E0)H和(0900+E2)H。8位的頁寄存器可使MCU的尋址空間擴大256倍,它的內(nèi)容可以由MCU來讀出和寫入。頁寄存器直接參與PSD內(nèi)部存儲器的地址選擇。在作為頁尋址時寫入要訪問的頁地址, PSD內(nèi)部地址譯碼邏輯就立刻選中目標(biāo)存儲器空間。頁寄存器是可以按位使用的,在不用來作頁面選擇時,還可以作一般邏輯使用,如本方案中用到的swap、 enabledatahalf就是用頁尋址未用到的位來實現(xiàn)的。VM寄存器用來分開程序空間(PSEN信號使能)和數(shù)據(jù)空間(RD信號使能), F1中Flash和EEPROM、SRAM可設(shè)置在不同空間。VM寄存器內(nèi)容定義如表1所列。

            如果VM=12H,則設(shè)置Flash和SRAM位于數(shù)據(jù)空間,EEPROM位于程序空間。

            使用頁寄存器實現(xiàn)分頁存儲時,應(yīng)該設(shè)置一個公共存儲器區(qū),即程序在任何位置執(zhí)行時都能夠訪問到的空間(或者說是頁不相關(guān)的地址空間)。本方案中公共存儲器區(qū)占去了每一頁的低一半的存儲空間(如圖1~圖4所示),用于放置初始化程序、中斷服務(wù)程序、頁切換程序以及物理設(shè)備驅(qū)動程序等重要子程序。同樣,重要數(shù)據(jù)也應(yīng)當(dāng)在任何頁都可以訪問,如PSD控制寄存器、I/O、用于保存堆棧和全局變量的系統(tǒng)RAM等。

          表1 VM寄存器
          按此在新窗口瀏覽圖片

          按此在新窗口瀏覽圖片
          圖1 上電時(啟動/引導(dǎo)狀態(tài))系統(tǒng)存儲器(VM=12H)

          按此在新窗口瀏覽圖片
          圖2 寫06H到VM,將Flash“移”到程序空間后系統(tǒng)存儲器

          按此在新窗口瀏覽圖片
          圖3 “swap”位寫1,“切換”Flash和EEPROM后系統(tǒng)存儲器

            本方案充分利用了F1中存儲器的獨特功能,突破了80C51MCU的最大64KB訪問空間的限制,PSD內(nèi)部所有Flash存儲器可以由80C51使用。 IAP實現(xiàn)的基本原理是:系統(tǒng)從PSD的EEPROM啟動,執(zhí)行引導(dǎo)/下載程序,如果需要的話從PC機或其他主機中通過UART下載固件(程序)到PSD 的Flash存儲器。然后,程序從EEPROM轉(zhuǎn)跳到Flash,再通過PSD中的一個特殊寄存器VM將原引導(dǎo)區(qū)(地址0000H)的EEPROM用 Flash替代,實現(xiàn)了通過UART對PSD中Flash存儲器的在線編程。

          二、 系統(tǒng)存儲器映射

            系統(tǒng)啟動過程中存儲器的映射變換如圖1~圖4所示,其中FSx、EESx是PSD813F1內(nèi)部存儲器塊。FSx對應(yīng)8個Flash塊,每塊16KB;EESx對應(yīng)4個EEPROM塊,每塊8KB。

          按此在新窗口瀏覽圖片
          圖4 寫0CH到VM,將EEPROM“移”到數(shù)據(jù)空間后系統(tǒng)存儲器映射

            MCU的運行有兩個基本模式:一個是引導(dǎo)/下載模式;另一個是正常運行模式。圖1~圖4顯示了上電啟動后從引導(dǎo)/下載模式到正常運行模式轉(zhuǎn)換過程中系統(tǒng)存儲器的變化。

            圖1顯示了上電時系統(tǒng)存儲器的映射情況。系統(tǒng)從EEPROM開始,檢查是否要通過80C51的UART對Flash中的程序進行升級。此時, PSD中全部Flash存儲器都處于80C51的數(shù)據(jù)空間,而EEPROM則處于80C51的程序空間。這是在WSI的PSDSOFT開發(fā)系統(tǒng)第二個步驟的“PSD Configuration”中設(shè)置的。在“Set VM Register Configuration at Power Up”框內(nèi),設(shè)置Flash為“Data Space”,EEPROM為“Program Space”。此時,VM寄存器在上電時自動被設(shè)置為12H。PSD813F1允許在程序執(zhí)行中改變VM寄存器的內(nèi)容,這對于實現(xiàn)IAP也是非常重要的。

            在完成對Flash中程序升級或不需要升級時,寫VM寄存器為06H,將Flash從80C51的數(shù)據(jù)空間“移”到程序空間(此時系統(tǒng)仍在EEPROM中運行)。圖2顯示了Flash被移到程序空間后的情況,這是在VM寄存器被寫后立刻產(chǎn)生的。

            下一步,80C51運行程序從PSD EEPROM中“跳”到Flash。在程序?qū)?到“swap”位(上電時“swap”的值是0)進行地址“切換”,程序就進入Flash中運行了。注意:如果在EEPROM中運行時對“swap”寫1,結(jié)果會立刻發(fā)生(就好像抽掉了你正坐的椅子一樣)。所以,在此之前最好將程序轉(zhuǎn)跳到“切換”影響不到的段(即公共訪問區(qū),如FS1)?,F(xiàn)在,供MCU上電時引導(dǎo)(地址0000H)的EEPROM被Flash替代,如圖3所示。

            最后一步,程序已經(jīng)在PSD的Flash中運行,寫0CH到VM寄存器,把EEPROM從80C51的程序空間“移”到數(shù)據(jù)空間。并且,MCU 跳轉(zhuǎn)到在PSD的FLSAH FS0塊中的復(fù)位入口0000H,用戶的程序開始真正執(zhí)行。此時,系統(tǒng)存儲器映射如圖4所示(正常工作模式)。所有PSD的128KB Flash都在程序空間,其中32KB是公共訪問區(qū),96KB采用分頁訪問。同時,EEPROM全部位于數(shù)據(jù)空間,且可在任何頁進行訪問。請注意: EES2和EES3(地址是C000H至FFFFH)可以被用戶當(dāng)作一般數(shù)據(jù)存儲器使用,而EES0和EES1則保留為系統(tǒng)引導(dǎo)代碼區(qū)(地址是8000H 至BFFFH)。

            這一方案還可以實現(xiàn)對PSD中EEPROM的引導(dǎo)程序進行升級,此時程序在PSD的Flash中運行。這對于使用EPROM作為引導(dǎo)的IAP系統(tǒng)是不可能實現(xiàn)的。

            為了避免處于程序空間EES0、EES1中的引導(dǎo)代碼被意外更改,還可以通過未用到的頁寄存器位實現(xiàn)另外一個功能,對引導(dǎo)代碼進行保護。定義 “enabledatahalf”位,將它寫為1,一方面保護ESS0、ESS1,另一方面把EES2、EES3作為一般數(shù)據(jù)存儲器使用。如果要升級引導(dǎo)代碼,則須先將“enabledatahalf”置為0,下載新的引導(dǎo)代碼到EES0、EES1,然后再將“enabledatahalf”置為1。必須保護好引導(dǎo)代碼,因為引導(dǎo)程序一旦被破壞,系統(tǒng)就徹底崩潰;如果僅僅是用戶程序被破壞,還可以通過UART重新下載。

          三、 軟件設(shè)計

            通過上面的介紹可知,實現(xiàn)IAP的軟件要包括系統(tǒng)啟動和用戶系統(tǒng)的載入兩個部分。其中的關(guān)鍵是程序在Flash與EEPROM之間的切換。

            系統(tǒng)啟動的引導(dǎo)程序是放在EEPROM中的;用戶程序則放到Flash中。如果用戶僅希望實現(xiàn)對Flash中的用戶程序的IAP功能,而不要對 EEPROM中引導(dǎo)程序的升級,那么用戶程序可以像一般80C51程序一樣,不用作任何修改,直接放入Flash。如果用戶還要對引導(dǎo)程序進行升級,還要在用戶程序模塊中嵌入一個啟動模塊(詳見第四節(jié))。

            引導(dǎo)程序(boot)和用戶程序啟動模塊(startup)的流程圖如圖5和圖6所示。

          按此在新窗口瀏覽圖片
          圖5 EEPROM引導(dǎo)程序(boot)

          按此在新窗口瀏覽圖片
          圖6 Flash引導(dǎo)程序(startup)

            與之配合使用的PC機程序是RS-232接口通信程序,可參考相關(guān)例程,或直接使用Windows中的“超級終端”工具。

          四、 系統(tǒng)實現(xiàn)

            第一步,設(shè)計用戶程序。

            如果不需要對引導(dǎo)程序升級則不作修改,直接將程序代碼下載到Flash中;反之,則要在用戶程序模塊中加入一個啟動(startup)模塊。方法是用L51(Franklin公司產(chǎn)品)將用戶模塊和startup模塊鏈接在一起。方法如下:

            L51 用戶OBJ文件>, startup.obj

            第二步,使用PSDsoft開發(fā)系統(tǒng)進行設(shè)計。

            在PSDsoft開發(fā)系統(tǒng)中建立一個新項目,將PSD器件選定為PSD813F1。在流程圖設(shè)計“degin entry”中增加新Abel模塊,進行硬件描述設(shè)計,除用戶的自定義功能外還應(yīng)包括IAP部分(參見附錄)。并且,在“device config”中設(shè)置MCU總線方式、JTAG、用戶碼等選項。特別注意的是在MCU總線中,設(shè)控制信號為“WR,RD,PSEN”,F(xiàn)lash為數(shù)據(jù)存儲器,EEPROM為程序存儲器。然后,對以上部分進行編譯和裝配。

            第三步,把編譯好的模塊和MCU程序模塊合并成一個文件。這里重要的是EEPROM中的引導(dǎo)程序。Flash中的程序可以同時裝入,也可以在應(yīng)用中通過UART裝入。

            最后一步,用DK800開發(fā)工具的Flash Link電纜或芯片編程工具(PSDpro)對PSD813進行編程。

            將按上述方法編程好的PSD813芯片裝到用戶電路板(包含RS-232接口通信電路)上,用串行電纜與PC機串口相連,在PC機上運行 PSDload程序或Windows通信附件“超級終端”。加電復(fù)位用戶板,IAP系統(tǒng)啟動,與PC機連接成功后,就能通過PC機下載或升級PSD中的用戶程序。如果沒有PC連接或沒有下載要求時,系統(tǒng)會自動進入用戶程序運行。

            PSD813中主Flash存儲器和第二個存儲器陣列EEPROM在物理上是獨立的,不存在任何邏輯上的區(qū)別。也就是說,可以用Flash存放用戶系統(tǒng),也可以用EEPROM。如果用戶程序很?。‥EPROM的空間就夠用),而用到的數(shù)據(jù)空間又很大,可以把上述方案中的Flash和EEPROM 交換使用。并且,我們舉出的Flash、EEPROM、SRAM的地址映射也僅是PSD813F1的多種地址映射方案中的一個,使用頁寄存器可以靈活設(shè)計用戶自己的地址映射方案。

            這里用的是UART通信,用戶同樣可以選擇其他通信方式,如IR、RF、CAN、LAN、WAN,甚至是Internet。從一般性考慮,本方案同樣可適用于其他單片機系統(tǒng)中,只要通過簡單修改提供的程序即可使用。另外,本方案中的PSD813F1可以用WSI公司其他PSD8XX產(chǎn)品或最新的 PSD9XX系列產(chǎn)品替換,僅需要在附錄文件中稍加修改。

          附錄 Abel硬件描述語言文件

          //定義‘swap’位至頁寄存器位pgr7,
          //定義‘enabledatahalf’位至頁寄存器位pgr7:
          swap node 117; (pgr7)
          enable_data_half node 116; (pgr6)
          //Flash片選方程如下:
          fs0=((address>=^h8000) (address=^hBFFF) (page==3) !swap ) #((address>=^h0000) (address=^h3FFF) (page==X) swap );
          fs1=(address>=^h4000) (address=^h7FFF) (page==X);
          fs2=(address>=^h8000) (address=^hBFFF) (page==0);
          fs3=(address>=^hC000) (address=^hFFFF) (page==0);
          fs4=(address>=^h8000) (address=^hBFFF) (page==1);
          fs5=(address>=^hC000) (address=^hFFFF) (page==1);
          fs6=(address>=^h8000) (address=^hBFFF) (page==2);
          fs7=(address>=^hC000) (address=^hFFFF) (page==2);
          //EEPROM片選方程如下:
          ees0=((address>=^h0000) (address=^h1FFF) (page==X) !swap) #((address>=^h8000) (address=^h9FFF) (page==X) swap !enabledatahalf);
          ees1=((address>=^h2000) (address=^h3FFF) (page==X) !swap) #((address>=^hA000) (address=^hBFFF) (page==X) swap !enabledatahalf);
          ees2=(address>=^hC000) (address=^hDFFF) (page==X) enabledatahalf;
          ees3=(address>=^hE000) (address=^hFFFF) (page==X) enabledatahalf;
          //定義SRAM片選 rs0=(address>=^h0100) (address=^08FF) (page==X); //定義PSD控制寄存器CSIOP地址
          csiop=(address>=^h0900) (address=^09FF) (page==X);

          參考資料

          1 PSD8XXF系列數(shù)據(jù)手冊及應(yīng)用筆記.武漢力源,1998(8)
          2 PSDsoft User Manual. 美國WSI公司,1998

          存儲器相關(guān)文章:存儲器原理


          電能表相關(guān)文章:電能表原理


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();