MC68HC908GP32 MCU的FLASH存储器在线编程技术
MC68HC908GP32 MCU的Flash存储器在线编程技术
摘 要: 文章简要阐述了Flash存储器的主要特点,分析了Motorola新一代单片机M68HC08系列内嵌Flash存
储器结构特点,以MC68HC908GP32 MCU为例讨论了Flash存储器的编程要点,并给出了具体的在线编程实例,
对其中的技术难点进行了分析。
关键词: 闪速存储器,M68HC08系列单片机,在线编程,编程实例
1 引言 M68HC08系列单片机Flash存储器的功能,对基于
存储器技术的发展对计算机技术的发展起到了Motorola M68HC08系列单片机的嵌入式系统的开发极大的推动作用。理想的存储器应该具备存取速度是十分必要的。但是,与一般程序相比,Flash存储快、不易失、存储密度高、价格低等特点。一般的存器的编程技术相对比较复杂,有一些特殊之处,本文储器具有这些特点中的一个或几个。近几年Flash存在实际应用基础上,总结Motorola的 储器(闪速存储器)技术趋于成熟,是目前比较理想MC68HC908GP32单片机的Flash在线编程方法,给出的存储器。闪速存储器具有电可擦除、无需后备电源编程实例,分析其中的技术难点。 来保护数据、可在线编程、存储密度高、低功耗、成
本较低等特点。而这些特点,正式单片机所期望的,2 MC68HC908GP32闪速存储器在线编程要点 但早期引入片内Flash技术的单片机,在可靠性和稳2.1 闪速存储器的编程寄存器与编程步骤概述 定性方面仍有一些不足。随着Flash技术的成熟,目在MC68HC908GP32单片机中,与Flash编程有关前,许多单片机内部集成了Flash存储器。Motorola的寄存器有2个,它们是Flash控制寄存器(FLCR)公司在Flash技术相当成熟的时候推出了片内集成和Flash块保护寄存器(FLBPR)。FLCR 高4位未定Flash存储器的8位单片机,该单片机的Flash存储义,低4位分别为HVEN位-高压允许位(High-Voltage 器具有以下特点: Enable Bit)、MASS位-整体擦除控制位(Mass -Erase
? 编程速度快及可靠性高。Motorola M68HC08Control Bit)、ERASE位-擦除控制位(Erase Control 系列单片机的片内Flash的整体擦除时间可以控制Bit)、PGM位-编程(写入)控制位(Program Control 在5ms以内,对单字节的编程时间在40ns以内。片Bit)。FLBPR的内容为Flash保护区域的起始地址的内Flash的存储数据可以保持10年以上,可擦写次14,7位,保护区域的起始地址的最高位始终为1,而数在1万次以上。 保护区域的起始地址的低7位(位6,0)始终为0。这
? 单一电源电压供电。一般的Flash存储器,两个寄存器的具体含义与用法,在参考文献[1],[3]在正常的只读情况下,只需要用户为其提供普通的工均可查到。
作电压即可,而要对其写入(编程),则需要同时提供在M68HC08系列单片机中,对Flash进行擦除或高于正常工作电压的编程电压。但是,Motorola 写入操作需要遵循一定的时序和步骤。对于整个M68HC08系列单片机通过在片内集成电荷泵,可由单M68HC908系列的各个型号,这些步骤是一样的,但一工作电压在片内产生出编程电压。这样,可实现单时序
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
可能略有不同,针对具体型号的Flash进行一电源供电的在线编程,而不需要为Flash的编程在编程时应参考相应的芯片手册。同时需要注意的是,目标板上增加多余的硬件模块。正因为Flash的读写一些型号的监控ROM内含有Flash编程子程序,用户电压要求不同,一些公司的内置Flash存储器便放弃可直接调用,例如MC68HC908JL3,有的型号则没有,了在线擦除写入功能,而仅有通过编程器的写入功例如MC68HC908GP32,这种情况需自行编制子程序。能。 这里以MC68HC908GP32的擦除一页(128B)Flash为例
? 支持在线编程。Motorola M68HC08系列单片说明基本操作过程。步骤如下: 机的片内Flash支持在线编程(In-Circuit $2?FLCR(1?ERASE位,0?MASS位):进行页?
Program),允许单片机内部运行的程序去改写Flash面擦除;
存储器内容,这样可以代替外部电可擦除存储芯片,? 读Flash块保护寄存器FLBPR; 减少外围部件,增加了嵌入式系统开发的方便性。 ? 向被擦除的Flash页内任意一个地址写入任
基于这些特点,掌握Motorola M68HC08系列单意值,为方便起见,一般向待擦除页首地址片机的Flash存储器的编程技术,充分利用Motorola 写入0;
1
MoveToRAM: ? 延时tnvs(>10μs),;
LDA ,X ;X->A ? $A?FLCR(1?HVEN位);
PSHH ;保存HX ? 延时terase(>1ms);
PSHX ? $8?FLCR(0?ERASE位);
LDHX #$0000 ;清HX ? 延时tnvh(>5μs);
LDX I1 ;I1偏移变量->X ? $0?FLCR(0?HVEN位);
STA P_AddressInRAM,X ? 延时trcv(>1μs),完成一页的擦除操作。
INC I1 ;(I1)+1->I1 另外,Flash编程的基本操作还有“整体擦除操
PULX ;FLASH中的地址出栈 作”、“写入(编程)操作”。整体擦除操作用于擦除
PULH GP32的整个Flash区域, 写入(编程)操作用于以行
AIX #$1 (64字节)为单位对擦除过的Flash区域进行写入。
CPHX #Erase1PageEND ;是否到擦除的末地址 鉴于Flash编程的两个寄存器的具体含义与用法及
BLO MoveToRAM ;没到,继续移动 基本编程步骤在参考文献[1],[3]均可查到,限于
;至此擦除程序已从Flash复制到RAM中 篇幅,本文略。下面给出可供读者直接使用的
;下面执行RAM中的擦除程序 MC68HC908GP32的Flash存储器编程子程序。
LDHX FlashAddress ;Flash页的首地址 2.2 M68HC908GP32的Flash存储器编程子程序
JSR P_AddressInRAM ;执行擦除程序 由于GP32单片机内部的监控ROM中没有固化
RTS Flash编程子程序,要在运行中能对Flash进行在线
;以下为擦除一页的子程序 编程,初始装入的用户程序,必需包含对Flash的
Erase1Page: 擦除及写入子程序。但是程序驻留Flash区,在运
LDA #%00000010 ;?ERASE=1,MASS=0 行擦除及写入子程序时,整个Flash区会被加上高
STA FLCR 于普通工作电压的编程电压,致使对Flash区读取
LDA FLBPR ;?读出(FLBPR) 不稳定,可能导致程序不能正常执行。为了使擦除、
LDA #$68 ;?向被擦除的Flash页内任意地址 写入程序正常执行,需将擦除、写入子程序复制到
;写入任意值 RAM中并转入RAM区执行。为此,需在RAM区开辟一
STA ,X ;(注意:本程序HX是入口) 个缓冲区,供程序复制使用。下面给出的擦除及写
LDA #!3 ;?延时Tnvs:延时10μs(GP32) 入子程序,已经包含了复制及转移执行过程,可直
BSR Delay_NusA 接用于GP32等单片机的Flash在线编程,程序中给
LDA #%00001010 ;?置FLCR的HVEN位为1,打开 出了详细的注释。
;电荷泵加电平到Flash阵列 ? 擦除子程序
STA FLCR *EraseSub.asm擦除Flash存储区的一页 LDA #!24 ;?延时Terase:延时1ms *入口:内存FlashAddress(2字节) BSR Delay_NusA ;(每次500μs,2次) * (待擦除Flash一页的首地址) LDA #!248 *占用内部寄存器:A,HX BSR Delay_NusA *占用内存:I1,P_AddressInRAM及其随后的 LDA #%00001000 ;?清Erase位为0; * 90字节 STA FLCR *内部调用:Delay_NusA (延时子程序) LDA #!3 ;?延时Tnvh,延时10μs(GP32) *说明:内部调用的擦除Flash一页子程序 BSR Delay_NusA * (Erase1Page),在执行之前被复制 CLRA ;?清HVEN位为0 * 到RAM区,其RAM的首地址为 STA FLCR * P_AddressInRAM,成为实际程序入口 LDA #!3 ;?延时Trcv,延时10μs(GP32) *------------------------------------- BSR Delay_NusA EraseSub: RTS ;将擦除一页的程序从Flash区复制到RAM中 *------Delay_NusA--延时子程序------------------ LDHX #Erase1Page ;将擦除程序的首地址->HX *入口:A MOV #$0,I1 ;0->I1
2
*
使用方法
消防栓的使用方法指针万用表的使用方法84消毒液使用方法消防灭火器使用方法铁材计算器使用方法
:设延时10μs,A=(T-4)/2=3 PSHH ;保存Flash地址 * LDA #!3 ; 延时10μs PSHX
* BSR Delay_NusA LDHX Address1 ;RAM地址->HX *备注:总线频率f=2.4576MHz,周期τ=1/f?0.4μs LDA ,X ;RAM中的一个字节->A *使用BSR语句调用Delay_NusA子程序, AIX #!1
STHX Address1 *T= 2*0.4 + 4*0.4+A*(5*0.4)+4*0.4=4+2A PULX * LDA #opr BSR 循环体 RTS PULH * A=(T-4)/2 T=6μs A=1;„„T=500μs A=248 STA ,X ;A->目标区的第X个字节处 *---------------------------------------------- LDA #!9 ;?延时Tpgs,延时30μs(GP32) Delay_NusA: BSR Delay_NusB NOP ;1Cycle AIX #$1 ;重复?、? 写入N1个 NOP ;1Cycle DBNZ I1,Write_Flash_1 ;字节数据,循环N1次 DBNZA Delay_NusA ;3Cycles LDA #$8 RTS ;4Cycles STA FLCR ;?0->PGM Erase1PageEnd: NOP LDA #!3 ;?延时Tpgs,延时10μs(GP32) ? 写入子程序 BSR Delay_NusB
LDA #$00 ;? 0->HVEN *WriteSub.asm写Flash子程序 ------------------*
STA FLCR *功能:将RAM区中从指定的首地址
LDA #!1 ;? 延时Tpgs,延时6μs(GP32) * {Adrress1,Adrress1+1}开始的N1个
BSR Delay_NusB * 字节数据一个一个地复制到Flash中,
RTS * 其首地址为FlashAddress。
*Delay_NusB 延时子程序B-- ------------------ * 入口:(1) RAM区中的首地址{Adrress1,Adrress1+1}
* 功能、入口、使用方法同上延时子程序,但为了移 * (2) 内存N1中=要写入的字节数
系统初始化 * (3) Flash中的首地址:FlashAddress。
*占用内部寄存器:A,HX 点亮通信示灯PTA7=1 *占用内存:N1,I1
*---------------------------------------------- 取反通信指示灯PTA7 WriteSub:
进行通信握手,发握手信号 [将写入程序从FLASH移到RAM中(编程方法同擦除程序,
此处略)] HX赋初值的$00 LDHX FlashAddress ;要写入Flash的初始地址
JSR P_AddressInRAM ;执行写入程序 N N HX+1 串行口有 =设定数? 数据吗? RTS
Y Y Write_Flash: 接收一个数据?A LDA #%00000001 ;?置FLCR的PGM位=1 N STA FLCR A中是约定的握手信号吗?
Y LDA FLBPR ;?读出(FLBPR)
接收N1(<=64)?内存 STA ,X ;?数据写入所选块的Flash任意单元
LDA #!3 ;?延时Tnvs:延时10μs(GP32) 接收N1个数据放入内存缓冲区内存
BSR Delay_NusB
LDA #%00001001 ;?置FLCR的HVEN位为1 给擦除子程序EraseSub的入口赋值,调用
EraseSub,擦除Flash区$8000开始的一页 STA FLCR
LDA #!3 ;?延时Tpgs,延时10μs(GP32) 给写入子程序WriteSub的入口赋值,调用
BSR Delay_NusB WriteSub, 将N1个数据写入$8000开始的
Flash区 MOV N1,I1
Write_Flash_1: ;?向页内目标地址写入1字节 从地址$8000开始的Flash区读取N1个数据, 3 同时从串行口发送出去
图1 Flash在线编程例程单片机方程序
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图
*动程序的方便,擦除子程序和写入子程序使用各自 Form_Load()事件过程中完成,所使用的变量及数组
*的延时子程序 均已先定义,TEXT3()为上、下框中的输入控件数组,
*-------------------------------------------- 有关说明见程序中的注释。
Private Sub CndStart_Click() '单击"写入并校验" Delay_NusB:
If TxtN1.Text = "" Or Val(TxtN1.Text) > 64 Then NOP ;1Cycles
MsgBox "输入写入Flash区的数据个数(1-64)!" NOP ;1Cycles
Exit Sub DBNZA Delay_NusB ;3Cycles
End If RTS ;4 Cycles
For i = 0 To TxtN1.Text – 1 Write_Flash_END: NOP
S1= Text3(i).Text
If S1 = "" Or Val(S1) > 255 Then 3 MC68HC908GP32的Flash在线编程调用实例
MsgBox "请输入" & TxtN1.Text & "个数~" 为了清楚地给出Flash存储器在线编程总体轮廓,本节给出调用例程的编程框架。调用实例程序由单片机方程序与PC机方程序构成。单片机系统的硬件带有MAX232串行三线接口,与PC机的串行口相连,A口的PTA7过电阻接通信指示灯。总体思想是:通过PC机界面输入数据,将数据发向单片机,单片机接收数据写入Flash区域,同时读出返回给PC机,PC机接收该数据进行分解并显示,供比较校验,以可视化方式完成Flash擦除、写入、校验工作。
3.1 单片机方程序流程
单片机方程序的主要功能是:?不断地向PC机发出握手信号,并监测PC机返回的握手信号,若在
图2 Flash编程实验VB程序界面 一定时间内没有返回握手信号,取反指示灯使指示灯
Exit Sub 处于闪烁状态,
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
明运行正常;?若收到握手信号,
End If 表明PC机将发送数据,设要写入的个数为N1个,则
Next i 单片机首先接收N1放入内存(其数值在一行之内,即
MS.InBufferCount = 0 '清空接收缓冲区 小于等于64),随后接收N1个数据,放入内存缓冲
d1 = Timer() '取当前时间 区;?擦除指定Flash区域,将收到N1个的数据写入
Do '等待接收握手信号(86,"V") Flash区;?读出该Flash区,数据发送到PC机。其
DoEvents 流程见图1。
If Timer() - d1 >= 5 Then GoTo Error0 3.2 PC机方界面及程序框架
Loop Until MS.InBufferCount >= 1 PC机方程序采用Visual Basic6.0语言编写,
ReceiveData = MS.Input '接收数据 其界面见图2。主要功能为:输入要写入Flash的数
If ReceiveData(0) = 86 Then 据个数(1,64),设为N1,按“确定”按钮后在上框
SendData(0) = 56 中输入N1个具体数据,按下“写入并校验”后,VB
MS.Output = SendData '发送回答信号 与单片机进行通信握手,握手成功后,将N1及上框
Else 中的N1个具体数据发送到单片机,单片机接收后,
GoTo Error1 '不是正确的握手信号 将N1个数据写入$8000开始的Flash中,并读出发
End If 回PC机。PC机接收该数据,进行数据分解后显示在
'给发送数据赋值 下框中,供比较校验。若上、下两框中数据一致,说
ReDim SendData1(TxtN1.Text) 明写入成功。
SendData1(0) = Val(TxtN1.Text) '发送N1 限于篇幅,为突出重点内容,下面只给出单击“写
For i = 1 To TxtN1.Text 入并校验”按钮的事件过程,程序中MS是串行通信
SendData1(i) = Text3(i - 1).Text 控件(Microsoft Comm Control 6.0控件,文件名
Next i 为MSComm32.OCX)的引用名称,串行通信初始化在
4
MS.Output = SendData1 '发送N1个数 ? 擦除及写入子程序中对延时子程序的调用必
MS.InBufferCount = 0 需使用“BSR 子程序名”,而不能使用 “JSR 子
d1 = Timer() 程序名”,因为这里的子程序是复制到RAM中执行,
Do '等待接收数据N1个 程序地址已经发生了变化,只能用相对调用。
DoEvents ? 擦除子程序与写入子程序及其中的延时子程
If Timer() - d1 > 5 Then GoTo Error2 序,若含有跳转语句,不能使用“JMP 地址”,只能
Loop Until MS.InBufferCount >= TxtN1.Text 使用“BRA 地址”。原因同上。
ReceiveData = MS.Input '接收数据 ? 使用不同型号芯片时,上述子程序中延时时
'数据分解、显示 间应根据芯片手册予以变动。延时子程序也应根据不
For i = 0 To TxtN1.Text - 1 同的总线频率加以变化,确保时间满足时序要求。
Text3(64 + i).Enabled = True ? 一次擦除后未被写入过的区域可以再次调用
Text3(64 + i).Text = ReceiveData(i) 写入子程序写入,但写入过的区域,未经擦除不能重
Next i 写。
GoTo CndStart_Click_Exit '为了单出口 ? 由于擦除是每次擦除一页(128字节),所以'错误显示与处理 数据应合理安排,避免误擦。 Error0: '未收到握手信号情况 ? 页首地址的定义须遵照保护寄存器FLBPR定
MsgBox ("无握手信号~") 义的规则,即对GP32来说,页地址的低6位为0。
GoTo CndStart_Click_Exit ? 在线使用的Flash区应在程序Flash区之前,Error1: '不是正确的握手信号情况 因为Flash保护区为FLBPR决定的地址至末尾。
MsgBox ("握手信号不正确~")
GoTo CndStart_Click_Exit 参 考 文 献 Error2: '正确握手后,无返回数据情况 [1] MOTOROLA.MC68HC908GP32 HCMOS
MsgBox ("等待很久,未收到返回数据~") Micro-controller Unit Technical Data,1999( CndStart_Click_Exit: [2] 刘慧银,程建平等.Motorola微控制器M68HC08
ReceiveData = MS.Input 原理及其嵌入式应用.北京:清华大学出版社,
MS.InBufferCount = 0 2001.
End Sub [3] 张友德,涂时亮等.M68HC08系列单片机原理与
应用-嵌入式系统初步.上海:复旦大学出版社,
4 结束语 2001.
使用Flash在线编程技术可以省去EEPROM,不[4] 第三届Motorola杯单片机设计应用大奖赛竞赛
仅简化了电路设计,也提高了系统的稳定性。但是委员会编.第三届Motorola杯单片机设计应用
Flash在线编程的技术文献资料比较少,特别是实用大奖赛论文集.电子产品世界特刊.2000年1月.
程序目前还较少见到,涉及Flash在线编程的技术细
WANG Yi-huai, WANG Lin (Suzhou University, Suzhou 节应仔细斟酌。由于擦除与写入子程序是复制到RAM
215006) 中执行,我们给出的两个子程序已经包含了复制并转
入RAM执行的程序过程,正是由于这个特殊的过程,
Abstract: In this paper, the main features of FLASH memory are 根据实际编程调试与项目开发过程中积累的经验,提
simply described and the structure features of FLASH memory 出以下注意点,供读者参考:
embedded in Motorola new serial MCU are analyzed. Based on ? RAM中要留有足够的缓冲区,以便存放复制
MC68HC908GP32 MCU, key points about FLASH 到RAM中的子程序,具体值是取擦除与写入子程序中
programming are discussed, some concrete in-circuit 的大者即可。它们的大小可在编译后.LST文件中查
programming examples are given and some technology 得。
difficulties are also pointed out. ? 擦除及写入子程序中要调用的延时子程序均
Key Words: Flash Memory, M68HC08 serial MCU, In-Circuit 随其后,以便同时复制到RAM中,最后一个标号是为
Program, programming examples 复制方便而加入,否则复制时要用其它方法得到结束
地址,编程变得不规范。
5
基金项目:苏州大学青年科研基金(Q3118012)
王宜怀 男,1962年出生,副教授,硕士生导师,博士研究生在读。1989年在厦门大学获理学硕士学位。主要从事嵌入式系统、数据库、工业控制等方面的研究与开发。
王林 男,1962年出生,副教授,1998年在长春光学精密机械学院获工学硕士学位。主要从事数据库、嵌入式系统等方面的研究与开发。
6