He,YuanHui —— 业精于勤荒于嬉,行成于思毁于随

如果你喜欢一个事,又有这样的才干,那就把整个人都投入进去,就要象一把刀直扎下去直到刀柄一样,不要问为什么,也不要管会碰到什么。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

原文来自:http://www.autooo.net/autooo/Electronic/Case/CPU-DSP/2007-10-28/33644_4.html
作者:陈凯 吴锦虹 覃波   发布时间:2007-10-28 06:44:03 来源:中国电子科技集团公司
 

 引 言:

  LPC900系列Flash单片机提供从8脚到28脚的封装形式,可以满足各种对成本和电路板空间有限制而又要求高性能、高可靠性的应用需要,同时具有高速率(6倍于传统MCS51单片机),低功耗(完全掉电模式下耗电低于1 μA),高稳定性,小封装,多功能(内嵌众多流行的功能模块)等特点。P89LPC932就是该家族中的重要一员,其集成了8 KB的Flash程序存储器、512B的静态数据存储器、512B的E2PROM、I2C总线、SPI总线、增强型UART接口、模拟比较器、看门狗、4个中断优先级、双DPTR,并支持/编程等功能。

  1 P89LPC932进行ISP编程的基本方式

  1.1内部程序存储器的三种编程方式

  P89LPC932内部集成的8 KB程序存储器编程的三种方式分别是:在系统编程(ISP);程序运行时编程(IAP);通过并行方式编程。

  一般来说,ISP编程是指依靠某种外部工具(除了常规的并行编程器以外)去直接给处理器内部集成的程序存储器编程。这里所指的外部工具常见的有很多种,不同的处理器供应厂商可能提供不同的方案。例如,根据编程 接口的不同,就有JTAG、单线、串口、SPI口等多种方式。尽管编程方式有所不同,但其原理都是类似的,就是依靠外部条件触发处理器,令其脱离正常执行的内部常规用户应用程序代码的进程,转而执行保存在其程序存储空间内某个固定位置处的控制擦除程序存储器及给程序存储器编程的代码(或是处理器外部提供的执行代码),然后通过某种与PC计算机的通信方式,将用户指定的某个在PC上编译完成的嵌入式处理器可运行的二进制代码文件编程入嵌入式处理器内的程序存储器。这种编程方式只需要常规的硬件配置(某些处理器可能需要某些叫做下载线的简单硬件电路)支持,而不需要特别的编程器(指并行编程器)支持,所以即使处理器芯片已经焊接到了电路板上也可以实现编程,这也就是ISP的真实含义。P89LPC932是利用其自身的异步串行口来实现ISP编程的,不需要特别的下载线或下载器,触发LPC932进入ISP编程模式的方法将在下文详细解释。

  IAP编程方式与ISP编程方式类似,但它不是由外部条件来触发的,而是在处理器正常执行用户设计的应用程序代码时,直接调用执行擦除及编程功能的固化例程。和ISP编程方式一样,IAP编程方式也只需要常规的硬件配置来支持。P89LPC932的ISP编程实际上就是通过调用芯片的IAP服务子程序实现编程的,其IAP服务子程序保存在FF00H~FFFFH地址空间中,不占用用户程序空间。

  并行方式编程需要使用一台外部专业编程设备。换句话说,这种编程环境并不是用户最终应用时的硬件环境。用户在使用这种编程方式时,通常必须将处理器芯片单独放到并行编程器上进行编程(如果处理器芯片已经焊接到电路板上,则必须先将处理器芯片从电路板上取下来)。处理器芯片编程完成后才能放回到电路板上,再上电令处理器运行,才能看到用户新写入代码的运行结果。这是最传统的编程方式(经典的AT89C51就主要使用这种方式编程),但它既繁琐,又不能满足现今远程升级的实际需求,因而已逐渐被方便快捷的ISP、IAP等在线编程方式所取代。

  综合来说,ISP模式是最容易使用的,因为它允许处理器在被焊接到用户目标电路板上再进行编程,也不需要复杂的代码设计,该特性允许用户在生产出硬件产品后再升级产品软件。一般来说,增加校准信息数据和现场安装最新的软件版本是较常见的升级操作。不仅如此,ISP编程还特别适用于用户产品研发阶段。显然,用户可以非常方便快捷地更改自己的程序代码并立即看到新代码的运行结果。P89LPC932使用串口作为ISP编程模式的主通信接口,使得这一系列处理器较那些依靠JTAG、SPI等通信接口作ISP编程接口的处理器要方便。因为一般的嵌入式系统都会配置异步串行口,这样,在系统编程就不需要特殊的ISP编程器,而JTAG、SPI等及其类似的编程方式一般都需要专用的接口适配器或下载线来配合,这些都可能会增加用户的投资和成本。

  P89LPC932芯片实现ISP编程是依靠在出厂时预置的一段,这段代码存储在P89LPC932代码空间内7号扇区的高端512B地址处(P89LPC932内部的8 KB程序存储器被组织成8个扇区,每个扇区有1 KB)。这段代码提供了设备底层操作代码(执行如擦除、编程等操作)和串口通信之间的接口。如果用户需要使用ISP编程模式,则必须注意,千万不要擦除或覆盖包含ISP预置代码的那个扇区,也就是7号扇区(1C00~1FFFH),因为P89LPC932的擦除操作是以扇区为基本单位的。

 

