<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > P89C51RD2隱藏分區的讀取方法

P89C51RD2隱藏分區的讀取方法

作者: 時(shí)間:2011-08-15 來(lái)源:網(wǎng)絡(luò ) 收藏

  1 引 言

  是PH ILIPS 公司的8位單片機產(chǎn)品。在保證80C51指令系統和硬件結構的大體框架的同時(shí), 擴充了許多功能, 包括看門(mén)狗、ISP功能和F lash操作。值得一提的是, PH ILIPS的技術(shù)并非完全公開(kāi), 這就給單片機的使用帶來(lái)了一定的困難。

  比如說(shuō), 它的Boot ROM 區本來(lái)是4K 字節, 但在手冊中只提及了1K 字節, 其他部分程序隱藏調用, 這就給程序設計帶來(lái)了很大的麻煩。同時(shí), 除了手冊中提及的高位地址特殊寄存器區, 還設計了一些特殊功能寄存器, 對這些寄存器的意外訪(fǎng)問(wèn)也有可能造成芯片的異常。因此, 有必要對這些功能區進(jìn)行分析, 以找出其所有單片機資源。

  2 Boo tROM 固件代碼的讀出

  對于1K ( 地址FC00H ~ FFFFH ) Boot ROM 的flash代碼, 參考文獻已經(jīng)有提及, 這里只是在此基礎上進(jìn)行進(jìn)一步分析。下面來(lái)看PGM _MTP入口地址的部分代碼。

  PUSH 0E4H ; 保存E4H值

  ORL 0E 4H, # 80H ; 置位E4H 最高位

  PUSH PSW

  ACALL 0F9ADH ; 調用看門(mén)狗服務(wù)程序

  C JNE R1, # 00H, 0FF4FH

  ACALL 0F9D9H ; 讀生產(chǎn)批號子程序

  通過(guò)這部分程序可以看出, Boo tROM 區調用了0F9ADH 地址中的子程序, 而從手冊上, 只寫(xiě)出有FC00H ~ FFFFH 地址。所以, 這是一個(gè)需要特殊訪(fǎng)問(wèn)的flash區。同時(shí), 程序還控制了E4H, 這個(gè)特殊功能寄存器也是手冊里面沒(méi)有提及的。鑒于有專(zhuān)門(mén)的控制位來(lái)控制1K flash, 假設還有一個(gè)控制位, 位于E4H 的最高位, 也是通過(guò)置位方式, 能夠得到flash切換的效果, 只要程序中首先置位了E 4H, 就可以通過(guò)movc 指令得到隱藏區的程序。實(shí)踐證明這個(gè)假設是對的, 從F000H ~FFFFH 都讀出了數據, 其中F000H ~ F7FFH 地址中全為0。而F800H ~ FBFFH中存在1K 可執行程序,并且這些程序就是PGM _MTP調用的隱藏子程序。

  通過(guò)反匯編這一區間程序, 可以找到全部flash底層操作的程序。所以實(shí)際的P89C51RD2的f lash 空間分布應該如圖1所示。

