首页 | 期刊简介 | 编辑部 | 广告部 | 发行部 | 在线投稿 | 联系我们 | 产品信息索取
2024年12月26日星期四
2011年第01期
 
2010年第12期
 
2010年第11期
2010年第11期
 
2010年第10期
2010年第10期
 
2010年第09期
2010年第09期
 
2010年第09期
2010年第08期
 
2010年第07期
2010年第07期
 
2010年第06期
2010年第06期
 
2010年第05期
2010年第05期
 
2010年第04期
2010年第04期
 
2010年第03期
2010年第03期
 
2010年第02期
2010年第02期
 
2010年第01期
2010年第01期
 
2009年第12期
2009年第12期
 
2009年第11期
2009年第11期
 
2009年第10期
2009年第10期
 
2009年第9期
2009年第9期
 
2009年第8期
2009年第8期
 
2009年第7期
2009年第7期
 
2009年第6期
2009年第6期
 
2009年第5期
2009年第5期
 
2009年第4期
2009年第4期
 
2009年第3期
2009年第3期
 
2009年第2期
2009年第2期
 
2009年第1期
2009年第1期
 
2008年第12期
2008年第12期
 
2008年第11期
2008年第11期
 
2008年第10期
2008年第10期
 
2008年第9期
2008年第9期
 
2008年第8期
2008年第8期
 
2008年第7期
2008年第7期
 
2008年第6期
2008年第6期
 
2008年第5期
2008年第5期
 
2008年第4期
2008年第4期
 
2008年第3期
2008年第3期
 
2008年第2期
2008年第2期
 
2008年第1期
2008年第1期
MC68HC908LJ12微控制器中的闪存在电路编程
In-Circuit Programming of FLASH Memory in the MC68HC908LJ12
■Motorola香港微处理器部系统工程师 Vincent Ko
在电路编程是指在器件安装在最终电路板(目标系统)上的时候对器件进行编程或擦除操作。这允许在不把电路从目标系统取下的情况下改变用户代码,从而实现对器件的重新编程或初始化编程。

Motorola MC68HC908LJ12 (LJ12)是基于HC08架构的一种通用器件,具有12K字节的片上闪存和512字节的RAM、一个红外通信接口、一个串行外设接口、一个AD转换器、一个实时钟和一个LCD驱动器模块。其中12k字节闪存分配给用户代码,另外还有48字节分配给用户定义的复位和中断向量。对于编程或擦除操作不需要高电压供电,因为所需要的高电压由内部的电荷泵产生。可利用运行在用户模式或监控模式的软件例程通过写地址为$FE08的闪存控制寄存器实现对闪存的编程或擦除操作。

用户模式

在用户模式下,LJ12运行的是已经编程存储在闪存中的用户代码。这是LJ12在大多数时间中所处的模式。

监控模式

在监控模式下,LJ12运行在生产时永久编程在LJ12中的存储器区域中的监控代码。监控代码用于通过LJ12的PTA0管脚在LJ12和外部主机间实现串行通信。 对初始的空白LJ12闪存编程就是在监控模式下进行的。

闪存初始编程

LJ12 操作模式在上电复位(POR)后锁定,并由复位向量($FFFE-$FFFF)和下列管脚的逻辑电平决定:IRQ、 RST、 PTA0、 PTA1、 PTA2和PTC1。

块保护的闪存

当闪存被块保护(block protected)时,闪存是不能被擦除可编程的。地址为$FE09的闪存块保护寄存器用来保护闪存的一块或整个闪存。向块保护寄存器中写$FF将解除整个闪存的保护。

ROM驻留程序

LJ12中的ROM驻留程序旨在简化用户的闪存编程和擦除。这些程序是存储在ROM中的永久代码,可利用子程序调用执行。表1 示出了闪存编程和擦除操作的四个程序。


用户模式下的在电路编程


在用户模式下的ICP可保证在目标系统运行的同时对LJ12中的闪存进行重新编程。对LJ12中的闪存进行重新编程分成两步。第一步是通过擦除操作擦除闪存中的现有数据。最小的擦除单位是128字节,称为页。闪存控制寄存器中的MASS位提供了一次操作擦除整个闪存阵列的选择,这种操作称为整体擦除(Mass erase)。必需指出的是,闪存中被擦除的单元读出值为$FF。第二步是编程,即利用新的数据对空的闪存进行编程。因此,重新编程包括:擦除和编程两步。

ICP 代码

在用户模式下进行ICP要求,ICP代码存储在可被用户程序调用的非易失性存储器中。这意味着ICP代码必须做为用户代码的一部分编程到LJ12的闪存中。考虑到这一点,用户模式下的ICP在闪存最初为空(空白器件)时是不能进行的。初始的空白器件必须在监控模式下编程。

ICP代码编程在闪存中,可以利用软件或硬件启动ICP过程,有两种操作方式:

1.ICP 代码通过LJ12的端口引脚或SCI接口建立LJ12与一个外部主机系统的通信连接。主机发出命令擦除LJ2的闪存并下载数据对闪存进行编程。在这种情况下,LJ12 ICP代码就象一个命令解释器。

