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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > C8051F130的遠(yuǎn)程在線升級(jí)程序設(shè)計(jì)

          C8051F130的遠(yuǎn)程在線升級(jí)程序設(shè)計(jì)

          作者: 時(shí)間:2010-06-18 來源:網(wǎng)絡(luò) 收藏

            1. 引言

            目前,采用FLASH 存儲(chǔ)介質(zhì)來作為程序存儲(chǔ)器的單片機(jī)種類越來越多。和其他類型如OTP、EPROM 型單片機(jī)比較起來,F(xiàn)LASH 具有可擦寫方便,次數(shù)多,編程無需外加高電壓等特點(diǎn)。絕大多數(shù)FLASH 型單片機(jī)都可在運(yùn)行時(shí)通過指令來直接擦寫內(nèi)部FLASH,提供了IAP、ISP 功能,借助這個(gè)功能,就可以實(shí)現(xiàn)系統(tǒng)底層固件的功能。

             單片機(jī)是SILICON LABS推出的完全集成的混合信號(hào)片上系統(tǒng)型MCU 芯片,功能十分強(qiáng)大。其采用高速、流水線結(jié)構(gòu)的8051 兼容的CIP-51 內(nèi)核,內(nèi)部PLL可倍頻至100MIPS,具有2個(gè)串口,128KB 可在系統(tǒng)編程的FLASH 存儲(chǔ)器,8448(8K+256)字節(jié)的片內(nèi)RAM,并包含了片內(nèi)JTAG 調(diào)試電路。其功能完全滿足實(shí)現(xiàn)遠(yuǎn)程在線程序升級(jí)系統(tǒng)的條件。

            在專用網(wǎng)絡(luò)系統(tǒng)中實(shí)現(xiàn)遠(yuǎn)程在線程序升級(jí),其優(yōu)點(diǎn)顯而易見,不僅極大的為系統(tǒng)維護(hù)提供了方便,還節(jié)省了大量的人力財(cái)力。本文詳細(xì)介紹了在某直放站系統(tǒng)中實(shí)現(xiàn)的基于的遠(yuǎn)程在線程序升級(jí)系統(tǒng)的設(shè)計(jì)思路和方法。

            2. 設(shè)計(jì)思路

            系統(tǒng)組網(wǎng)拓?fù)浣Y(jié)構(gòu)如圖1 所示,正常工作時(shí),網(wǎng)管中心通過有線或無線通道對(duì)所屬各站點(diǎn)下位機(jī)狀態(tài)進(jìn)行。網(wǎng)管中心通過查詢各站點(diǎn)下位機(jī)參數(shù)得到下位機(jī)固件版本號(hào),如果固件版本號(hào)和現(xiàn)有最新固件版本號(hào)不同,則直接發(fā)送第一幀程序升級(jí)數(shù)據(jù)啟動(dòng)遠(yuǎn)程程序升級(jí)過程。因?yàn)?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/監(jiān)控">監(jiān)控系統(tǒng)需要實(shí)時(shí)工作,所以程序的升級(jí)也就必須在站點(diǎn)下位機(jī)系統(tǒng)工作過程中完成。在網(wǎng)管中心發(fā)送程序升級(jí)數(shù)據(jù)的過程中,站點(diǎn)下位機(jī)系統(tǒng)依然正常工作,只有全部接收完程序升級(jí)數(shù)據(jù)并校驗(yàn)通過后,才跳轉(zhuǎn)到Bootloader 程序進(jìn)行程序升級(jí)。

          系統(tǒng)組網(wǎng)拓?fù)浣Y(jié)構(gòu)

            下位機(jī)硬件框圖如圖2 所示,CPU 選擇,其他部分包括控制輸入輸出部分,人機(jī)接口電路,RS232 接口,EEPROM 器件24C16 等。RS232 接口作為系統(tǒng)的通訊接口可以外接電話MODEM或短信MODEM 等標(biāo)準(zhǔn)模塊,和網(wǎng)管中心組成有無線網(wǎng)絡(luò),其所采用的具體形式不影響本文所述的遠(yuǎn)程升級(jí)系統(tǒng)。EEPOM 器件24C16 由于可擦寫次數(shù)比FLASH 多,用來存儲(chǔ)系統(tǒng)的關(guān)鍵參數(shù)。

          下位機(jī)硬件框圖

            由于51 系列單片機(jī)外部總線地址為16 位,能直接尋址的最大范圍為64KB,所以C8051F130 將內(nèi)部的128KB FLASH 程序存儲(chǔ)空間被分成了4 塊,BLOCK0、BLOCK1、BLOCK2、BLOCK3。每塊大小為32KB,0x0000~0x7FFF 地址空間始終為BLOCK0,作為公共段。可以通過設(shè)置程序存儲(chǔ)器空間塊選擇寄存器PSBANK 來選擇常量操作和取指操作地址在0x8000 ~0xFFFF 所指向的塊。

          PSBANK寄存器

            COBANK:常量操作存儲(chǔ)塊選擇位。

            這兩位選擇常量操作(MOVC 和FLASH MOVX)地址在0x8000 ~0xFFFF 范圍的FLASH 存儲(chǔ)塊。

          •   00:常量操作指向存儲(chǔ)塊0(注意,塊0 也映射到地址0x0000 ~0x7FFF)。
          •   01:常量操作指向存儲(chǔ)塊1。
          •   10:常量操作指向存儲(chǔ)塊2。
          •   11:常量操作指向存儲(chǔ)塊3。

            IFBANK:取指操作存儲(chǔ)塊選擇位這兩位選擇取指操作(地址在0x8000 ~0xFFFF 范圍)的FLASH 存儲(chǔ)塊。這兩位只能由位于BLOCK0 的程序改寫。

          •   00:從存儲(chǔ)塊0 取指令(注意,塊0 也映射到地址0x0000 ~0x7FFF)。
          •   01:從存儲(chǔ)塊1 取指令。
          •   10:從存儲(chǔ)塊2 取指令。
          •   11:從存儲(chǔ)塊3 取指令。

            FLASH 的設(shè)計(jì)分配方案如下:

          C8051F130的遠(yuǎn)程在線升級(jí)程序設(shè)計(jì)

            BLOCK0、BLOCK1 作為默認(rèn)的64KB 程序存儲(chǔ)區(qū)空間,存儲(chǔ)正常工作時(shí)的固件程序。我們所使用的程序不會(huì)超過60KB,0x0000~0xEFFF 地址區(qū)60KB 空間用于存儲(chǔ)系統(tǒng)主程序,0xF000~0xFFFF 地址地址區(qū)4KB 空間用于存儲(chǔ)Bootloader 程序。

            BLOCK2、BLOCK3 作為64KB 常量存儲(chǔ)區(qū),用于存儲(chǔ)系統(tǒng)運(yùn)行過程中接收到的程序升級(jí)數(shù)據(jù)。

            如果要遠(yuǎn)程對(duì)某指定站點(diǎn)的固件進(jìn)行升級(jí)時(shí),網(wǎng)管中心對(duì)該站點(diǎn)分幀發(fā)送程序升級(jí)數(shù)據(jù),升級(jí)數(shù)據(jù)協(xié)議格式如下:

          升級(jí)數(shù)據(jù)協(xié)議格式

            網(wǎng)管中心發(fā)送程序升級(jí)數(shù)據(jù)幀時(shí),每幀數(shù)據(jù)大小固定為512 字節(jié),幀序號(hào)從1 開始。從功能標(biāo)志處起到數(shù)據(jù)部分最后一字節(jié)做累加和作為校驗(yàn)碼。最后一幀不足512 字節(jié)部分加0xFF 補(bǔ)足。在發(fā)送過程中,由于每幀數(shù)據(jù)以0x1002 開始,0x1003 結(jié)束,中間碰到0x10 時(shí),要再補(bǔ)發(fā)0x10。接收時(shí)除了幀頭幀尾,在幀中間時(shí)如果連續(xù)接收到兩個(gè)0x10,則需要去掉一個(gè)。

            指定站點(diǎn)在成功接收完一幀程序升級(jí)數(shù)據(jù)后,如果校驗(yàn)通過則擦除對(duì)應(yīng)的BLOCK2 或者BLOCK3中的扇區(qū)。這里需要注意的是,C8051F130 的FLASH 扇區(qū)大小是1024 字節(jié),而我們的數(shù)據(jù)幀大小定為512 字節(jié),所以應(yīng)該接收到每?jī)蓭瑪?shù)據(jù)才擦除對(duì)應(yīng)的扇區(qū)。將程序升級(jí)數(shù)據(jù)寫入FLASH 中,同時(shí)對(duì)每幀512 字節(jié)的程序升級(jí)數(shù)據(jù)做累加,并將其累加和作為校驗(yàn)碼寫入EEPROM 指定位置,最后給出正確回應(yīng)。如果校驗(yàn)錯(cuò)誤,則回應(yīng)錯(cuò)誤。網(wǎng)管中心接收到錯(cuò)誤回應(yīng)時(shí)應(yīng)該重發(fā)上一幀數(shù)據(jù),否則繼續(xù)發(fā)送下一幀數(shù)據(jù)。如果幀序號(hào)等于總幀數(shù),說明指定站點(diǎn)接收到最后一幀數(shù)據(jù),置需要進(jìn)行程序升級(jí)標(biāo)志,此標(biāo)志至關(guān)重要,因此將其存儲(chǔ)在EEPROM 中,為增加其可靠性,另外還存儲(chǔ)其反碼作為校驗(yàn),然后直接跳轉(zhuǎn)Bootloader 程序,以升級(jí)主程序。

          流程圖

            程序跳轉(zhuǎn)到Bootloader 程序執(zhí)行后,首先必須要檢查程序升級(jí)標(biāo)志,如果為真,再檢查其校驗(yàn)碼,只有兩者都符合預(yù)設(shè)的值,才認(rèn)為確實(shí)需要進(jìn)行程序升級(jí)。否則跳轉(zhuǎn)到主程序區(qū)執(zhí)行。

            程序升級(jí)過程如下:首先讀出24C16 中存儲(chǔ)的程序升級(jí)數(shù)據(jù)的總幀數(shù),為防止寫入到BLOCK2/3中的程序升級(jí)數(shù)據(jù)有錯(cuò)誤,從BLOCK2/3 中讀出每一幀512 字節(jié)的數(shù)據(jù)進(jìn)行累加,檢查其是否和存儲(chǔ)在24C16 中的對(duì)應(yīng)數(shù)據(jù)幀的累加校驗(yàn)碼相等。如果所有的的程序升級(jí)數(shù)據(jù)校驗(yàn)都通過,則說明數(shù)據(jù)正確,開始擦除主程序區(qū)FLASH,并再次讀出BLOCK2/3 中的程序升級(jí)數(shù)據(jù)寫入主程序區(qū)FLASH。完成后擦除程序升級(jí)標(biāo)志,跳轉(zhuǎn)到主程序區(qū)開始執(zhí)行新版本固件程序。在讀出校驗(yàn)過程中,只要有一幀數(shù)據(jù)校驗(yàn)通不過,則認(rèn)為寫入到BLOCK2/3 的程序升級(jí)數(shù)據(jù)發(fā)生錯(cuò)誤,為保證系統(tǒng)安全,擦除程序升級(jí)標(biāo)志,跳轉(zhuǎn)到主程序區(qū)執(zhí)行原版本程序,并等待下一次升級(jí)。


          上一頁 1 2 下一頁

          評(píng)論


          相關(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); })();