色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

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

          引言

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

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

            (1) 存儲(chǔ)器可在線再編程。
            (2) 增加第二個(gè)存儲(chǔ)器陣列,用于IAP期間MCU的運(yùn)行。
           ?。?) 實(shí)現(xiàn)對(duì)程序存儲(chǔ)器的寫入。
           ?。?) 地址譯碼自動(dòng)生成。

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

          一、 方案說(shuō)明

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          三、 軟件設(shè)計(jì)

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

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

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

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

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

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

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

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

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

            L51 用戶OBJ文件>, startup.obj

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

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

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

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

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

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

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

          附錄 Abel硬件描述語(yǔ)言文件

          //定義‘swap’位至頁(yè)寄存器位pgr7,
          //定義‘enabledatahalf’位至頁(yè)寄存器位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ù)手冊(cè)及應(yīng)用筆記.武漢力源,1998(8)
          2 PSDsoft User Manual. 美國(guó)WSI公司,1998

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


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


          評(píng)論


          相關(guān)推薦

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

          關(guān)閉