全屏显示

Download Report

Transcript 全屏显示

FLASH存储器和
MC68HC908在线编程
Tsinghua Motorola MCU&DSP
Application Center
Jiangjunfeng
2002.4
FLASH 存储器
• Motorola微控制器片内集成FLASH的
优点
– 单一电源供电(FLASH编程时通过片内集成
电荷泵产生编程电压)
– 可靠性高(数据保存>10年,擦写>1万次)
– 擦写速度快(整体擦除5ms,单字节编程
40us)
FLASH Array
• GP32
Flash erase on page basis
1 page = 128 bytes = 2 rows
Starting from address xx00, xx80
Flash program - on row basis
1 Row = 64 bytes
Starting from address xx00, xx40, xx80, xxC0
• JL3
Flash erase on page basis
1 page = 64 bytes = 2 rows
Starting from address xx00, xx40, xx80, xxC0
Flash program - on row basis
1 Row = 32 bytes
Starting from address xx00, xx20, xx40, xx60
xx80, xxA0, xxC0
FLASH 编程模式
1.)
监控模式
- 一般需要硬件支持
- 一般需要RAM程序支持
- 编程器和仿真器使用
2.)
用户模式
- 需要芯片内部软件支持
- 需要RAM程序支持
- 目标系统使用
监控模式编程
-
监控方式的进入
– 复位向量($FFFE-$FFFF)为空($FFFF)
– 在特定引脚上提供特定电平(复位时)
-
监控ROM的指令
-
下载到RAM中的程序
FLASH控制寄存器(FLCR)
FLCR
READ:
WRITE:
RESET:
0
 HVEN —
 MASS —
 ERASE —
 PGM —
0
0
0
HVEN
MASS
ERASE
PGM
0
0
0
0
高压允许位,用于将来自片内电荷泵
的高压加到FLASH阵列上;
整体擦除控制位,用于选择擦除方式
(=1,整体擦除 / =0,页擦除);
擦除控制位,用于选择擦除操作;
写入控制位,用于选择编程写入操作。
FLASH块保护寄存器(FLBPR)
FLBPR
READ:
WRITE:
RESET:
= 00
= 01
= 02
…
= FE
= FF
BPR7
BPR6
BPR5
BPR4
BPR3
BPR2
BPR1
BPR0
U
U
U
U
U
U
U
U
$8000 ~ $FFFF
$8080 ~ $FFFF
$8100 ~ $FFFF
$FF00 ~ $FFFF
entire flash is NOT protected
FLASH块保护寄存器(FLBPR)
- GP32(第14-7位)
Block protect range
FLBPR = 00 $8000 ~ $FFFF
= 01 $8080 ~ $FFFF
= 02 $8100 ~ $FFFF
…
= FE $FF00 ~ $FFFF
= FF
entire flash is NOT protected
- JL3(第12-6位)
Block protect range
FLBPR = 00-60
= 62
= 64
…
= FE
= FF
entire flash is protected
$EC40 ~ $FFFF
$EC80 ~ $FFFF
$FFC0 ~ $FFFF
entire flash is NOT protected
FLASH写入操作(1)
1)
2)
3)
4)
5)
6)
7)
置PGM位为1;
读出FLASH块保护寄存器;
向页地址范围内($XX00-XX7F,或$XX80
- $XXFF)任意FLASH单元写入任意值;
延时Tnvs≥10微秒;
置HVEN位为1;
延时Tpgs≥5微秒;
向页内目标地址写入编程数据;
FLASH写入操作(2)
8)
9)
10)
11)
12)
13)
延时Tprog≥30微秒;
重复7)、8),直至同一页内各字节编程
完毕;
清PGM位为0;
延时Tnvh≥5微秒;
清HVEN位为0;
延时Trcv≥1微秒以后,该FLASH页可以被
正常读取。
FLASH擦除操作(1)
1)
2)
3)
4)
5)
6)
置ERASE位为1(整体擦除时同时置MASS
位为1);
读出FLASH块保护寄存器;
向被擦除的FLASH页(整体擦除时为整
个FLASH区)内任意地址写入任意值;
延时Tnvs ≥ 10微秒;
置HVEN位为1;
延时Terase ≥ 1毫秒(整体擦除时为
Tmerase ≥ 4毫秒);
FLASH擦除操作(2)
7)
8)
9)
10)
清ERASE位为0;
延时Tnvh≥5微秒(整体擦除时为 Tnvhl
≥ 100微秒);
清HVEN位为0;
延时Trcv≥1微秒后,该FLASH页(整体擦
除时为整个FLASH区)可以被正常读取。
FLASH存储器编程范例(常量定义)
 常量定义
