FLASH 存储器和 MC68HC908 在线编程

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

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

Transcript of FLASH 存储器和 MC68HC908 在线编程

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 程序支持- 目标系统使用

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

- 监控 ROM的指令

- 下载到 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 字节的编程图解( 2 )

( 3 )擦除 FLASH 页

( 4 )写入 FLASH 页

注意事项

• 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 应用一 (1)MC68HC08GP32 在线开发实验系统

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, MC68HC908LJ1

2等• 编程功能

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

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