P89C51RD2隱藏分區的讀取方法

  手冊里面1K 字節的Boo t ROM 區, 實(shí)際上是由一個(gè)4K 的flash塊構成的, 其中2K 字節的flash最終被填寫(xiě)進(jìn)00H, 另外2K 用于實(shí)現Boot ROM 的實(shí)際操作。所以, 用戶(hù)也可以將這2K 的地址空間, 作為用戶(hù)的使用空間, 存放一些需要保留的重要數據。

  3 部分子程序分析

  P89C51RD2多余的1K 程序空間寫(xiě)滿(mǎn)了程序。

  這些程序都是由FFF0的子程序調用的。通過(guò)反匯編這一段子程序, 能夠知道單片機的底層操作細節。

  由于篇幅所限, 這里面僅列出flash寫(xiě)操作的部分程序, 有興趣的讀者可以依照上面的方法反匯編所有程序進(jìn)行分析。以下是編程數據字節子程序的反匯編結果。

  ; 編程數據字節一級子程序

  F9C9: 75 E4 91MOV 0E4H, # 91H ; E4H 未公開(kāi)

  F9CC: 31 D1 ACALL 0F9D1H ;

  F9CE: 65 E5 XRL A, 0E5H ; 返回E5H 參數

  F9D0: 22 RET

  ; 編程數據字節二級子程序

  F9D1: F5 E5MOV 0E5H, A

  F9D3: 31 25 ACALL 0F925H ; 多入口子程序,連續寫(xiě)和讀E6H, flash操作

  F9D5: 75 E4 80MOV 0E4H, # 80H

  F9D8: 22 RET

  ; 編程數據字節三級子程序

  F925: C0 F0 PUSH B

  F927: C0 E0 PUSH ACC

  F929: 31 83 ACALL 0F983H ; flash1

  F92B: 75 F0 05MOV B, # 05H

  F92E: 31 A3 ACALL 0F9A3H ; 看門(mén)狗子程序

  F930: E5 E6MOV A, 0E6H

  F932: 54 08 ANL A, # 08H

  F934: 60 03 JZ 0F939H

  F936: D5 F0 F5 DJNZ B, 0F92EH

  F939: 31 93 ACALL 0F993H ; flash2

  F93B: 31 9B ACALL 0F99BH ; flash3

  F93D: D0 E0 POP ACC

  F93F: D0 F0 POP B

  F941: 22 RET

  ; flash底層操作1

  F983: 75 E6 C0MOV 0E6H, # 0C0H

  F986: 00 NOP

  F987: 75 E6 D0MOV 0E6H, # 0D0H

  F98A: 00 NOP

  F98B: 00 NOP; 這里面較多的NOP 起延遲作用

  F992: 22 RET

  ; flash底層操作2

  F993: 75 E6 C0MOV 0E6H, # 0C0H

  F996: 00 NOP

  F997: 75 E6 E 0MOV 0E6H, # 0E0H

  F99A: 22 RET

  ; flash底層操作3

  F99B: 75 E6 C0MOV 0E6H, # 0C0H

  F99E: 00 NOP

  F99F: 75 E6 00MOV 0E 6H, # 00H

  F9A2: 22 RET

  上面的flash 區寫(xiě)字節子程序, 動(dòng)用了E4H、E5H 和E6H 三個(gè)隱藏的特殊功能寄存器, 其中E4寄存器帶入狀態(tài), E5寄存器返回結果, E 6寄存器用于發(fā)布實(shí)際的寫(xiě)操作命令。這就要求在程序設計中, 一定注意不能隨便對上述地址做操作, 否則可能會(huì )意外改寫(xiě)程序區。同時(shí), 從程序中也可以看到, 每一個(gè)具體的子程序操作, 到底使用了多大的堆??臻g。在程序設計中, 遇到調用寫(xiě)f lash 子程序時(shí), 有了對堆棧使用情況的了解, 可以防止堆棧的溢出, 對堆棧的設計考慮起輔助作用。

  4 結論與展望

  通過(guò)對P89C51RD2的分析可以看出, 在單片機功能增加方面, 采用的設計方法就是擴展高位地址特殊功能寄存器, 而這種方法幾乎應用在所有80C51架構和指令集的擴展型單片機中。由于能夠讀出P89C51RD2的所有程序, 實(shí)際應用中可以將Boot ROM 區轉移到其他地址, 或者為用戶(hù)擴展2K的隱藏空間。從分析中還可以發(fā)現, flash 區的隱藏, 是通過(guò)特殊寄存器的控制位切換來(lái)實(shí)現的。因此, 這一讀出Boot ROM 區的方法, 也可以應用于分析其他型號單片機的flash區。



關(guān)鍵詞: P89C51RD2 隱藏分區 讀取方法

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>