如图1所示,用P89LPC932实现的硬件连接很简单,它只需使用VDD电压即可执行擦除和编程算法,不需要特殊的高编程电压,所以,芯片外部只需要1片TTL和RS232电平相互转换的芯片(常见的芯片包括Maxim的MAX202、MAX232等,其他公司如TI、Sipex、Linear都有类似功能的芯片产品)即可实现P89LPC932内异步串行口和用户个人计算机上的RS232串口的连接。在用户个人计算机上运行一个简单的终端仿真程序就可以实现ISP编程,不过还有一种更简单的方法,就是运行一个现成的免费程序,比如Flashmagic,就可以实现这个目的,这个程序集成了所有针对Philips LPC900系列处理器的ISP功能。P89LPC932内部的ISP代码能够自动检测其片上异步串行口与用户个人计算机通信的波特率,进而实现在用户个人计算机控制下的代码下载及编程。综上所述,P89LPC932的这种ISP编程模式不需要外部编程器,但是需要一定的外部电路(串口通信电路),需要保留ISP驻留代码,需要在用户的应用程序代码中添加ISP引导初始化程序(如检测初始化),且ISP加密字的第2位(禁止ISP/擦除)不能置位。

 

 

P89LPC932 ISP模式硬件连接图

图1 P89LPC932 ISP模式硬件连接图

  1.2进入ISP模式的方法

  触发P89LPC932进入ISP模式的4种方法分别是:通过检测状态位触发进入ISP模式(全新芯片最初上电时的默认状态);通过检测中止控制符信号触发复位后进入ISP模式(最实用而且常用的方法);上电时在复位引脚上检测到特定脉冲后触发进入ISP模式(即硬件激活进入ISP模式);直接调用ISP代码实现进入ISP模式。

  1.2.1通过检测状态位触发进入ISP模式

  P89LPC932复位时,是否进入ISP模式会受一个状态位的控制,这个状态位保存在Flash存储器里的一个保留位置,不过这个位置并不在P89LPC932可以寻址的程序存储器空间内。在复位信号的下降沿,处理器将检查该状态位的值,如果其值为0,处理器将从地址0000H处开始取指令执行,这里通常存储着用户的应用程序代码。如果该状态位的值不是0,则处理器将从另一个确定的地址处开始执行此处的代码,这个地址(16位)的高8位由复位向量指定,低8位固定为00H。也就是说,引导向量的值将作为程序计数器(PC)的高字节,低字节为00H。如果用户使用的是一片新芯片,芯片中的状态位值在出厂时就被设置为1,而被预编程为1EH。因此,新芯片在复位后将直接从1E00H地址处开始执行代码。因为从1E00H开始处的代码,正好就是Philips公司给芯片预置的ISP。如果用户希望从0000H地址处开始执行代码,则状态位的值可以通过并行编程器去清零。实际上,通过ISP代码的自身功能也可以给状态位清零;如果用户往P89LPC932内部的程序存储器写入自己的应用程序代码后给状态位清零,则下次芯片复位后处理器将直接执行用户代码。另外,ISP代码也有修改启动向量值的功能,用户可以修改它的值,也就是把芯片复位后取代码执行的地址修改了(假如LPC932被触发进入ISP模式的话),而用户自己编写的启动代码就放在那里,这种设计通常是用来执行某些特殊功能的。不过,如果用户修改了启动向量的值,使它不再是1EH,则用户就再也不能使用LPC932出厂时预置的启动代码了。如果启动向量被修改而指向一个不包括任何启动代码的地址,用户则不得不使用一台并行编程器来给这枚芯片编程,以恢复它的启动向量值;否则,用户将无法再使用这种ISP编程方法。

  1.2.2通过检测中止控制符信号触发芯片复位后进入ISP模式

  通过异步串行口检测到中止控制符信号触发芯片复位后进入ISP模式是进入ISP模式的第二种方式。中止控制符信号就是指在异步串行口的接收脚上出现长达一帧长度的低电平,这里一帧的长度与异步串行口的工作模式有关。例如,在异步串行口的“模式一”中,一帧相当于10个比特的传输时间。一般地,当一个中止控制符信号发出时,异步串行口的接收脚将会持续相当于很多帧时间的低电平。不过,在第一帧的时候,中止控制符信号就会被检测到。注意,如果用一个机械开关来拉低异步串行口的接收脚,以创造一个中止控制符信号,同时,处理器被配置为允许串行中断,则异步串行口的接收中断标志必须在其中断服务全程中被处理,否则,处理器将进入一种不确定的状态。

    这种方式要求驻留在P89LPC932程序存储器内部的用户应用程序代码必须包括初始化异步串行口的代码。换句话说,用户必须使能异步串行口,同时,特殊功能寄存器AUXR1中的允许中止控制符信号位(EBRR)必须被置1,以允许在检测到中止控制符信号时触发处理器复位。此外,启动向量配置字节须保证为1EH(使用P89LPC932内预置的ISP代码),状态字为00H(以使用户应用代码得以执行),且1E00H~1FFFH的Flash程序存储器不要使用或擦除。这样配置完成后,只要异步串行口的接收脚检测到中止控制符信号后,处理器就会复位,复位后LPC932将从由启动向量指定的地址处取指令执行。 

  有两个问题在使用这种触发方式的时候应该了解。一是某些USB转RS232的转换器无法发出信号,所以无法使用检测中止控制符信号的方式触发处理器复位并进入模式;二是中止控制符信号在正常的串口通信不会出现,所以用户可以放心使用这种触发方式。

 

  1.2.3硬件激活进入ISP模式

  使用这种模式的好处在于,不论处理器内部原来存储着什么用户代码,也不论状态位的值是什么,ISP模式总是可以进入的(不过有一点还是必须得到保证,就是处理器里原来的未被擦除或覆盖,而默认的1EH也没有修改过)。由于P89LPC932引脚数比较少,而且内置了程序存储器,又没有传统的用于外扩总线的P0、P2口和PSEN引脚,所以依靠硬件方式触发芯片进入ISP模式的方法与传统MCS-51芯片有所不同。

  上电后,如果处理器在复位脚上检测到如图2所示的脉冲波形,则处理器将从启动向量指定的地址处取指令运行,也就是进入ISP模式,而不是从0000H处取指令执行。其实,这种进入方式的结果和有一个非零的状态字节有着相同效果。不过要注意的是,产生的脉冲数目只允许有3个,多于或少于3个脉冲都不能触发处理器进入ISP模式。

