Upload
vida
View
197
Download
3
Embed Size (px)
DESCRIPTION
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 - PowerPoint PPT Presentation
Citation preview
FLASH 存储器和 MC68HC908 在线编程
Tsinghua Motorola MCU&DSP Application Center
Jiangjunfeng
2002.4
Tsinghua Motorola MCU&DSP Application Center
Jiangjunfeng
2002.4
FLASH 存储器
•Motorola 微控制器片内集成 FLASH的优点– 单一电源供电( FLASH 编程时通过片内集
成电荷泵产生编程电压)– 可靠性高(数据保存 >10 年,擦写 >1 万
次)– 擦写速度快(整体擦除 5ms ,单字节编程 4
0us )
FLASH ArrayFLASH Array
• GP32Flash 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
• JL3Flash 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
1.) 监控模式- 一般需要硬件支持- 一般需要 RAM 程序支持- 编程器和仿真器使用
FLASH 编程模式FLASH 编程模式
2.) 用户模式- 需要芯片内部软件支持- 需要 RAM 程序支持- 目标系统使用
FLASH 控制寄存器( FLCR )FLASH 控制寄存器( FLCR )
RESET: 0 0 0 0 0 0 0 0
WRITE:
READ: HVEN MASS ERASE PGMFLCR
HVEN — 高压允许位,用于将来自片内电荷泵 的高压加到 FLASH 阵列上; MASS — 整体擦除控制位,用于选择擦除方式 ( =1 ,整体擦除 / =0 ,页擦除); ERASE — 擦除控制位,用于选择擦除操作; PGM — 写入控制位,用于选择编程写入操作。
FLASH 块保护寄存器( FLBPR )
FLASH 块保护寄存器( FLBPR )
= 00 $8000 ~ $FFFF = 01 $8080 ~ $FFFF = 02 $8100 ~ $FFFF … = FE $FF00 ~ $FFFF = FF entire flash is NOT protected
RESET: U U U U U U U U
WRITE:
READ: BPR7 BPR6 BPR5 BPR4 BPR3 BPR2 BPR1 BPR0FLBPR
FLASH 块保护寄存器( FLBPR )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 entire flash is protected = 62 $EC40 ~ $FFFF = 64 $EC80 ~ $FFFF … = FE $FFC0 ~ $FFFF = FF entire flash is NOT protected
1) 置 PGM 位为 1 ;2) 读出 FLASH 块保护寄存器;3) 向页地址范围内( $XX00-XX7F ,
或 $XX80 - $XXFF )任意 FLASH 单元写入任意值;
4) 延时 Tnvs≥10 微秒;5) 置 HVEN 位为 1 ;6) 延时 Tpgs≥5 微秒;7) 向页内目标地址写入编程数据;
FLASH 写入操作( 1 )FLASH 写入操作( 1 )
8) 延时 Tprog≥30 微秒;9) 重复 7 )、 8 ),直至同一页内各
字节编程 完毕;10) 清 PGM 位为 0 ;11) 延时 Tnvh≥5 微秒;12) 清 HVEN 位为 0 ;13) 延时 Trcv≥1 微秒以后,该 FLAS
H 页可以被 正常读取。
FLASH 写入操作( 2 )FLASH 写入操作( 2 )
1) 置 ERASE 位为 1 (整体擦除时同时置MASS 位为 1 );
2) 读出 FLASH 块保护寄存器;3) 向被擦除的 FLASH 页(整体擦除时为
整 个 FLASH 区)内任意地址写入任意值;
4) 延时 Tnvs ≥ 10 微秒;5) 置 HVEN 位为 1 ;6) 延时 Terase ≥ 1 毫秒(整体擦除时为
Tmerase ≥ 4 毫秒);
FLASH 擦除操作( 1 )FLASH 擦除操作( 1 )
7) 清 ERASE 位为 0 ;8) 延时 Tnvh≥5 微秒(整体擦除时为
Tnvhl ≥ 100 微秒);9) 清 HVEN 位为 0 ;10) 延时 Trcv≥1 微秒后,该 FLASH
页(整体擦 除时为整个 FLASH 区)可以被正常读取。
FLASH 擦除操作( 2 )FLASH 擦除操作( 2 )
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 #1 ; 2 CYCLES
CPHX #0 ; 3 CYCLES
BNE NULLCYCLE ; 3 CYCLES
RTS ; 4 CYCLES
调用方法如下(以延时 30us 为例):LDHX #C30US ; 3 CYCLES
BSR NULLCYCLE ; 4 CYCLES
如果循环次数为 n ,则整个延时步骤耗费的总线周期为:3 ( LDHX ) + 4 ( BSR ) + ( 2 ( AIX )+ 3 ( CPHX ) + 3 ( BNE )) * n + 4 ( RTS ) = 8n+11( 8n+11 ) /2.4576=30usn=8 C30US=$FFF8
FLASH 存储器编程范例(页擦除例程 1 )
页擦除例程 BUFF RMB 4 ;BUFF=$C7(“STA ”) , ; BUFF+3 = $81 (“ RTS” ) ; B
UFF+1 和 BUFF+2 为需要擦除的 FLASH 页内的十六位地址SUB_ERASE:
LDA #2 ; 置 ERASE 位为 1 ,清 MASS 位为 0STA FLCRLDA FLBPRJSR BUFF ; 向被擦除的 FLASH 页内任意地址写入任意值LDHX #C10US ; 延时 Tnvs ( 10us )BSR NULLCYCLELDA #0E ; 置 HVEN 位为 1STA FLCRLDHX #C1MS ; 延时 Terase ( 1ms )BSR NULLCYCLE (To be continued)
FLASH 存储器编程范例(页擦除例程 2 )
页擦除例程 ( continue )LDA #0C ; 清 ERASE 位为 0
STA FLCR
LDHX #C10US ; 延时 Tnvh ( 10us )BSR NULLCYCLE
CLRA ; 清 HVEN 位为 0
STA FLCR
LDHX #C10US ; 延时 Trcv ( 1us ),此处延时 10us
BSR NULLCYCLE
RTS
FLASH 存储器编程范例(写入程序 1 )
写入程序 FLASHFLAG RMB 1 ; 用于记录 FLASH 写入操作的状态B_ERROR EQU 0 ; 用于标志写入操作是否成功( 0 )BUFFCOU RMB 2 ; 存储数据源缓冲区的起始地址COUNTE1 RMB 1 ; 需复制到 FLASH 中的字节数COUNTE2 RMB 1 ; COUNTE1 的临时存储备份PRADDR RMB 2 ; FLASH 目标写入区域的起始地址TEMP RMB 2 ; BUFFCOU 的临时存储备份
;BUFFCOU ------- PRADDR
(To be continued)
FLASH 存储器编程范例(写入程序 2 ) 写入程序 (continue)SUB_PROGRAM:
MOV COUNTE1,COUNTE2 ; 将 COUNTE1 和 BUFFCOU 备份LDHX BUFFCOUSTHX TEMPLDA #1 ; 置 PGM 位为 1STA FLCRLDA FLBPRLDHX PRADDR ; 向地址范围内任意 FLASH 单元写入任意值STA ,XLDHX #C10US ; 延时 Tnvs ( 10us )BSR NULLCYCLELDA #9 ; 置 HVEN 位为 1STA FLCRLDHX #C10US ; 延时 Tpgs ( 5us ),此处 10us
BSR NULLCYCLE (To be continued)
FLASH 存储器编程范例(写入程序 3 ) 写入程序 (continue)
LDHX PRADDR ; 向目标地址写入编程数据CYCLE_PR: PSHH ; 保存目标写入地址 PSHX
LDHX BUFFCOU ; 提取源数据 LDA ,X
AIX #1 ; 将 BUFFCOU 指向下一个源数据STHX BUFFCOU
PULX ; 取出目标写入地址到( H:X ) PULH STA ,X ; 向目标地址写入数据
AIX #1 ; 将( H:X )指向下一个目标地址PSHH ; 保存目标写入地址PSHXLDHX #C30US ; 延时 Tprog ( 30us )BSR NULLCYCLEPULX ; 取出目标写入地址到( H:X )PULHDEC COUNTE1 ; 重复直至同一页内各字节编程完毕BNE CYCLE_PR (To be continued)
FLASH 存储器编程范例(写入程序 4 )
写入程序 (continue)LDA #8 ; 清 PGM 位为 0
STA FLCR
LDHX #C10US ; 延时 Tnvh ( 5us ),此处为 10us
BSR NULLCYCLE
CLRA ; 清 HVEN 位为 0
STA FLCR
LDHX #C10US ; 延时 Trcv ( 1us ),此处延时 10us
BSR NULLCYCLE
(To be continued)
FLASH 存储器编程范例(校验 1 )
校验LDHX TEMPSTHX BUFFCOU ; 恢复 BUFFCOU 指向缓冲区首字节LDHX PRADDR ; 取出目标写入地址到( H:X )
VERIFY_PR: PSHX ; 保存目标写入地址
PSHHLDHX BUFFCOU ; 提取源数据
LDA ,X AIX #1 ; 将 BUFFCOU 指向下一个源数据 STHX BUFFCOU PULH ; 取出目标写入地址到( H:X ) PULX
( To be continued )
FLASH 存储器编程范例(校验 2 )
校验 (con tinue)CMP ,X ; 比较源数据与目标地址中写入的数据BNE ERROR_PR ; 如不同则跳转到出错处理语句
AIX #1 ; 相同将( H:X )指向下一个目标地址DEC COUNTE2 ; 递减 COUNTE2
BNE VERIFY_PR ; 如果为 0 则校验完毕RTS
ERROR_PR:
BSET B_ERROR,FLASHFLAG ; 如果出错置上标志位RTS
Flash In System Programming through SCI Port
RegistersMonitor ROM
Vectors
$0040
$023F
$FE00
FLASH ProgrammingAlgorithm
$0000
$FFFF
ISP Routine
RxD
TxD
PTA0
I/O Registers
RAM
SCI
FLASH Data
FLASH
$8000
Erase FLASH
Application Software
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 擦写时, FLASH 擦写程序代码应放在 RAM中,或利用 ROM 中的例程。
• FLCR 的 HEVN 置 1 时,整个 FLASH 加上编程高电压,此时对 FLASH 内字节的读写不稳定。
MC68HC08GP32IDK 监控程序和用户程序的关系
• 用户复位向量 $DFFE-$DFFF ,芯片复位向量 $FFFE-$FFFF
• 用户复位向量为非空(非 $FFFF ),监控程序等待键盘命令, 5s 内没有动作,跳转到用户复位向量处,运行用户程序
• 监控程序入口地址 $DFDA-$DFDB ,用 JMP 跳转命令可以从用户程序返回监控程序
利用利用 ROMROM 中的例程进行中的例程进行 FLASHFLASH 在线编程 在线编程 (ref. 908LJ1(ref. 908LJ12)2)
CPUSPDData Size
Address High 1Address Low 1
Data0Data1
DataN
DataFile1 pointer
CPUSPDData Size
Address High 1Address Low 1
Data0Data1
DataN
DataFile2 pointer
:LDHX $<DataFile1PTR>JSR PRGRNGE :
:LDHX $<DataFile2PTR>JSR LDRNGE :
PROGRAM VERIFY
FLASH
Function Name Calling Address Feature
WRITE_EE $FC00 Stack the DATA segment from data file to the FLASH block and updates dirty control bitaccordingly. 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 undermonitor mode.
ICP_PRGRNGE $FF28 Perform same operation as PRGRNGE. This subroutine is specially designed to useunder monitor mode.
ICP_ERARNGE $FF2C Perform same operation as ERARNGE. This subroutine is specially designed to useunder monitor mode.
FLASH 应用三( 2 )MC68HC908LJ12 在线编程开发工具特点
• 编程器的功能—(监控模式对 FLASH进行在线编程)通过硬件方式进入监控模式对片内 FLASH进行写入操作;不占用任何系统资源;使用 4.9152MHz有源晶振。
• 开发板的功能—(提供给用户最小的调试工作系统)内含大约 3.5K 的监控程序;使用 32768Hz晶振;监控程序提供给用户各种基本的开发和调试功能:程序的下载和运行、断点设置、寄存器显示及修改、存储器显示及修改等等。