国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

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

發(fā)布時間:2010-8-6 15:51    發(fā)布者:lavida
關(guān)鍵詞: Boot , ISP , P89C51RD2 , ROM
1 概 述

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

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

對于Boot ROM中的內(nèi)容,PHILIPS公司是不公開的。但很多技術(shù)人員對于Boot ROM固件中ISP(IAP)功能的實(shí)現(xiàn)非常感興趣。就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的存儲塊。我們知道,80C51系列8位單片機(jī)的最大尋址能力就是64KB,F(xiàn)LASH EPROM已經(jīng)將全部尋址空間占據(jù)。同時,PHILIPS公司為P89C51RD2在片內(nèi)提供了一個名叫引導(dǎo)ROM(Boot ROM)的1KB的固件。固件上有引導(dǎo)裝載程序,可以接收主機(jī)經(jīng)串口傳來的命令和數(shù)據(jù)(如經(jīng)PC機(jī)的RS-232C口),這個固件是放在64KB程序存儲器的最高端的,與片內(nèi)FLASH地址0FC00H"0FFFFH相覆蓋。兩者之間的切換是通過特殊功能寄存器AUXR1的ENBOOT位來進(jìn)行的。

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

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

(1)硬件部分

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

(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個數(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個字符表明記錄的長度,這里是10H,即16個十六進(jìn)制數(shù)字;后面的4個字符給出調(diào)入的地址,這里是FC00H;再后面的2個字符表明記錄的類型,00表示數(shù)據(jù)記錄,01表示記錄文件結(jié)束;再后面的16個數(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 ;啟動T2
MAIN: LCALL READ_ROM ;Boot ROM內(nèi)容讀出子程序
LCALL SEND_END ;結(jié)尾行送出子程序
AJMP $

主程序中用到了兩個子程序:READ_ROM和SEND_END。
READ_ROM子程序功能:從FC00H開始將代碼讀出,將其轉(zhuǎn)變成ASCII碼并拼湊成HEX文件記錄的形式傳給上位機(jī)。
讀Boot ROM代碼所調(diào)用的子程序網(wǎng)上查找下。

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)于自動確定波特率
PHILIPS給出的ISP功能的第一個步驟為:上位機(jī)向下位機(jī)發(fā)送一個大寫的英文字符"U",供下位機(jī)確定波特率。

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

3.1.2 tp對應(yīng)的計(jì)數(shù)值
首先看一下在Boot ROM中是如何計(jì)算一個位所對應(yīng)的計(jì)數(shù)值的。以下為Boot ROM從地址FC00H "FC17H之間的源代碼及反匯編程序:

源代碼 反匯編程序

FC00 75 89 02 MOV TMOD,#02H ;T1工作模式2,定時器
FC03 75 C8 30 MOV T2CON,#30H ;T2工作為串行口波特
;率發(fā)生器
FC06 E4 CLR A
FC07 F5 CD MOV TH2,A
FC09 F5 CC MOV TL2,A ;T2=0000H
FC0B 30 B0 FD JNB P3.0,$ ;若P3.0=0,則等待,
;直到其變?yōu)?
FC0E 20 B0 FD JB P3.0,$ ;若P3.0=1,則等待,
;直到下降沿到來
FC11 D2 CA SETB TR2 ;啟動T2定時器
FC13 30 B0 FD JNB P3.0,$ ;若P3.0=0,則等待,
;直到上升沿到來
FC16 C2 CA CLR TR2 ;關(guān)閉T2定時器,此時
;T2中的數(shù)值為tp

首先將T2清0,然后測下降沿,測到下降沿后,開始置TR2=1,T2開始計(jì)數(shù),等測到上升沿后,置TR2=0,停止計(jì)數(shù),則此時T2中為傳送1bit (低電平)的計(jì)數(shù)值。以波特率2400 bps為例,則傳送1bit所用的時間為1/2400 s,即416.67μs。P89C51RD2主頻為11.0592 MHz,再由PHILIPS公司的數(shù)據(jù)手冊可知,當(dāng)T2工作于波特率發(fā)生器模式時,OSC未經(jīng)分頻直接進(jìn)入T2計(jì)數(shù)器,由此可得在tp時間內(nèi)T2的理論計(jì)數(shù)值為:(T2)=0.000 416 67×110 592 00= 4608(十進(jìn)制)=1200H。在這里,特別要強(qiáng)調(diào)的是:該數(shù)只是一個理論值。對波特率為2400 bps時的實(shí)際值進(jìn)行測試,發(fā)現(xiàn)實(shí)測值為11FAH左右。不管怎樣測,實(shí)測值總是小于理論值6個數(shù)左右。這個數(shù)據(jù)為下面的波特率計(jì)算提供了重要依據(jù)。

3.1.3 波特率的計(jì)算

程序中對波特率的計(jì)算頗有特色,下面是地址FC18H"FC36H之間的源代碼和反匯編程序:

源代碼 反匯編程序

FC18 E5 CC MOV A,TL2
FC1A C4 SWAP A
FC1B 54 0F ANL A,#0FH ;取TL2高4位
FC1D F8 MOV R0,A
FC1E E5 CD MOV A,TH2
FC20 C4 SWAP A
FC21 54 F0 ANL A,#0F0H;取TH2低4位
FC23 48 ORL A,R0
FC24 F8 MOV R0,A ;組合后送入R0
FC25 E5 CD MOV A,TH2
FC27 C4 SWAP A
FC28 54 0F ANL A,#0FH ;取TH2高4位
FC2A F9 MOV R1,A
FC2B E8 MOV A,R0 ;以上程序?qū)崿F(xiàn)T2中數(shù)據(jù)除以
;16,送R1和R0保存
FC2C F4 CPL A ;低位取反
FC2D F5 CC MOV TL2,A
FC2F F5 CA MOV RCAP2L,A
FC31 E9 MOV A,R1
FC32 F4 CPL A ;高位取反
FC33 F5 CD MOV TH2,A
FC35 F5 CB MOV RCAP2H,A

