在电路编程是指在器件安装在最终电路板(目标系统)上的时候对器件进行编程或擦除操作。这允许在不把电路从目标系统取下的情况下改变用户代码,从而实现对器件的重新编程或初始化编程。
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在一个上电复位后进入用户模式. |