新聞中心

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

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

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

1 概 述

本文引用地址:http://2s4d.com/article/171672.htm

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

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

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

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

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

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

既然當ENBOOT=1時,能夠尋址到固件,則利用程序就可以將固件代碼讀出。下面是實現(xiàn)代碼讀出時的硬件部分和軟件部分。

(1)硬件部分

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

44.jpg

(2)軟件編制

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

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

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

則轉換成HEX文件格式為:
:10FC000075890275C830E4F5CDF5CC30B0FD20B073

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

所有HEX格式文件的最后一行為結尾行,它比較特殊,總是如下所示:
:00000001FF
讀Boot ROM代碼的主程序編制如下:
AUXR1 EQU 0A2H ;特殊功能寄存器
BOOT_ROM EQU 0FC00H ;Boot ROM的起始地址
DAT_BUFFER EQU 30H ;數(shù)據(jù)暫存器
DAT_SUM EQU 31H ;校驗和
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 ;啟動T2
MAIN: LCALL READ_ROM ;Boot ROM內(nèi)容讀出子程序
LCALL SEND_END ;結尾行送出子程序
AJMP $

主程序中用到了兩個子程序:READ_ROM和SEND_END。

READ_ROM子程序功能:從FC00H開始將代碼讀出,將其轉變成ASCII碼并拼湊成HEX文件記錄的形式傳給上位機。

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

3 Boot ROM固件的功能分析

通過對Boot ROM中的程序進行分析,可以對ISP的有關指令進行更深入的理解,在一些編程方法上也可以向國外學習。下面對ISP的有關知識點進行闡述。

3.1 關于自動確定波特率

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

3.1.1 工作原理

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

45.jpg


上一頁 1 2 3 4 下一頁

評論


相關推薦

技術專區(qū)

關閉