在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

P89C51RD2的Boot ROM固件代碼的讀出方法和ISP功能分析

牽手一起夢 ? 來源:單片機與嵌入式系統應用 ? 作者:劉濱,綦聲波 ? 2020-10-04 17:36 ? 次閱讀

1 概 述

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

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

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

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

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

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

ENBOOT=0 地址在0FC00H“0FFFFH范圍,尋址到FLASH

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

(1)硬件部分

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

(2)軟件編制

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

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

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

則轉換成HEX文件格式為:

:10FC000075890275C830E4F5CDF5CC30B0FD20B073

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

所有HEX格式文件的最后一行為結尾行,它比較特殊,總是如下所示:

:00000001FF

讀Boot ROM代碼的主程序編制如下:

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

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

讀Boot ROM代碼所調用的子程序網上查找下。

3 Boot ROM固件的功能分析

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

3.1 關于自動確定波特率

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

3.1.1 工作原理

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

3.1.2 tp對應的計數值

首先看一下在Boot ROM中是如何計算一個位所對應的計數值的。以下為Boot ROM從地址FC00H ”FC17H之間的源代碼及反匯編程序:

源代碼 反匯編程序

FC00 75 89 02 MOV TMOD,#02H ;T1工作模式2,定時器

FC03 75 C8 30 MOV T2CON,#30H ;T2工作為串行口波特

;率發生器

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,則等待,

;直到其變為1

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 ;關閉T2定時器,此時

;T2中的數值為tp

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

3.1.3 波特率的計算

程序中對波特率的計算頗有特色,下面是地址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 ;以上程序實現T2中數據除以

;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對應值轉換成波特率的程序,先來看一下波特率是怎樣定義的。定時器2工作在波特率發生器模式,外部時鐘信號由T2腳進入,波特率為

(1)

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

3.1.4 波特率的校驗