上述程序就是將tp對應(yīng)值轉(zhuǎn)換成波特率的程序,先來看一下波特率是怎樣定義的。定時器2工作在波特率發(fā)生器模式,外部時鐘信號由T2腳進(jìn)入,波特率為

(1)
所以程序中首先將T2中的計(jì)數(shù)值進(jìn)行處理,相當(dāng)于右移4位,將低4位去掉,11FAH變?yōu)?11FH,對應(yīng)式(1)中除以16,送R1和R0保存,然后將R1和R0中的值取反,其值為FEE0H。該值恰恰與根據(jù)式(1)計(jì)算出的數(shù)值相同。將該數(shù)值送T2和RCAP2,即得2400bps對應(yīng)的賦值。

3.1.4 波特率的校驗(yàn)

在波特率確定以后,首先設(shè)定TR2=1以啟動波特率,并對串口控制字進(jìn)行設(shè)定。然后,程序?qū)ζ溥M(jìn)行校驗(yàn)。方法是接收上位機(jī)的數(shù)據(jù)并以設(shè)定波特率回送該值,一方面通知上位機(jī)送出和接收的數(shù)據(jù)是否相同,如果相同,則上位機(jī)認(rèn)為下位機(jī)的波特率設(shè)置正確,通信成功;另一方面程序也將接收的數(shù)據(jù)?quot;U" 的ASCII碼相對照,如果相等,則往下執(zhí)行,如果不等,則繼續(xù)重復(fù)上述過程,直到成功為止,否則進(jìn)入死循環(huán),只有程序復(fù)位才能退出。下面是其源程序與反匯編程序(FC37H至FC40H):

源代碼 反匯編程序

FC37 D2 CA SETB TR2
FC39 75 98 52 MOV SCON,#52H ;方式1,TI=1
FC3C 91 A0 RREV0: ACALL REV_SEND0
FC3E B4 55 FB CJNE A,#55H,RREV0 ;判斷A="U"?

其中,REV_SEND0子程序的功能是接收一個數(shù)據(jù)并回傳給上位機(jī)。由上述程序可以看出,實(shí)際上要通信成功,上位機(jī)至少要向下位機(jī)發(fā)送兩個"U":第一個用于確定波特率,另一個用于校驗(yàn)波特率,并且這兩個字符之間必須隔一段時間,以便于波特率計(jì)算完畢并有效。所以,有關(guān)手冊中關(guān)于ISP第一步要發(fā)送一個"U"來確定波特率的說法本身沒有錯,但如果在編制上位機(jī)程序時,僅僅發(fā)送一個"U"是不能夠通信成功的,特提醒讀者注意。

3.2 命令字的接收

在通信成功后,就可以接收ISP的命令字了。

3.2.1 ISP命令格式說明

