新聞中心

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

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

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

1 概 述

本文引用地址:http://m.butianyuan.cn/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)的方方面面。將原有的對外數(shù)據(jù)和程序存儲(chǔ)器的 16位尋址機(jī)制加以利用,把片上的RAM擴(kuò)展到1KB、片上的FLASH EP擴(kuò)展到64KB,滿足當(dāng)今用嵌入式高級語言對片上大存儲(chǔ)容量的需要。

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

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

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

要對其 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)串口傳來的命令和數(shù)據(jù)(如經(jīng)PC機(jī)的RS-232C口),這個(gè)固件是放在64KB程序存儲(chǔ)器的最高端的,與片內(nèi)FLASH地址0FC00H~0FFFFH相覆蓋。兩者之間的切換是通過特殊功能寄存器AUXR1的ENBOOT位來進(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ìn)制代碼轉(zhuǎn)換成ASCII碼,并組成HEX文件格式直接傳給上位機(jī),這樣,將顯示的內(nèi)容存盤并反匯編,就可以對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開始的前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

:符號表明記錄的開始;后面的2個(gè)字符表明記錄的長度,這里是10H,即16個(gè)十六進(jìn)制數(shù)字;后面的4個(gè)字符給出調(diào)入的地址,這里是FC00H;再后面的2個(gè)字符表明記錄的類型,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開始將代碼讀出,將其轉(zhuǎn)變成ASCII碼并拼湊成HEX文件記錄的形式傳給上位機(jī)。

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

3 Boot ROM固件的功能分析

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

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

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

3.1.1 工作原理

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

45.jpg


上一頁 1 2 3 4 下一頁

評論


相關(guān)推薦

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

關(guān)閉