FLCR
EQU
$FE08
FLBPR
EQU
$FF09
;C10US、C30US、C50US和C1MS用于延时例程
C10US
EQU
$FFFE
C30US
EQU
$FFF8
C50US
EQU
$FFF1
C1MS
EQU
$FEC8
FLASH存储器编程范例(延时例程 )
 延时例程
NULLCYCLE:
AIX
CPHX
BNE
RTS
#1
#0
NULLCYCLE
; 2 CYCLES
; 3 CYCLES
; 3 CYCLES
; 4 CYCLES
调用方法如下(以延时30us为例):
LDHX
BSR
#C30US
NULLCYCLE
; 3 CYCLES
; 4 CYCLES
如果循环次数为n,则整个延时步骤耗费的总线周期为:
3(LDHX)+ 4(BSR)+(2(AIX)
+ 3(CPHX)+ 3(BNE))* n + 4(RTS) =8n+11
(8n+11)/2.4576=30us
n=8
C30US=$FFF8
FLASH存储器编程范例(页擦除例程 1)
 页擦除例程
RMB
4
;BUFF=$C7(“STA ”),; BUFF+3= $81 (“RTS”)
;BUFF+1和BUFF+2为需要擦除的FLASH页内的十六位地址
SUB_ERASE:
LDA
#2
; 置ERASE位为1,清MASS位为0
STA
FLCR
LDA
FLBPR
JSR
BUFF ;向被擦除的FLASH页内任意地址写入任意值
LDHX #C10US
; 延时Tnvs(10us)
BSR
NULLCYCLE
LDA
#0E
; 置HVEN位为1
STA
FLCR
LDHX #C1MS
; 延时Terase(1ms)
BSR
NULLCYCLE
BUFF
(To be continued)
FLASH存储器编程范例(页擦除例程 2)
 页擦除例程 (continue)
LDA
STA
LDHX
BSR
CLRA
STA
LDHX
BSR
RTS
#0C
FLCR
#C10US
NULLCYCLE
; 清ERASE位为0
; 延时Tnvh(10us)
; 清HVEN位为0
FLCR
#C10US
NULLCYCLE
; 延时Trcv(1us),此处延时10us
FLASH存储器编程范例(写入程序1)
 写入程序
FLASHFLAG
B_ERROR
BUFFCOU
COUNTE1
COUNTE2
PRADDR
TEMP
RMB
EQU
RMB
RMB
RMB
RMB
RMB
;BUFFCOU
1
0
2
1
1
2
2
;用于记录FLASH写入操作的状态
;用于标志写入操作是否成功(0)
;存储数据源缓冲区的起始地址
; 需复制到FLASH中的字节数
; COUNTE1的临时存储备份
; FLASH目标写入区域的起始地址
; BUFFCOU的临时存储备份
-------PRADDR
(To be continued)
FLASH存储器编程范例(写入程序2)
 写入程序(continue)