ISP編程由Boot ROM中的一系列引導(dǎo)子程序完成。這些子程序采用Intel-Hex記錄格式接收PC主機(jī)的命令和數(shù)據(jù)。Intel-Hex記錄格式上面已經(jīng)有所介紹,其命令格式為
:NNAAAARRDD…DDCC
其中,:NNAAAA以及DDCC的含義皆與上面論述的相同,只需對"RR"作以下說明:
"RR"表示記錄類型,其中
00--數(shù)據(jù)記錄,即傳編程數(shù)據(jù)并完成編程;
01--文件結(jié)束標(biāo)志;
02--指定振蕩器頻率;
03--雜項(xiàng)編程功能,和后面的數(shù)據(jù)相配合完成擦除、加密等功能;
04--顯示指定地址端FLASH的數(shù)據(jù)或做空白檢查;
05--各種讀功能。

3.2.2 命令字的處理

為了更容易看懂,將使用的通用寄存器和部分地址進(jìn)行代換如下:
DATA_ADDRL EQU 30H
DATA_ADDRH EQU 31H
DATA_SUM EQU 32H
DATA_LEN EQU 33H
DATA_FOSC EQU 34H
DATA_MODE EQU 35H
DATA_BUFFER EQU 36H
REV_DAT_ADDR EQU 80H

下面來看一下Boot ROM中的源代碼與反匯編程序。

源程序 反匯編程序

FC41 75 32 00 MAIN: MOV DATA_SUM,#00H;校驗(yàn)和
FC44 91 A0 ACALL REV_SEND0
FC46 B4 3A F8 CJNE A,#3AH,MAIN;判斷A=":"?
FC49 91 79 ACALL REV_DAT1_SUM
FC4B 85 36 33 MOV DATA_LEN,DATA_BUFFER ;33H字節(jié)數(shù)
FC4E 91 79 ACALL REV_DAT1_SUM
FC50 85 36 31 MOV DATA_ADDRH,DATA_ BUFFER ;31H數(shù)據(jù)首地址高8位
FC53 91 79 ACALL REV_DAT1_SUM
FC55 85 36 30 MOV DATA_ADDRL,DATA_ BUFFER ;30H數(shù)據(jù)首地址低8位
FC58 91 79 ACALL REV_DAT1_SUM
FC5A 85 36 35 MOV DATA_MODE,DATA_ BUFFER ;35H數(shù)據(jù)操作類型
FC5D E5 33 MOV A,DATA_LEN
FC5F FA MOV R2,A ;循環(huán)接收數(shù)據(jù)指針
FC60 60 09 JZ RREV3 ;字節(jié)數(shù)=0 轉(zhuǎn)RREV3
FC62 79 80 MOV R1,#REV_DAT_ADDR
FC64 91 79 RREV2: ACALL REV_DAT1_SUM
FC66 A7 36 MOV @R1,DATA_MODE
FC68 09 INC R1
FC69 DA F9 DJNZ R2,RREV2
FC6B AC 32 RREV3: MOV R4,DATA_SUM ;校驗(yàn)和
FC6D 91 79 ACALL REV_DAT1_SUM
FC6F EC MOV A,R4
FC70 B5 36 02 CJNE A,DATA_BUFFER,RREV4
;校驗(yàn)和不等轉(zhuǎn)
FC73 81 BF AJMP RUN_MODE
FC75 74 58 RREV4:MOV A,#58H ; A="X"
FC77 81 FA AJMP SEND_DT

首先,對程序中用到的子程序作如下的說明。
REV_SEND0子程序:接收1個數(shù)據(jù)并回傳給上位機(jī);
REV_DAT1_SUM子程序:接收2個ASCII字符并回傳,將2個ASCII碼合成1字節(jié)二進(jìn)制數(shù)并計(jì)算校驗(yàn)和;
SEND_DT:該地址執(zhí)行送字符"X"給上位機(jī);
RUN_MODE:該地址解釋并執(zhí)行命令字。

對上段程序分析如下:首先,將校驗(yàn)和單元清零,開始接收第1個ASCII碼,并判斷是否為":"。如果是,則說明是一個命令字的開始,下面便依次接收字節(jié)數(shù)DATA_LEN、數(shù)據(jù)首地址高8位DATA_ ADDRH、數(shù)據(jù)首地址低8位DATA_ADDRL和數(shù)據(jù)操作類型DATA_MODE。這跟其命令字格式是完全對應(yīng)的。然后,程序根據(jù)接收數(shù)據(jù)字節(jié)數(shù) DATA_ LEN來決定下面的數(shù)據(jù)接收,并將接收的數(shù)據(jù)存儲在從80H開始的內(nèi)部數(shù)據(jù)存儲器中,以備下一步的處理。最后,進(jìn)入校驗(yàn)和的接收,將程序計(jì)算所得的校驗(yàn)和與上位機(jī)傳輸?shù)男r?yàn)和作比較,如果不等,回傳"X"字符,通知上位機(jī)進(jìn)行異常處理;如果相等,則轉(zhuǎn)入相應(yīng)的命令執(zhí)行。

