Top Banner
FLASH 存存存存 MC68HC908 存存存存 Tsinghua Motorola MCU&DSP Ap plication Center Jiangjunfeng 2002.4
37

FLASH 存储器和 MC68HC908 在线编程

Jan 11, 2016

Download

Documents

vida

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
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: FLASH 存储器和  MC68HC908 在线编程

FLASH 存储器和 MC68HC908 在线编程

Tsinghua Motorola MCU&DSP Application Center

Jiangjunfeng

2002.4

Tsinghua Motorola MCU&DSP Application Center

Jiangjunfeng

2002.4

Page 2: FLASH 存储器和  MC68HC908 在线编程

FLASH 存储器

•Motorola 微控制器片内集成 FLASH的优点– 单一电源供电( FLASH 编程时通过片内集

成电荷泵产生编程电压)– 可靠性高(数据保存 >10 年,擦写 >1 万

次)– 擦写速度快(整体擦除 5ms ,单字节编程 4

0us )

Page 3: FLASH 存储器和  MC68HC908 在线编程

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

Page 4: FLASH 存储器和  MC68HC908 在线编程

1.) 监控模式- 一般需要硬件支持- 一般需要 RAM 程序支持- 编程器和仿真器使用

FLASH 编程模式FLASH 编程模式

2.) 用户模式- 需要芯片内部软件支持- 需要 RAM 程序支持- 目标系统使用

Page 5: FLASH 存储器和  MC68HC908 在线编程

- 监控方式的进入– 复位向量( $FFFE-$FFFF )为空( $FFFF )– 在特定引脚上提供特定电平(复位时)

- 监控 ROM的指令

- 下载到 RAM中的程序

监控模式编程监控模式编程

Page 6: FLASH 存储器和  MC68HC908 在线编程

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 — 写入控制位,用于选择编程写入操作。

Page 7: FLASH 存储器和  MC68HC908 在线编程

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

Page 8: FLASH 存储器和  MC68HC908 在线编程

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

Page 9: FLASH 存储器和  MC68HC908 在线编程

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 )

Page 10: FLASH 存储器和  MC68HC908 在线编程

8) 延时 Tprog≥30 微秒;9) 重复 7 )、 8 ),直至同一页内各

字节编程 完毕;10) 清 PGM 位为 0 ;11) 延时 Tnvh≥5 微秒;12) 清 HVEN 位为 0 ;13) 延时 Trcv≥1 微秒以后,该 FLAS

H 页可以被 正常读取。

FLASH 写入操作( 2 )FLASH 写入操作( 2 )

Page 11: FLASH 存储器和  MC68HC908 在线编程

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 )

Page 12: FLASH 存储器和  MC68HC908 在线编程

7) 清 ERASE 位为 0 ;8) 延时 Tnvh≥5 微秒(整体擦除时为

Tnvhl ≥ 100 微秒);9) 清 HVEN 位为 0 ;10) 延时 Trcv≥1 微秒后,该 FLASH

页(整体擦 除时为整个 FLASH 区)可以被正常读取。

FLASH 擦除操作( 2 )FLASH 擦除操作( 2 )

Page 13: FLASH 存储器和  MC68HC908 在线编程

FLASH 存储器编程范例(常量定义)

常量定义FLCR EQU $FE08

FLBPR EQU $FF09

; C10US 、 C30US 、 C50US 和 C1MS 用于延时例程 C10US EQU $FFFE

C30US EQU $FFF8

C50US EQU $FFF1

C1MS EQU $FEC8

Page 14: FLASH 存储器和  MC68HC908 在线编程

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

Page 15: FLASH 存储器和  MC68HC908 在线编程

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)

Page 16: FLASH 存储器和  MC68HC908 在线编程

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

Page 17: FLASH 存储器和  MC68HC908 在线编程

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)

Page 18: FLASH 存储器和  MC68HC908 在线编程

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)

Page 19: FLASH 存储器和  MC68HC908 在线编程

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)

Page 20: FLASH 存储器和  MC68HC908 在线编程

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)

