P89C51RD2的Boot ROM與ISP功能的實(shí)現
1 概 述
本文引用地址:http://dyxdggzs.com/article/171672.htmP89C51RD2是PHILIPS公司內核基于8位80C51單片機的派生產(chǎn)品,在完全保留80C51指令系統和硬件結構的大框架下,進(jìn)行了多方面的加強、擴展和創(chuàng )新,最大限度地利用了原有結構的方方面面。P89C51RD2將原有的對外數據和程序存儲器的 16位尋址機制加以利用,把片上的RAM擴展到1KB、片上的FLASH EPROM擴展到64KB,滿(mǎn)足當今用嵌入式高級語(yǔ)言對片上大存儲容量的需要。
P89C51RD2最顯著(zhù)的特點(diǎn)莫過(guò)于其ISP(In-System Programming,在系統可編程)功能和IAP(In-Application Programming,在應用可編程)功能。ISP指電路板上的空白器件可以編程寫(xiě)入最終用戶(hù)代碼,而不需要從電路板上取下器件,已經(jīng)編程的器件也可以用ISP方式擦除或再編程。IAP指MCU可以在系統中獲取新代碼并對自己重新編程,即可用程序來(lái)改變程序。ISP和IAP技術(shù)是未來(lái)儀器儀表的發(fā)展方向。PHILIPS公司為了使ISP技術(shù)和IAP技術(shù)得以推廣,在芯片上免費提供了Boot ROM固件,并且巧妙地解決了固件和FLASH的地址覆蓋問(wèn)題及一些具體實(shí)現細節問(wèn)題,使它們的實(shí)現變得簡(jiǎn)單而現成。
對于Boot ROM中的內容,PHILIPS公司是不公開(kāi)的。但很多技術(shù)人員對于Boot ROM固件中ISP(IAP)功能的實(shí)現非常感興趣。就ISP狀態(tài)而言,上位機直接跟Boot ROM固件中的程序打交道,因此,必須根據PHILIPS公司提供的流程和協(xié)議來(lái)編制上位機程序,至于Boot ROM內部是如何實(shí)現ISP功能的,則不得而知。如果能夠搞明白ISP功能實(shí)現的具體方法,則對于上位機軟件的編制是大有好處的。以下是對Boot ROM中有關(guān)ISP功能實(shí)現所作的一些初步探討。
2 Boot ROM固件代碼的讀出方法
要對其 ISP功能進(jìn)行分析,必須讀出Boot ROM中的源代碼。為此,必須弄清楚Boot ROM空間和FLASH空間的關(guān)系。P89C51RD2采用了最先進(jìn)的FLASH(快閃)EPROM,其容量為64KB,并且分成8KB和16KB的存儲塊。我們知道,80C51系列8位單片機的最大尋址能力就是64KB,FLASH EPROM已經(jīng)將全部尋址空間占據。同時(shí),PHILIPS公司為P89C51RD2在片內提供了一個(gè)名叫引導ROM(Boot ROM)的1KB的固件。固件上有引導裝載程序,可以接收主機經(jīng)串口傳來(lái)的命令和數據(如經(jīng)PC機的RS-232C口),這個(gè)固件是放在64KB程序存儲器的最高端的,與片內FLASH地址0FC00H~0FFFFH相覆蓋。兩者之間的切換是通過(guò)特殊功能寄存器AUXR1的ENBOOT位來(lái)進(jìn)行的。
ENBOOT=1 地址在0FC00H~0FFFFH范圍,尋址到固件
ENBOOT=0 地址在0FC00H~0FFFFH范圍,尋址到FLASH
既然當ENBOOT=1時(shí),能夠尋址到固件,則利用程序就可以將固件代碼讀出。下面是實(shí)現代碼讀出時(shí)的硬件部分和軟件部分。
(1)硬件部分
為了讀出Boot ROM中的內容,必須給P89C51RD2搭一個(gè)包括復位、晶振和串口通信功能的基本硬件系統,如圖1所示。ICL232為單電源串口轉換芯片,可以完成TTL電平與RS-232C電平之間的轉換。
(2)軟件編制
編制軟件的目的,是為了從Boot ROM中讀出源代碼,并送往上位機顯示。為了使用現成的軟件(如超級終端),程序中將讀出的二進(jìn)制代碼轉換成ASCII碼,并組成HEX文件格式直接傳給上位機,這樣,將顯示的內容存盤(pán)并反匯編,就可以對Boot ROM中的內容進(jìn)行分析。由于程序中涉及到二進(jìn)制轉換成HEX文件格式,故將有關(guān)HEX文件格式的有關(guān)內容表述如下:
HEX文件的INTEL格式,是INTEL公司提出的按地址排列的數據信息,數據寬度為字節,所有數據使用十六進(jìn)制數字表示,如Boot ROM從地址FC00H開(kāi)始的前16個(gè)數據為(已經(jīng)轉換成ASCII碼):
75 89 02 75 C8 30 E4 F5 CD F5 CC 30 B0 FD 20 B0(十六進(jìn)制)
則轉換成HEX文件格式為:
:10FC000075890275C830E4F5CDF5CC30B0FD20B073
:符號表明記錄的開(kāi)始;后面的2個(gè)字符表明記錄的長(cháng)度,這里是10H,即16個(gè)十六進(jìn)制數字;后面的4個(gè)字符給出調入的地址,這里是FC00H;再后面的2個(gè)字符表明記錄的類(lèi)型,00表示數據記錄,01表示記錄文件結束;再后面的16個(gè)數據即為真正的數據記錄;最后的2位73是校驗和,它加上前面所有的數據和為0。
所有HEX格式文件的最后一行為結尾行,它比較特殊,總是如下所示:
:00000001FF
讀Boot ROM代碼的主程序編制如下:
AUXR1 EQU 0A2H ;特殊功能寄存器
BOOT_ROM EQU 0FC00H ;Boot ROM的起始地址
DAT_BUFFER EQU 30H ;數據暫存器
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 ;啟動(dòng)T2
MAIN: LCALL READ_ROM ;Boot ROM內容讀出子程序
LCALL SEND_END ;結尾行送出子程序
AJMP $
主程序中用到了兩個(gè)子程序:READ_ROM和SEND_END。
READ_ROM子程序功能:從FC00H開(kāi)始將代碼讀出,將其轉變成ASCII碼并拼湊成HEX文件記錄的形式傳給上位機。
讀Boot ROM代碼所調用的子程序見(jiàn)本刊網(wǎng)站發(fā)表的全文。
3 Boot ROM固件的功能分析
通過(guò)對Boot ROM中的程序進(jìn)行分析,可以對ISP的有關(guān)指令進(jìn)行更深入的理解,在一些編程方法上也可以向國外學(xué)習。下面對ISP的有關(guān)知識點(diǎn)進(jìn)行闡述。
3.1 關(guān)于自動(dòng)確定波特率
PHILIPS給出的ISP功能的第一個(gè)步驟為:上位機向下位機發(fā)送一個(gè)大寫(xiě)的英文字符U,供下位機確定波特率。
3.1.1 工作原理
大寫(xiě)的英文字符U有它的特殊性,它的ASCII碼為55H,轉換成二進(jìn)制為01010101B,也就是說(shuō)它是一個(gè)0、1相間的數據,如圖2所示。如果能夠算出其一個(gè)位的傳輸時(shí)間tp,則對應的波特率就可以計算出來(lái)。
評論