新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > P89C51RD2的Boot ROM与ISP功能的实现

P89C51RD2的Boot ROM与ISP功能的实现

作者:时间:2012-04-09来源:网络收藏

1 概 述

本文引用地址:http://www.eepw.com.cn/article/171672.htm

是PHILIPS公司内核基于8位80C51单片机的派生产品,在完全保留80C51指令系统和硬件结构的大框架下,进行了多方面的加强、扩展和创新,最大限度地利用了原有结构的方方面面。将原有的对外数据和程序存储器的 16位寻址机制加以利用,把片上的RAM扩展到1KB、片上的FLASH EP扩展到64KB,满足当今用嵌入式高级语言对片上大存储容量的需要。

最显著的特点莫过于其(In-System Programming,在系统可编程)和IAP(In-Application Programming,在应用可编程)指电路板上的空白器件可以编程写入最终用户代码,而不需要从电路板上取下器件,已经编程的器件也可以用方式擦除或再编程。IAP指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。ISP和IAP技术是未来仪器仪表的发展方向。PHILIPS公司为了使ISP技术和IAP技术得以推广,在芯片上免费提供了 固件,并且巧妙地解决了固件和FLASH的地址覆盖问题及一些具体细节问题,使它们的变得简单而现成。

对于 中的内容,PHILIPS公司是不公开的。但很多技术人员对于 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搭一个包括复位、晶振和串口通信功能的基本硬件系统,如图1所示。ICL232为单电源串口转换芯片,可以完成TTL电平与RS-232C电平之间的转换。

44.jpg

(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代码的主程序编制如下:
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作为波特率发生器
MOV TL2,#0E0H ;波特率为2400 bps
MOV TH2,#0FEH
MOV RCAP2L,#0E0H
MOV RCAP2H,#0FEH
SETB TR2 ;启动T2
MAIN: LCALL READ_ROM ;Boot ROM内容读出子程序
LCALL SEND_END ;结尾行送出子程序
AJMP $

主程序中用到了两个子程序: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相间的数据,如图2所示。如果能够算出其一个位的传输时间tp,则对应的波特率就可以计算出来。

45.jpg


上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