Page 21: FLASH 存储器和  MC68HC908 在线编程

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 )

Page 22: FLASH 存储器和  MC68HC908 在线编程

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

Page 23: FLASH 存储器和  MC68HC908 在线编程

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

Page 24: FLASH 存储器和  MC68HC908 在线编程

监控程序中修改 FLASH 字节的编程简述( 1 )

功能子程序

• SUB_WAIT (延时子程)

• SUB_ERASE ( FLASH 页擦除子程)

• SUB_PROGRAM ( FLASH 页写入子程)

Page 25: FLASH 存储器和  MC68HC908 在线编程

监控程序中修改 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 。

Page 26: FLASH 存储器和  MC68HC908 在线编程

监控程序中修改 FLASH 字节的编程图解( 1 )

( 1 )拷贝 FLAS 页(如 FLASH 页 $8000-$807F )

( 2 )在 RAM 中修改字节(如欲修改 FLASH 中的字节 $8040 ,则应修改 RAM 中

对应字节 $01C0 )

Page 27: FLASH 存储器和  MC68HC908 在线编程

监控程序中修改 FLASH 字节的编程图解( 2 )

( 3 )擦除 FLASH 页

( 4 )写入 FLASH 页

Page 28: FLASH 存储器和  MC68HC908 在线编程

注意事项

• FLASH 擦写时, FLASH 擦写程序代码应放在 RAM中,或利用 ROM 中的例程。

• FLCR 的 HEVN 置 1 时,整个 FLASH 加上编程高电压,此时对 FLASH 内字节的读写不稳定。

Page 29: FLASH 存储器和  MC68HC908 在线编程

MC68HC08GP32IDK 监控程序和用户程序的关系

• 用户复位向量 $DFFE-$DFFF ,芯片复位向量 $FFFE-$FFFF

• 用户复位向量为非空(非 $FFFF ),监控程序等待键盘命令, 5s 内没有动作,跳转到用户复位向量处,运行用户程序

• 监控程序入口地址 $DFDA-$DFDB ,用 JMP 跳转命令可以从用户程序返回监控程序

Page 30: FLASH 存储器和  MC68HC908 在线编程

利用利用 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.

Page 31: FLASH 存储器和  MC68HC908 在线编程

FLASH 应用一 (1)MC68HC08GP32 在线开发实验系统

FLASH 应用一 (1)MC68HC08GP32 在线开发实验系统

Page 32: FLASH 存储器和  MC68HC908 在线编程

FLASH 应用一 (2)MC68HC08GP32 在线开发实验系统

Page 33: FLASH 存储器和  MC68HC908 在线编程

FLASH 应用二MC68HC08GP32 编程器

Page 34: FLASH 存储器和  MC68HC908 在线编程

FLASH 应用三( 1 )MC68HC908LJ12 在线编程开发工具

Page 35: FLASH 存储器和  MC68HC908 在线编程

FLASH 应用三( 2 )MC68HC908LJ12 在线编程开发工具特点

• 编程器的功能—(监控模式对 FLASH进行在线编程)通过硬件方式进入监控模式对片内 FLASH进行写入操作;不占用任何系统资源;使用 4.9152MHz有源晶振。

• 开发板的功能—(提供给用户最小的调试工作系统)内含大约 3.5K 的监控程序;使用 32768Hz晶振;监控程序提供给用户各种基本的开发和调试功能:程序的下载和运行、断点设置、寄存器显示及修改、存储器显示及修改等等。

Page 36: FLASH 存储器和  MC68HC908 在线编程

FLASH 应用四( 1 )MC68HC908 在线编程头

Page 37: FLASH 存储器和  MC68HC908 在线编程

FLASH 应用四( 2 )MC68HC908 在线编程头特点

• 适用于 MC68HC908 系列的单片机 MC68HC908GR32, MC68HC908SR12, MC68HC908LJ1

2等• 编程功能

可通过硬件方式进入监控模式对片内 FLASH进行擦写

• 通讯功能可作为与 PC机串口通讯的工具