SUB_PROGRAM:
MOV
LDHX
STHX
LDA
STA
LDA
LDHX
STA
LDHX
BSR
LDA
STA
LDHX
BSR
COUNTE1,COUNTE2
; 将COUNTE1和BUFFCOU备份
BUFFCOU
TEMP
#1
; 置PGM位为1
FLCR
FLBPR
PRADDR
; 向地址范围内任意FLASH单元写入任意值
,X
#C10US
; 延时Tnvs(10us)
NULLCYCLE
#9
; 置HVEN位为1
FLCR
#C10US
; 延时Tpgs(5us),此处10us
NULLCYCLE
(To be continued)
FLASH存储器编程范例(写入程序3)
 写入程序(continue)
LDHX
CYCLE_PR:
PSHH
PSHX
LDHX
LDA
AIX
STHX
PULX
PULH
STA
AIX
PSHH
PSHX
LDHX
BSR
PULX
PULH
DEC
BNE
PRADDR
; 向目标地址写入编程数据
; 保存目标写入地址
BUFFCOU
,X
#1
BUFFCOU
; 提取源数据
; 将BUFFCOU指向下一个源数据
; 取出目标写入地址到(H:X)
,X
#1
; 向目标地址写入数据
; 将(H:X)指向下一个目标地址
; 保存目标写入地址
#C30US
NULLCYCLE
; 延时Tprog(30us)
; 取出目标写入地址到(H:X)
COUNTE1
CYCLE_PR
; 重复直至同一页内各字节编程完毕
(To be continued)
FLASH存储器编程范例(写入程序4)
 写入程序(continue)
LDA
STA
LDHX
BSR
CLRA
STA
LDHX
BSR
#8
FLCR
#C10US
NULLCYCLE
; 清PGM位为0
; 延时Tnvh(5us),此处为10us
; 清HVEN位为0
FLCR
#C10US
NULLCYCLE
; 延时Trcv(1us),此处延时10us
(To be continued)
FLASH存储器编程范例(校验1)
 校验
LDHX
STHX
LDHX
VERIFY_PR:
PSHX
PSHH
LDHX
LDA
AIX
STHX
PULH
PULX
TEMP
BUFFCOU
PRADDR
; 恢复BUFFCOU指向缓冲区首字节
; 取出目标写入地址到(H:X)
; 保存目标写入地址
BUFFCOU
,X
#1
BUFFCOU
; 提取源数据
; 将BUFFCOU指向下一个源数据
; 取出目标写入地址到(H:X)
(To be continued)
FLASH存储器编程范例(校验2)
 校验(con tinue)