P89LPC932硬件激活ISP模式波形图

图2 P89LPC932硬件激活ISP模式波形图

  可以利用一枚外部的微处理器来产生这3个脉冲,同时它还控制一枚电源芯片来产生P89LPC932需要的电源电压。这种方法的原理很容易弄明白,笔者在此不再赘述。另外,还有一种更简单的方法,就是由用户PC机上的异步串行口加上部分硬件电路来直接产生所需的时序,具体介绍可以参看参考文献1。

 

  1.2.4直接调用法触发处理器执行ISP代码

  P89LPC932的ISP模式的预置启动向量为1EH,所以其ISP驻留代码首地址为1E00H,要进入ISP,直接调用1E00H处的代码就可以了。在C代码中,程序通过函数指针的方式就可以调用ISP驻留代码(即进入ISP模式)。

 

  1.3在P89LPC932上使用Flashmagic

  Flashmagic是一个免费的软件工具,可以为Philips的许多处理器作ISP编程,包括P89LPC932。Flashmagic启动时将试图连接用户选择的器件,不过通常在这里都会报错,因为并没有任何处理器处于ISP模式,又或者还有什么其他的设置需要更改。请选择Flashmagic控制的PC机上的正确串行口,同时选择目标器件为P89LPC932,如图3所示。然后使这片P89LPC932进入ISP模式(如果这是一枚全新的处理器,则它这时已经处于ISP模式了)。如果这不是一枚全新的处理器(状态位不是1),那么必须使用硬件方式激活处理器进入ISP模式,或用检测中止控制符信号的方式触发处理器复位并进入ISP模式。