3.3 命令的執(zhí)行

命令解釋和執(zhí)行的源代碼和反匯編程序如下:

源程序 反匯編程序

FCBF E5 35 RUN_MODE: MOV A,DATA_MODE
;35H數(shù)據(jù)操作類型
FCC1 23 RL A ;A=A*2
FCC2 90 FC C6 MOV DPTR,#BASE_ADDR ;程序散轉(zhuǎn)
FCC5 73 JMP @A+DPTR
FCC6 81 D4 BASE_ADDR: AJMP PRO_DATA
;00=傳送編程數(shù)據(jù)并完成編程
FCC8 81 F8 AJMP SEND_CHAR_OK
;01=傳文件結(jié)束符
FCCA 81 FE AJMP SETUP_FOSC
;02=指定振蕩器頻率
FCCC A1 70 AJMP MPRO_DAT
;03=雜項(xiàng)編程功能
FCCE A1 04 AJMP READ_CHECK
;04=顯示指定地址段FLASH數(shù)據(jù)或查空
FCD0 A1 9F AJMP READ_DATA
;05=各種讀功能
FCD2 A1 B3 AJMP SETUP_BPS
;06=直接裝載波特率

在正確地接收命令后,通過DATA_MODE項(xiàng)(即命令格式中的RR)來判斷功能并轉(zhuǎn)入相應(yīng)的程序。程序中對每一個跳轉(zhuǎn)地址都作出了相應(yīng)的注釋。

4 幾點(diǎn)說明

① 上述帶源代碼的程序均是Boot ROM中反匯編得來的,并且大部分是連續(xù)的。這一點(diǎn)可以從地址分布上看出來,讀者可以將其合并在一起看,相信可以加強(qiáng)理解。有興趣的讀者也可以參照以上給出的方法將全部代碼讀出,電路圖和源程序幾乎都不必重編了。

② Boot ROM中既包括了ISP的程序,也包括了IAP的程序。限于篇幅,只給出了ISP的部分源程序,部分子程序只作了說明而未列出源程序。
本文地址:http://m.qingdxww.cn/thread-19922-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 深度體驗(yàn)Microchip自動輔助駕駛應(yīng)用方案——2025巡展開啟報(bào)名!
  • 你仿真過嗎?使用免費(fèi)的MPLAB Mindi模擬仿真器降低設(shè)計(jì)風(fēng)險
  • Cortex-M4外設(shè) —— TC&TCC結(jié)合事件系統(tǒng)&DMA優(yōu)化任務(wù)培訓(xùn)教程
  • 更佳設(shè)計(jì)的解決方案——Microchip模擬開發(fā)生態(tài)系統(tǒng)
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩精品高清一区二区 | 一卡二卡四卡免费视频 | 免费不卡视频 | 免费日韩网站 | 精品国产欧美精品v | 日韩在线视频不卡一区二区三区 | 精品欧美一区二区三区免费观看 | 国内精品免费麻豆网站91麻豆 | 亚洲成人精品久久 | 91香蕉视频免费在线观看 | 亚洲第一狼人社区 | 在线 色| 日韩一区精品 | 久久精品视频免费播放 | 亚洲欧美高清视频 | 国产欧美日韩精品专区 | 国产一区二区免费福利片 | 免费福利在线观看 | 黄视频网站在线观看 | 国内啪啪| 97免费在线观看视频 | 91免视频| 天天操妹子 | 男人的天堂久久精品激情 | 妈妈的朋友韩国在线 | 一级一级特黄女人精品毛片 | 日韩毛片久久91 | 亚洲欧美日韩不卡一区二区三区 | 2021国产麻豆剧集 | 久久精品福利视频 | 成人免费一区二区三区在线观看 | 国产在线色 | 日韩欧美久久一区二区 | 精品日韩在线视频 | 国产三级在线 | 欧美激情综合 | 在线免费h视频 | 在线免费观看日本 | 亚洲福利国产精品17p | 国产中文欧美 | 国产美女在线精品观看 |