P89C51RD2隐藏分区的读取方法

P89C51RD2隐藏分区的读取方法,第1张

  1 引 言

  P89C51RD2是PH ILIPS 公司的8位单片机产品。在保证80C51指令系统和硬件结构的大体框架的同时, 扩充了许多功能, 包括看门狗、ISP功能和F lash *** 作。值得一提的是, PH ILIPS的技术并非完全公开, 这就给单片机的使用带来了一定的困难。

  比如说, 它的Boot ROM 区本来是4K 字节, 但在手册中只提及了1K 字节, 其他部分程序隐藏调用, 这就给程序设计带来了很大的麻烦。同时, 除了手册中提及的高位地址特殊寄存器区, P89C51RD2 还设计了一些特殊功能寄存器, 对这些寄存器的意外访问也有可能造成芯片的异常。因此, 有必要对这些功能区进行分析, 以找出其所有单片机资源。

  2 Boo tROM 固件代码的读出

  对于1K ( 地址FC00H ~ FFFFH ) Boot ROM 的flash代码读取方法, 参考文献已经有提及, 这里只是在此基础上进行进一步分析。下面来看PGM _MTP入口地址的部分代码。

  PUSH 0E4H ; 保存E4H值

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

  PUSH PSW

  ACALL 0F9ADH ; 调用看门狗服务程序

  C JNE R1, # 00H, 0FF4FH

  ACALL 0F9D9H ; 读生产批号子程序

  通过这部分程序可以看出, Boo tROM 区调用了0F9ADH 地址中的子程序, 而从手册上, 只写出有FC00H ~ FFFFH 地址。所以, 这是一个需要特殊访问的flash区。同时, 程序还控制了E4H, 这个特殊功能寄存器也是手册里面没有提及的。鉴于P89C51RD2有专门的控制位来控制1K flash, 假设还有一个控制位, 位于E4H 的最高位, 也是通过置位方式, 能够得到flash切换的效果, 只要程序中首先置位了E 4H, 就可以通过movc 指令得到隐藏区的程序。实践证明这个假设是对的, 从F000H ~FFFFH 都读出了数据, 其中F000H ~ F7FFH 地址中全为0。而F800H ~ FBFFH中存在1K 可执行程序,并且这些程序就是PGM _MTP调用的隐藏子程序。

  通过反汇编这一区间程序, 可以找到全部flash底层 *** 作的程序。所以实际的P89C51RD2的f lash 空间分布应该如图1所示。

P89C51RD2隐藏分区的读取方法,第2张
 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2491432.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-04
下一篇 2022-08-04

发表评论

登录后才能评论

评论列表(0条)

保存