FlashMagic的启动画面

图3 FlashMagic的启动画面

  如果使用检测中止控制符信号的方式触发处理器复位并进入ISP模式,如图4所示,则应当配置Flashmagic,以使用这种方式来初始化ISP模式。首先,检查“options”菜单下的“advanced options”选项,在弹出的对话框的“hardware config”页上应该取消“Use DTR and RTS to enter ISP mode”选择框中的选择(注:FlashMagic可以记住你的各种设置,下次你再次使用,如果不需要其他设置,可不再设置它即可使用)。然后,从“ISP”菜单下选择选项“start bootrom”,并从弹出的对话框中选择“send break condition”按钮,Flashmagic可以通过PC机串行口直接向P89LPC932发出中止控制符信号。一般来说,这时P89LPC932就应该处于ISP模式下了。不过,Flashmagic不会自动校验P89LPC932是否已经真正进入了ISP模式,这个工作需要由用户自己来做。如果P89LPC932未处于ISP模式,若干个Flashmagic的菜单是无法使用的(即使用户选择这些菜单,Flashmagic也会报错而不会有执行结果),用户可以通过选择这些菜单来检验P89LPC932是否已经处于ISP模式下了,例如“ISP”菜单下的“Blank Check…”选项。当然,P89LPC932未进入ISP模式时,对它的编程是无法进行的,从这层意义上说,同样也可以知道P89LPC932并未处于ISP模式下。

 

发送中止控制符条件的界面

图4 发送中止控制符条件的界面

  Flashmagic的缺省设置是自动保护P89LPC932中扇区7内高端512字节的启动代码,不过用户可以在“options-advanced options-security”对话框中关闭这个保护功能。不过,并不推荐用户这么做,因为这会提高误操作对覆盖ISP启动代码的可能性。 本文相关DataSheet:         

 

  注意,有些菜单选项在新版Flashmagic的位置可能与本文中提及的不同。本文使用的是1.74版的Flashmagic,至截稿时止,Flashmagic已升级至2.07版。

 

  2 总结

  Philips P89LPC932是一种功能全面、使用简单、性能可靠、性价比较高的高速51兼容微处理器,适用于产品研发、小批量产品试制、高校科研等诸多领域。本文对P89LPC932进行编程的具体方法和技巧进行了详述,希望读者们能充分利用P89LPC932的优秀在线编程特性。

 

  参考文献

  1 周立功单片机有限公司. P89LPC932的ISP应用设计,2004

  2 Philips Co. Application Note. Insystem programming (ISP) with the Philips P89LPC932 microcontroller, 2003

 
 

 

 

 

 
posted on 2008-08-07 17:58  He,YuanHui  阅读(1005)  评论(0编辑  收藏  举报

Add to Google