380 likes | 710 Views
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
E N D
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中的程序
READ: HVEN MASS ERASE PGM FLCR WRITE: RESET: 0 0 0 0 0 0 0 0 FLASH控制寄存器(FLCR) • HVEN — 高压允许位,用于将来自片内电荷泵 的高压加到FLASH阵列上; • MASS — 整体擦除控制位,用于选择擦除方式 (=1,整体擦除 / =0,页擦除); • ERASE — 擦除控制位,用于选择擦除操作; • PGM — 写入控制位,用于选择编程写入操作。
READ: FLBPR BPR7 BPR6 BPR5 BPR4 BPR3 BPR2 BPR1 BPR0 WRITE: RESET: U U U U U U U U FLASH块保护寄存器(FLBPR) = 00 $8000 ~ $FFFF • = 01 $8080 ~ $FFFF • = 02 $8100 ~ $FFFF • … • = FE $FF00 ~ $FFFF • = FF 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 entire flash is protected = 62 $EC40 ~ $FFFF = 64 $EC80 ~ $FFFF … = FE $FFC0 ~ $FFFF = FF entire flash is NOT protected
FLASH写入操作(1) 1) 置PGM位为1; 2) 读出FLASH块保护寄存器; 3) 向页地址范围内($XX00-XX7F,或$XX80 - $XXFF)任意FLASH单元写入任意值; 4) 延时Tnvs≥10微秒; 5) 置HVEN位为1; 6) 延时Tpgs≥5微秒; 7) 向页内目标地址写入编程数据;
FLASH写入操作(2) 8) 延时Tprog≥30微秒; 9) 重复7)、8),直至同一页内各字节编程 完毕; 10) 清PGM位为0; 11) 延时Tnvh≥5微秒; 12) 清HVEN位为0; 13) 延时Trcv≥1微秒以后,该FLASH页可以被 正常读取。
FLASH擦除操作(1) 1) 置ERASE位为1(整体擦除时同时置MASS 位为1); 2) 读出FLASH块保护寄存器; 3) 向被擦除的FLASH页(整体擦除时为整 个FLASH区)内任意地址写入任意值; 4) 延时Tnvs ≥ 10微秒; 5) 置HVEN位为1; 6) 延时Terase ≥ 1毫秒(整体擦除时为 Tmerase ≥ 4毫秒);
FLASH擦除操作(2) 7) 清ERASE位为0; 8) 延时Tnvh≥5微秒(整体擦除时为 Tnvhl ≥ 100微秒); 9) 清HVEN位为0; 10) 延时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 #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=30us n=8 C30US=$FFF8
FLASH存储器编程范例(页擦除例程 1) • 页擦除例程 BUFF 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 (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 BUFFCOU STHX TEMP LDA #1 ; 置PGM位为1 STA FLCR LDA FLBPR LDHX PRADDR ; 向地址范围内任意FLASH单元写入任意值 STA ,X LDHX #C10US ; 延时Tnvs(10us) BSR NULLCYCLE LDA #9 ; 置HVEN位为1 STA FLCR LDHX #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 ; 保存目标写入地址 PSHX LDHX #C30US ; 延时Tprog(30us) BSR NULLCYCLE PULX ; 取出目标写入地址到(H:X) PULH DEC 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 TEMP STHX BUFFCOU ; 恢复BUFFCOU指向缓冲区首字节 LDHX PRADDR ; 取出目标写入地址到(H:X) VERIFY_PR: PSHX ; 保存目标写入地址 PSHH LDHX 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
Application Software FLASH Data $0000 I/O Registers $0040 RAM $023F FLASH Programming Algorithm SCI TxD RxD PTA0 $8000 FLASH Erase FLASH Programming and erasing of FLASH locations cannot be performed by code being executed from the FLASH memory ISP Routine $FE00 Registers Monitor ROM $FFFF Vectors Flash In System Programming through SCI Port
监控程序中修改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跳转命令可以从用户程序返回监控程序
DataFile1 pointer DataFile2 pointer CPUSPD CPUSPD Data Size Data Size Address High 1 Address High 1 Address Low 1 Address Low 1 Data0 Data0 Data1 Data1 DataN DataN 利用ROM中的例程进行FLASH在线编程 (ref. 908LJ12) PROGRAM VERIFY FLASH : LDHX $<DataFile1PTR> JSR PRGRNGE : : LDHX $<DataFile2PTR> JSR LDRNGE :
FLASH 应用一(1) MC68HC08GP32在线开发实验系统
FLASH 应用三(2)MC68HC908LJ12在线编程开发工具特点 • 编程器的功能 —(监控模式对FLASH进行在线编程) 通过硬件方式进入监控模式对片内FLASH进行写入操作; 不占用任何系统资源; 使用4.9152MHz有源晶振。 • 开发板的功能 —(提供给用户最小的调试工作系统) 内含大约3.5K的监控程序; 使用32768Hz晶振; 监控程序提供给用户各种基本的开发和调试功能:程序的下载和运行、断点设置、寄存器显示及修改、存储器显示及修改等等。
FLASH 应用四(2)MC68HC908在线编程头特点 • 适用于MC68HC908系列的单片机 MC68HC908GR32, MC68HC908SR12, MC68HC908LJ12等 • 编程功能 可通过硬件方式进入监控模式对片内FLASH进行擦写 • 通讯功能 可作为与PC机串口通讯的工具