P89LPC922自编ISP代码的研究

2007-03-09 19:03:27来源: 互联网
随着微控制器应用领域的不断扩展和深入,对其各方面性能的要求也逐渐提高。目前,越来越多种类的微控制器具有ISP(In System Programrning)即在系统编程功能。ISP编程时不需要将微控制器从目标系统中移出,并且只需要有限的几个引脚与外界相连,最大限度减少了额外的元件开销和电路板面积,使微控制器产品的开发和具体应用相当方便。本文将分析P89LPC922预设ISP代码的优缺点,进一步结合应用的实际情况,研究自编ISP代码的方案,并给出具体的实现方法,对于由Ps9LPC922构成的微控制器系统具有很强的实用价值。 1 P89LPC922预设ISP代码功能分析 P89LPC922是一款由Philips公司生产的单片封装的微控制器。它采用高性能的处理器结构,集成了包括ISP功能在内的许多系统级功能,适合于许多要求高集成度、低成本的场合,可以满足多方面的性能要求。 P69LPC922在出厂时,用户代码空间的高512字节包含了一个串行ISP子程序,允许器件在电路中通过串行口进行编程。应用ISP功能时,需要使用芯片的5个引脚(Vdd、Vss、TxD、RxD、RST),并且需要一个连接器与计算机串口相连。 为了使器件进入ISP状态,必须在上电时给复位引脚3个准确定时的低电平脉冲。脉冲数目只能是3个,少于或多于3个脉冲都会导致器件无法进入ISP模式。另外一种进入ISP模式的方法是利用串口间隔检测功能使芯片复位,并使器件强制进入ISP模式。但这种方法需要在用户程序中进行相应的功能设置,而P89LPC922预设的ISP代码并不支持这种方式。 进入ISP模式后,虽然可以对接收到的特定字符进行波特率的自动设定,但这个波特率的设定参数只有1个字节,波特率的范围受到一定的限制。另外,ISP串口工作在模式1状态,波特率设定后只接收Intel-Hex格式的记录。 由上述分析可知,P89LPC922预设ISP功能虽然比较完善,可以满足芯片开发阶段的应用,但如果产品定型后,特别是在将其做为联网系统中下位机的实际现场,要进行用户程序代码的更新下载将很不方便,有些功能甚至根本不能实现。这主要体现在以下几个方面: ◇必须在上电时才能进入ISP模式,不适合远程控制; ◇需要使用复位引脚,且相应控制时序严格; ◇波特率范围有一定限制; ◇无地址选项,不支持系统联网; ◇只支持Intel-Hex格式,通信效率较低。 2 自编ISP代码方案 P89LPC922具有非常完善的硬件系统,给使用者编写自己的ISP代码提供了相当大的自由度。下面以P89LPC922组成的485总线联网系统为例,给出自编ISP代码的功能要求: ◇硬件上不使用复位引脚,只用串口收发两线连接即可; ◇不必上下电,随时都可使器件进入ISP模式; ◇自动判断设定通信波特率,波特率应有十种; ◇器件有地址,并且这个地址可随时查询、修改; ◇可实现用户代码的擦除、写、校验、加密的功能。 其中,485总线联网系统的上位机为计算机,下位机为P89LPC922。 为了实现上述功能,必须解决以下几个问题: ◇代码存储区如何分配; ◇芯片地址的规划及处理; ◇进ISP方法; ◇自动判定波特率方法; ◇串口工作方式及通信协议的确定; ◇ISP代码加密及配置字确定。 2.1 代码存储区的分配 为了不影响用户的程序代码编写,自编ISP代码应用于程序存储区的高端。当然,不同的自编ISP代码需要不同大小的存储空间。这里规定自编ISP代码的地址空间为1COOH"lFFFH,共l KB,即第7扇区的全部。其中ISP入口地址为1FOOH。 2.2 芯片地址的规划及处理 因P89LPC922的程序存储空间可做为数据存储器使用,那么即可将第6扇区的最后16字节倣为ISP与用户程序共用的数据空间,地址为1BFOH"1BFFU。其中,地址lBFAH存放芯片地址,地址1BFBH存放芯片地址取反。例如,芯片地址为0lH,则(1BFAH)=01H,(1BFBH)=0FEH。地址取反后再存放是为了用户程序读出时判断地址合法性使用,从而增加可靠性。 2.3 进入ISP方法 因功能要求不能利用复位引脚方式进入ISP模式,所以只能将引导状态设为l,引导向量设为lFH。这样,每次上电复位或其他复位时,程序固定从lF00H地址开始执行,即复位后芯片首先进入ISP模式,执行ISP代码。在执行完ISP过程或在规定的时间(如2s)内没有进行任何ISP操作,程序都将转到地址O去执行用户程序代码。在转到地址O即执行用户程序代码之前,将串口间隔检测功能设置完毕,这样,在执行用户程序代码时即可通过串口间隔检测功能,使芯片复位后进入ISP模式。下面为串口间隔检测功能设置的相关程序。 ANL SSTAT,#OFAH ;清除BR位,SSTAT.2 MOV BRGCON,#00H ;关波特串发生器 ORL AUXRl,#40H ;置位EBRR位,当检测到UART ;间隔信号时即进行复位 MOV SCON,#50H ;设置串口为工作方式1(也可为;方式2或方式3),允许串口接收 MOV BRGRl,#05H ;设置串口波特率4800(也可为;其他值) MOV BRGRO,#0fOH MOV BRGCON,#03H ;打开并使用串口波特率发生器 由上述程序可知,ISP代码并不影响用户程序对串口的使用,用户程序可以对串口工作方式及波特率进行重新设定,同时用户程序也不会影响利用串口喑隔检测功能进入ISP模式。实际使用中,上位机发送0信号0.5s,然后恢复为1信号,即可使串口检测到间隔信号,从而使芯片复位后进入ISP代码程序。 2.4自动判定波特率 下位机(即P89LPC922)复位后,在规定的时间(如2s内,上位机按照用户设定的波特串向下位机发送l字节址帧,此地址帧为85(十六进制为55H)。下位机根据此地址帧判定设置自己的波特率。 首先,设置定时器Tl为模式l,设置16位计数器并将其清零。然后判断接收引脚RXD是否为低电平,如为低电平继续判断等待RXD为高电平。实际这一过程为判断上位机发送地址帧的起始位,同时也是一种防干扰的措施。接下来在RXD的下降沿启动定时器Tl,在RXD的下一个下降沿关闭定时器T1。这时定时器Tl的16位计数器的值即为以当前波特率发送2位数据的时间。固定时器的时钟源为独立的波特率发生器时钟源的二分频,因而此时定时器Tl的16位计数器的值即为波特率发生器速率寄存器BRGRl、BRGR0的值加上16。 当然,根据这种方法所得到的16位计数器的值与理论上的波特率所确定的值存在微小偏差。为了使所设定的波特率与理论值完全相同,可以根据功能要求的十种波恃串计算出理论值,再与16位计数器的值进行比较,然后将理论值写入寄存器BRGR1及BRGR0,从而使设定的波特率百分之百准确。 2.5 串口工作方式及通信协议的确定 对于联网系统,串口需要设为模式3状态。上位机与下位机的每一次通信都按照“命令一响应”方式进行,上位机发出“命令”,下位机以“响应”方式进行应答。 单个数据帧由11位组成,格式如下: 1个起始位+8个数据位+1个标识位+1个停止位 其中,标识位=l表示此帧为地址帧,标识位=0表示此帧为数据帧。 通信开始时,下位机处于地址帧接收模式,上位机发送l字节地址帧做为点名包命令,点名地址帧范围即下位机地址范围为1"255;下位机接收到点名包后与自己的地址进行比较,如相符,则把地址帧接收模式改为地址帧和数据帧都可以接收的模式,并将自己的地址做为1字节数据帧应答发送给上位机。上位机收到后判断与所发送的地址一致、上位机则开始以数据帧模式发送各种命令,与下位机进行通信。下位机进入ISP状态后,如收到与自己地址不相符的地址帧,而且此地址不等于0,则转到地址0去执行用户程序代码。如果地址等于0,下位机则把地址帧接收模式改为地址帧和数据帧都可以接收的模式,并将自己的当前地址做为l字节数据帧应答发送给上位机,从而完成下位机地址查询功能。 注意,上位机发送O地址时只能连接一台下位机。 根据功能要求,上位机发送给下位机的命令应有地址修改、扇区擦除、写用户程序代码、读用户程序代码、扇区加密和程序下载完毕六种。其中,上位机执行下载完毕命令,下位机返回下载完毕响应后,下位机转到地址0去执行用户程序代码。 至于命令包格式,可由用户自己编写。这里给出一种典型的命令包格式: 包标识+包地址+包命令+包长度+包数据+包校验。另外,ISP代码文件推荐为二进制格式文件,这样可以减少相应程序的复杂程度。 2.6 ISP代码加密及配置字确定 ISP代码编写完毕后,需要由编程器写入P89LPC922。在编程前需要进行相关配置字的设定,包括用户配置字节,用户保密字节,引导向量及引导状态。 其中,引导向量为1FH,引导状态为01H。为了防止用户擦除或改写ISP代码,用户保密字节的7扇区应为07H,即禁止对ISP代码进行擦除和读写操作.其他扇区的用户保密字节可为OOH,即不设保密状态,而由用户通过通信协议的扇区加密命令自由设定。用户配置字节为0A3H,即看门狗复位功能使能,掉电检测使能,复位引脚做为输入引脚,使用内部RC振荡器。 综上所述,完全可以利用P89LPC922完善的硬件资源,编写出适合具体应用环境的ISP代码程序。这将给这款芯片的实际使用带来极大的方便,尤其在需要更新下载用户程序时更会显得得心应手。当然,具体应用时如果在上位机与下位机的通信过程中加入一些加密处理,那么将加强整个自编ISP代码程序的可靠性、安全性,同时也使具体的应用系统更加完善。
编辑: 引用地址:http://www.eeworld.com.cn/designarticles/mcu/200703/9700.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部

小广播

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved