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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > P89C51RD2的Boot ROM與ISP功能的實(shí)現(xiàn)

          P89C51RD2的Boot ROM與ISP功能的實(shí)現(xiàn)

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

          1 概 述

          本文引用地址:http://www.ex-cimer.com/article/171672.htm

          是PHILIPS公司內(nèi)核基于8位80C51單片機(jī)的派生產(chǎn)品,在完全保留80C51指令系統(tǒng)和硬件結(jié)構(gòu)的大框架下,進(jìn)行了多方面的加強(qiáng)、擴(kuò)展和創(chuàng)新,最大限度地利用了原有結(jié)構(gòu)的方方面面。將原有的對(duì)外數(shù)據(jù)和程序存儲(chǔ)器的 16位尋址機(jī)制加以利用,把片上的RAM擴(kuò)展到1KB、片上的FLASH EP擴(kuò)展到64KB,滿足當(dāng)今用嵌入式高級(jí)語(yǔ)言對(duì)片上大存儲(chǔ)容量的需要。

          最顯著的特點(diǎn)莫過(guò)于其(In-System Programming,在系統(tǒng)可編程)和IAP(In-Application Programming,在應(yīng)用可編程)。指電路板上的空白器件可以編程寫(xiě)入最終用戶代碼,而不需要從電路板上取下器件,已經(jīng)編程的器件也可以用方式擦除或再編程。IAP指MCU可以在系統(tǒng)中獲取新代碼并對(duì)自己重新編程,即可用程序來(lái)改變程序。ISP和IAP技術(shù)是未來(lái)儀器儀表的發(fā)展方向。PHILIPS公司為了使ISP技術(shù)和IAP技術(shù)得以推廣,在芯片上免費(fèi)提供了 固件,并且巧妙地解決了固件和FLASH的地址覆蓋問(wèn)題及一些具體細(xì)節(jié)問(wèn)題,使它們的變得簡(jiǎn)單而現(xiàn)成。

          對(duì)于 中的內(nèi)容,PHILIPS公司是不公開(kāi)的。但很多技術(shù)人員對(duì)于 ROM固件中ISP(IAP)非常感興趣。就ISP狀態(tài)而言,上位機(jī)直接跟Boot ROM固件中的程序打交道,因此,必須根據(jù)PHILIPS公司提供的流程和協(xié)議來(lái)編制上位機(jī)程序,至于Boot ROM內(nèi)部是如何實(shí)現(xiàn)ISP功能的,則不得而知。如果能夠搞明白ISP功能實(shí)現(xiàn)的具體方法,則對(duì)于上位機(jī)軟件的編制是大有好處的。以下是對(duì)Boot ROM中有關(guān)ISP功能實(shí)現(xiàn)所作的一些初步探討。

          2 Boot ROM固件代碼的讀出方法

          要對(duì)其 ISP功能進(jìn)行分析,必須讀出Boot ROM中的源代碼。為此,必須弄清楚Boot ROM空間和FLASH空間的關(guān)系。P89C51RD2采用了最先進(jìn)的FLASH(快閃)EPROM,其容量為64KB,并且分成8KB和16KB的存儲(chǔ)塊。我們知道,80C51系列8位單片機(jī)的最大尋址能力就是64KB,F(xiàn)LASH EPROM已經(jīng)將全部尋址空間占據(jù)。同時(shí),PHILIPS公司為P89C51RD2在片內(nèi)提供了一個(gè)名叫引導(dǎo)ROM(Boot ROM)的1KB的固件。固件上有引導(dǎo)裝載程序,可以接收主機(jī)經(jīng)串口傳來(lái)的命令和數(shù)據(jù)(如經(jīng)PC機(jī)的RS-232C口),這個(gè)固件是放在64KB程序存儲(chǔ)器的最高端的,與片內(nèi)FLASH地址0FC00H~0FFFFH相覆蓋。兩者之間的切換是通過(guò)特殊功能寄存器AUXR1的ENBOOT位來(lái)進(jìn)行的。

          ENBOOT=1 地址在0FC00H~0FFFFH范圍,尋址到固件
          ENBOOT=0 地址在0FC00H~0FFFFH范圍,尋址到FLASH

          既然當(dāng)ENBOOT=1時(shí),能夠?qū)ぶ返焦碳?,則利用程序就可以將固件代碼讀出。下面是實(shí)現(xiàn)代碼讀出時(shí)的硬件部分和軟件部分。

          (1)硬件部分

          為了讀出Boot ROM中的內(nèi)容,必須給P89C51RD2搭一個(gè)包括復(fù)位、晶振和串口通信功能的基本硬件系統(tǒng),如圖1所示。ICL232為單電源串口轉(zhuǎn)換芯片,可以完成TTL電平與RS-232C電平之間的轉(zhuǎn)換。

          44.jpg

          (2)軟件編制

          編制軟件的目的,是為了從Boot ROM中讀出源代碼,并送往上位機(jī)顯示。為了使用現(xiàn)成的軟件(如超級(jí)終端),程序中將讀出的二進(jìn)制代碼轉(zhuǎn)換成ASCII碼,并組成HEX文件格式直接傳給上位機(jī),這樣,將顯示的內(nèi)容存盤(pán)并反匯編,就可以對(duì)Boot ROM中的內(nèi)容進(jìn)行分析。由于程序中涉及到二進(jìn)制轉(zhuǎn)換成HEX文件格式,故將有關(guān)HEX文件格式的有關(guān)內(nèi)容表述如下:

          HEX文件的INTEL格式,是INTEL公司提出的按地址排列的數(shù)據(jù)信息,數(shù)據(jù)寬度為字節(jié),所有數(shù)據(jù)使用十六進(jìn)制數(shù)字表示,如Boot ROM從地址FC00H開(kāi)始的前16個(gè)數(shù)據(jù)為(已經(jīng)轉(zhuǎn)換成ASCII碼):

          75 89 02 75 C8 30 E4 F5 CD F5 CC 30 B0 FD 20 B0(十六進(jìn)制)

          則轉(zhuǎn)換成HEX文件格式為:
          :10FC000075890275C830E4F5CDF5CC30B0FD20B073

          :符號(hào)表明記錄的開(kāi)始;后面的2個(gè)字符表明記錄的長(zhǎng)度,這里是10H,即16個(gè)十六進(jìn)制數(shù)字;后面的4個(gè)字符給出調(diào)入的地址,這里是FC00H;再后面的2個(gè)字符表明記錄的類(lèi)型,00表示數(shù)據(jù)記錄,01表示記錄文件結(jié)束;再后面的16個(gè)數(shù)據(jù)即為真正的數(shù)據(jù)記錄;最后的2位73是校驗(yàn)和,它加上前面所有的數(shù)據(jù)和為0。

          所有HEX格式文件的最后一行為結(jié)尾行,它比較特殊,總是如下所示:
          :00000001FF
          讀Boot ROM代碼的主程序編制如下:
          AUXR1 EQU 0A2H ;特殊功能寄存器
          BOOT_ROM EQU 0FC00H ;Boot ROM的起始地址
          DAT_BUFFER EQU 30H ;數(shù)據(jù)暫存器
          DAT_SUM EQU 31H ;校驗(yàn)和
          ORG 0000H
          AJMP START
          ORG 0030H
          START:
          MOV SP,#50H
          MOV SCON,#50H
          MOV T2CON,#30H ;以T2作為波特率發(fā)生器
          MOV TL2,#0E0H ;波特率為2400 bps
          MOV TH2,#0FEH
          MOV RCAP2L,#0E0H
          MOV RCAP2H,#0FEH
          SETB TR2 ;啟動(dòng)T2
          MAIN: LCALL READ_ROM ;Boot ROM內(nèi)容讀出子程序
          LCALL SEND_END ;結(jié)尾行送出子程序
          AJMP $

          主程序中用到了兩個(gè)子程序:READ_ROM和SEND_END。

          READ_ROM子程序功能:從FC00H開(kāi)始將代碼讀出,將其轉(zhuǎn)變成ASCII碼并拼湊成HEX文件記錄的形式傳給上位機(jī)。

          讀Boot ROM代碼所調(diào)用的子程序見(jiàn)本刊網(wǎng)站發(fā)表的全文。

          3 Boot ROM固件的功能分析

          通過(guò)對(duì)Boot ROM中的程序進(jìn)行分析,可以對(duì)ISP的有關(guān)指令進(jìn)行更深入的理解,在一些編程方法上也可以向國(guó)外學(xué)習(xí)。下面對(duì)ISP的有關(guān)知識(shí)點(diǎn)進(jìn)行闡述。

          3.1 關(guān)于自動(dòng)確定波特率

          PHILIPS給出的ISP功能的第一個(gè)步驟為:上位機(jī)向下位機(jī)發(fā)送一個(gè)大寫(xiě)的英文字符U,供下位機(jī)確定波特率。

          3.1.1 工作原理

          大寫(xiě)的英文字符U有它的特殊性,它的ASCII碼為55H,轉(zhuǎn)換成二進(jìn)制為01010101B,也就是說(shuō)它是一個(gè)0、1相間的數(shù)據(jù),如圖2所示。如果能夠算出其一個(gè)位的傳輸時(shí)間tp,則對(duì)應(yīng)的波特率就可以計(jì)算出來(lái)。

          45.jpg


          上一頁(yè) 1 2 3 4 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();