2.ICP 代码运行自己的擦除子程序擦除闪存。然后ICP代码通过LJ12的端口引脚或SCI接口建立LJ12与一个外部主机系统的通信连接。新的数据下载编程到闪存中。

在两种方法中,ICP代码都必须加载到RAM存储器中,并在RAM中执行。当程序在闪存中运行时不允许编程或擦除操作。如果在ICP代码还在闪存中运行时就进行编程或擦除操作,那么有擦除ICP代码本身的危险。


监控模式下的在电路编程


在监控模式下, LJ12运行在制造过程中永久编程在存储器中($FC00-$FDFF 和 $FE10-$FFCF)中的监控代码。LJ12器件中闪存的第一次编程只能在监控模式下进行。

通过施加高电压进入监控模式

与许多Motorola 8位 MCU,通过在/IRQ引脚施加高电压(对LJ12为1.5 * VDD、 max. 8V )和在几个I/O引脚施加特定的逻辑电平(对LJ12为PTA1、 PTA2、和PTC1),则在上电复位(POR)之后进入监控模式。利用这一高电压进入方法时,MCU(在OSC1)的时钟输入必须来自外部振荡器,频率为4.9152MHz 或 9.8304MHz。通过对这一时钟分频在PTA0生成9600波特的通信速度。

通过空向量方法进入监控模式

在新的闪存实施方案中,需要减少采用ICP对MCU进行编程时连接目标系统的线数。进入监控模式的另一方法是空(被擦除)的复位向量。复位向量只有通过整体擦除操作擦除。 如果在上电复位后的模式锁定过程中/IRQ引脚接地,PLL被使能,允许利用接在OSC1和OSC2间的32.768kHz晶体作为输入时钟,生成9600的波特率。如果IRQ引脚在上电复位后的模式锁定过程中被拉成高(VDD),PLL被禁止,一个外部4.9152MHz输入时钟(晶体或外部振荡器)将可产生4800的波特率。与高电压进入方式相比,这一方法节约了三条线,不需要连接PTA1、 PTA2、和 PTC1。

在监控模式下实现ICP的优点是不需要在用户代码包含ICP代码。此外,还可以利用MCUscribe 编程或 ICS Motorola工具通过PTA0串行连接实现PC主机系统与MCU的通信。


有关 ICP的其它考虑


信号状态

为无中断地完成编程过程,在ICP操作中正常的系统活动通常被停止。因此,在ICP开始时,应当配置MCU使得在ICP过程中不会产生引脚冲突或信失控号。同时还必须注意当带有空白闪存的MCU系统第一次上电时,其端口引脚处于其缺省复位状态。

引脚隔离

如果用于连接外部主机的 MCU引脚是与目标系统共享的,必须保证进行ICP连接时它们被隔离到适当的逻辑电平。

COP 看门狗操作

当在用户模式下进行 ICP操作时,还必须考虑COP操作。一旦COP被使能,在用户程序运行过程中是不能被禁止的。因此,在ICP擦除和编程程序中,COP计数器必须定时清除以防止COP复位。在监控模式下,COP是被禁止的。

下面的代码在用户模式下完成整体擦除。RAMFILE存储器区被保留用于存储ERARNGE子程序调用的数据块。当ICP请求被接受时,这一代码需要上载到RAM中,然后才能通过调用RAMSTART执行。然后 LJ12复位。在这一例子中,利用了非法操作码进行复位。

;Reference upload coding for mass erase in user mode
ERARNGE EQU   $FCBE
       ORG    RAM
RAMFILE:
       DC.B   $14 ;Indicates 4*bus (bus=4.9152MHz)
       DC.B $40 ;Data size assumed to be 64
       DC.W $FFFF     ;$FFFF means mass erase
       DS.B   64 ;Reserve for data array
RAMSTART:
       LDHX   RAMFILE
       JSR    ERARNGE ;Mass erase the FLASH memory
RESET:
       DC.B   $32 ;Perform illegal opcode reset

复位后,因为复位向量是空的,LJ12进入监控模式。通过在PTA0(参考数据手册中的监控ROM一节)连接一个主机,可以把下列代码加载到LJ12 RAM中实现闪存的编程。

;Reference upload coding for programming in monitor mode
MON_PRGRNGE EQU   $FF28
       ORG RAM
RAMFILE:
       DC.B $14      ;Indicates 4*bus (bus=4.9152MHz)
       DC.B   $40     ;Data size assumed to be 64
       DC.W   $C000     ;Start of FLASH memory
       DS.B   64 ;Reserve for data array
FLASHPRG:
LDHX RAMFILE
JSR    MON_PRGRNGE

RAMFILE存储器区被保留用于存储MON_PRGRNGE子程序调用的数据块。用户使用监控命令WRITE或IWRITE利用数据填充RAMFILE区域,然后发出执行(RUN)命令执行FLASHPRG程序将数据编程到闪存中。完成后, MON_PRGRNGE将控制返回给监控代码。这一编程过程不断重复直到整个闪存都被编程完。编程完毕后,LJ12在一个上电复位后进入用户模式。
 
         
版权所有《世界电子元器件》杂志社
地址:北京市海淀区上地东路35号颐泉汇 邮编:100085
电话:010-62985649
E-mail:dongmei@eccn.com