CMP
BNE
AIX
DEC
BNE
RTS
ERROR_PR:
BSET
RTS
,X
; 比较源数据与目标地址中写入的数据
ERROR_PR
; 如不同则跳转到出错处理语句
#1
;相同将(H:X)指向下一个目标地址
COUNTE2
; 递减COUNTE2
VERIFY_PR
; 如果为0则校验完毕
B_ERROR,FLASHFLAG ; 如果出错置上标志位
Flash In System Programming through SCI Port
FLASH Data
$0000 I/O Registers
$0040
RAM
$023F
Application Software
FLASH Programming
Algorithm
TxD
SCI
RxD
PTA0
$8000
Erase FLASH
FLASH
ISP Routine
$FE00
Registers
Monitor ROM
$FFFF
Vectors
Programming and erasing
of FLASH locations cannot
be performed by code
being executed from the
FLASH memory
监控程序中修改FLASH字节的编程简述(1)
功能子程序
• SUB_WAIT(延时子程)
• SUB_ERASE(FLASH页擦除子程)
• SUB_PROGRAM(FLASH页写入子程)
监控程序中修改FLASH字节的编程简述(2)
编程步骤
1、拷贝欲修改的FLASH字节所在的整个页(128字节)
到RAM中(如复制到$0180后);
2、在RAM中修改欲修改的FLASH字节所对应的内容;
3、拷贝SUB_WAIT和SUB_ERASE到RAM中(如复制到
$0100后),执行SUB_ERASE,擦除FLASH页;
4、拷贝SUB_WAIT和SUB_PROGRAM到RAM中,执
行SUB_PROGRAM,将RAM中修改后的FLASH页
写回FLASH。
监控程序中修改FLASH字节的编程图解(1)
(1)拷贝FLAS页(如FLASH页$8000-$807F)
(2)在RAM中修改字节
(如欲修改FLASH中的字节$8040,则应修改RAM中对
应字节$01C0)
监控程序中修改FLASH字节的编程图解(2)
(3)擦除FLASH页
(4)写入FLASH页
注意事项
• FLASH擦写时,FLASH擦写程序代码应放在RAM中,
或利用ROM中的例程。
• FLCR的HEVN置1时,整个FLASH加上编程高电压,
此时对FLASH内字节的读写不稳定。
MC68HC08GP32IDK监控程序和用户程序的关系
• 用户复位向量$DFFE-$DFFF,芯片复位向量$FFFE$FFFF
• 用户复位向量为非空(非$FFFF ),监控程序等待键
盘命令,5s内没有动作,跳转到用户复位向量处,运
行用户程序
• 监控程序入口地址$DFDA-$DFDB,用JMP跳转命令可
以从用户程序返回监控程序
利用ROM中的例程进行FLASH在线编程 (ref. 908LJ12)
DataFile1 pointer
DataFile2 pointer
CPUSPD
Data Size
Address High 1
Address Low 1
Data0
Data1
DataN
PROGRAM
VERIFY
FLASH
:
LDHX
JSR
:
$<DataFile1PTR>
PRGRNGE
:
LDHX
JSR
:
$<DataFile2PTR>
LDRNGE
CPUSPD
Data Size
Address High 1
Address Low 1
Data0
Data1
DataN
Function Name
Calling Address
Feature
WRITE_EE
$FC00
Stack the DATA segment from data file to the FLASH block and updates dirty control bit
accordingly. If block overflows, performs block erase.
READ_EE
$FC03
Read last updated DATA segment from FLASH block back to data file.
LDRNGE
$FF30
Load data from FLASH block to data file with specific location and size.
PRGRNGE
$FC06
Program specific FLASH location with data listed in data file.
ERARNGE
$FCBE
Perform mass erase or single block erase according to user selection.
ICP_LDRNGE
$FF24
Perform same operation as LDRNGE. This subroutine is specially designed to use under
monitor mode.
ICP_PRGRNGE
$FF28
Perform same operation as PRGRNGE. This subroutine is specially designed to use
under monitor mode.
ICP_ERARNGE
$FF2C
Perform same operation as ERARNGE. This subroutine is specially designed to use
under monitor mode.
FLASH 应用一(1)
MC68HC08GP32在线开发实验系统
FLASH 应用一(2)
MC68HC08GP32在线开发实验系统
FLASH 应用二
MC68HC08GP32编程器
FLASH 应用三(1)
MC68HC908LJ12在线编程开发工具
FLASH 应用三(2)
MC68HC908LJ12在线编程开发工具特点
• 编程器的功能
—(监控模式对FLASH进行在线编程)
通过硬件方式进入监控模式对片内FLASH进行写入操作;
不占用任何系统资源;
使用4.9152MHz有源晶振。
• 开发板的功能
—(提供给用户最小的调试工作系统)
内含大约3.5K的监控程序;
使用32768Hz晶振;
监控程序提供给用户各种基本的开发和调试功能:程序的下载和运行、
断点设置、寄存器显示及修改、存储器显示及修改等等。
FLASH 应用四(1)
MC68HC908在线编程头
FLASH 应用四(2)
MC68HC908在线编程头特点
• 适用于MC68HC908系列的单片机
MC68HC908GR32, MC68HC908SR12,
MC68HC908LJ12等
• 编程功能
可通过硬件方式进入监控模式对片内FLASH进行擦写
• 通讯功能
可作为与PC机串口通讯的工具