在波特率確定以后,首先設定TR2=1以啟動波特率,并對串口控制字進行設定。然后,程序對其進行校驗。方法是接收上位機的數據并以設定波特率回送該值,一方面通知上位機送出和接收的數據是否相同,如果相同,則上位機認為下位機的波特率設置正確,通信成功;另一方面程序也將接收的數據?quot;U” 的ASCII碼相對照,如果相等,則往下執行,如果不等,則繼續重復上述過程,直到成功為止,否則進入死循環,只有程序復位才能退出。下面是其源程序與反匯編程序(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子程序的功能是接收一個數據并回傳給上位機。由上述程序可以看出,實際上要通信成功,上位機至少要向下位機發送兩個“U”:第一個用于確定波特率,另一個用于校驗波特率,并且這兩個字符之間必須隔一段時間,以便于波特率計算完畢并有效。所以,有關手冊中關于ISP第一步要發送一個“U”來確定波特率的說法本身沒有錯,但如果在編制上位機程序時,僅僅發送一個“U”是不能夠通信成功的,特提醒讀者注意。

3.2 命令字的接收

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

3.2.1 ISP命令格式說明

ISP編程由Boot ROM中的一系列引導子程序完成。這些子程序采用Intel-Hex記錄格式接收PC主機的命令和數據。Intel-Hex記錄格式上面已經有所介紹,其命令格式為

:NNAAAARRDD…DDCC

其中,:NNAAAA以及DDCC的含義皆與上面論述的相同,只需對“RR”作以下說明:

“RR”表示記錄類型,其中

00--數據記錄,即傳編程數據并完成編程;

01--文件結束標志;

02--指定振蕩器頻率;

03--雜項編程功能,和后面的數據相配合完成擦除、加密等功能;

04--顯示指定地址端FLASH的數據或做空白檢查;

05--各種讀功能。

3.2.2 命令字的處理

為了更容易看懂,將使用的通用寄存器和部分地址進行代換如下:

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;校驗和

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字節數

FC4E 91 79 ACALL REV_DAT1_SUM

FC50 85 36 31 MOV DATA_ADDRH,DATA_ BUFFER ;31H數據首地址高8位

FC53 91 79 ACALL REV_DAT1_SUM

FC55 85 36 30 MOV DATA_ADDRL,DATA_ BUFFER ;30H數據首地址低8位

FC58 91 79 ACALL REV_DAT1_SUM

FC5A 85 36 35 MOV DATA_MODE,DATA_ BUFFER ;35H數據操作類型

FC5D E5 33 MOV A,DATA_LEN

FC5F FA MOV R2,A ;循環接收數據指針

FC60 60 09 JZ RREV3 ;字節數=0 轉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 ;校驗和

FC6D 91 79 ACALL REV_DAT1_SUM

FC6F EC MOV A,R4

FC70 B5 36 02 CJNE A,DATA_BUFFER,RREV4

;校驗和不等轉

FC73 81 BF AJMP RUN_MODE

FC75 74 58 RREV4:MOV A,#58H ; A=“X”

FC77 81 FA AJMP SEND_DT

首先,對程序中用到的子程序作如下的說明。

REV_SEND0子程序:接收1個數據并回傳給上位機;

REV_DAT1_SUM子程序:接收2個ASCII字符并回傳,將2個ASCII碼合成1字節二進制數并計算校驗和;

SEND_DT:該地址執行送字符“X”給上位機;

RUN_MODE:該地址解釋并執行命令字。

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

3.3 命令的執行

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

源程序 反匯編程序

FCBF E5 35 RUN_MODE: MOV A,DATA_MODE

;35H數據操作類型

FCC1 23 RL A ;A=A*2

FCC2 90 FC C6 MOV DPTR,#BASE_ADDR ;程序散轉

FCC5 73 JMP @A+DPTR

FCC6 81 D4 BASE_ADDR: AJMP PRO_DATA

;00=傳送編程數據并完成編程

FCC8 81 F8 AJMP SEND_CHAR_OK

;01=傳文件結束符

FCCA 81 FE AJMP SETUP_FOSC

;02=指定振蕩器頻率

FCCC A1 70 AJMP MPRO_DAT

;03=雜項編程功能

FCCE A1 04 AJMP READ_CHECK

;04=顯示指定地址段FLASH數據或查空

FCD0 A1 9F AJMP READ_DATA

;05=各種讀功能

FCD2 A1 B3 AJMP SETUP_BPS

;06=直接裝載波特率

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

4 幾點說明

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

② Boot ROM中既包括了ISP的程序,也包括了IAP的程序。限于篇幅,只給出了ISP的部分源程序,部分子程序只作了說明而未列出源程序。

責任編輯:gt

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6040

    文章

    44594

    瀏覽量

    636924
  • 可編程
    +關注

    關注

    2

    文章

    872

    瀏覽量

    39864
收藏 人收藏

    評論

    相關推薦

    P89V51RD2芯片資料

    本帖最后由 wlong123 于 2014-4-4 19:45 編輯 其中包括P89V51 系列單片機ISP 下載簡明操作步驟,P89V51RD2中文資料。
    發表于 04-04 19:37

    如何去實現Boot ROM中的ISP功能

    Boot ROM固件代碼讀出方法 Boot
    發表于 04-26 06:39

    基于P89C51RD2 IAP功能的數據存取與軟件升級

    分析Boot ROM 中的部分源代碼, 重點是IAP 功能以及ISP 和IAP 的相互關系; 應
    發表于 04-16 13:54 ?16次下載

    基于P89C51RD2 IAP 功能的數據存取與軟件升級

    分析Boot ROM 中的部分源代碼, 重點是IAP 功能以及ISP 和IAP 的相互關系; 應
    發表于 05-14 15:22 ?20次下載

    P89C51RD2 中的WatchDog 用法

    P89C51RD2 中的WatchDog 用法
    發表于 05-15 13:29 ?21次下載

    P89C51RA2/RB2/RC2/RD2xx,中文資料,p

    P89C51RA2/RB2/RC2/RD2xx 具有8K/16K/32K/64K 并行可編程的非易失性FLASH 程序存儲器并可實現對器件串行在系統編程
    發表于 07-24 11:52 ?62次下載

    P89C51Rx2xx硬件進入ISP方法

    P89C51Rx2xx是具有ISP功能的FLASH單片機,使用ISP功能可以實現在系統中更新應用程序。進入
    發表于 11-18 11:31 ?33次下載

    如何在C語言中調用P89V51RD2的IAP功能

    P89V51RD2具有IAP(在應用中編程)功能,用戶通過在應用程序中調用IAP子程序,可實現有選擇的對FLASH塊進行擦除和編程。P89V51RD2的bootrom區為0000H~1FFFH,為避免和用戶的程序
    發表于 11-18 11:36 ?42次下載

    如何使用P89V51RD2單片機

    P89V51RD2器件含有2個內部Flash存儲模塊,可實現對器件在系統編程(ISP)和在應用中編程(IAP)。模塊0有64K字節,用來存放用戶代碼;模塊1有8K字節,用來存放Phil
    發表于 06-28 22:25 ?69次下載

    P89C51RD2單片機引腳與封裝

    P89C51RD2單片機引腳與封裝 DIP40 PIN
    發表于 03-29 09:22 ?3478次閱讀
    <b class='flag-5'>P89C51RD2</b>單片機引腳與封裝

    P89V51RD2微處理器

    P89V51RD2是Philips公司生產的一款80C51微控制器, 包含64KB Flash和1024字節的數據RAM。P89V51RD2的典型特性是它的X2方式選項。 利用該特
    發表于 08-11 17:53 ?1150次閱讀

    P89C51RD2隱藏分區的讀取方法

    P89C51RD2是PH ILIPS 公司的8位單片機產品。在保證80C51指令系統和硬件結構的大體框架的同時, 擴充了許多功能, 包括看門狗、ISP
    發表于 01-21 11:42 ?1342次閱讀
    <b class='flag-5'>P89C51RD2</b>隱藏分區的讀取<b class='flag-5'>方法</b>

    P89C51RD2Boot ROMISP功能的實現

    P89C51RD2是PHILIPS公司內核基于8位80C51單片機的派生產品它在完全保留80C51指令系統和硬件結構的大框架外發生了多方面的加強擴展翻新和創新在最大限度地利用原有的結構的方方面面可以
    發表于 04-07 23:29 ?39次下載

    P89V51RD2器件手冊

    P89V51RD2是一款80C51微控制器,包含64kB Flash和1024字節的數據RAM。P89V51RD2的典型特性是它的X2方式選項。利用該特性,設計者可使應用程序以傳統的8
    發表于 12-09 10:39 ?76次下載
    <b class='flag-5'>P89V51RD2</b>器件手冊

    基于P89C51RD2可定制、廉價的人機交互界面設計

    本文論述的基于P89C51RD2的人機交互界面是一種界面可定制、結構緊湊、價格低廉、簡單易用、性能優良的通用型人機交互界面。
    發表于 03-22 08:58 ?2052次閱讀
    主站蜘蛛池模板: 日本在线视| 奇米狠狠操| 在线看av网址| xyx性爽欧美视频| 亚洲一区免费看| 精品一区二区三区18| 成人黄性视频| 韩国三级中文| youjizz国产| 天天干天天射天天操| 在线免费看| 亚洲偷自偷白图片| www.天天色| 狠狠狠狠狠狠| 欧美综合国产精品日韩一| 欧美性天天影视| 韩国床戏合集三小时hd中字| 丁香花在线影院观看在线播放| 午夜影视在线| 久久精品国产福利| 免费看久久| 欧美成人免费观看bbb| 国产亚洲情侣久久精品| 免费特黄视频| 小草影院亚洲私人影院| 欧亚精品卡一卡二卡三| 亚洲先锋资源| 优优色综合| 在线成人亚洲| 日韩一级片在线| 国产成人精品日本亚洲直接| 国产精品日韩欧美亚洲另类| 亚洲高清在线视频| 福利99| 男女在线视频| 精品国产成人三级在线观看| 亚洲人成电影在线观看网| 性生大片一级毛片免费观看| 欧美午夜视频在线| 成人99| 精品福利在线观看|