1 / 37

FLASH 存储器和 MC68HC908 在线编程

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

vida
Download Presentation

FLASH 存储器和 MC68HC908 在线编程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. FLASH存储器和 MC68HC908在线编程 Tsinghua Motorola MCU&DSP Application Center Jiangjunfeng 2002.4

  2. FLASH 存储器 • Motorola微控制器片内集成FLASH的优点 • 单一电源供电(FLASH编程时通过片内集成电荷泵产生编程电压) • 可靠性高(数据保存>10年,擦写>1万次) • 擦写速度快(整体擦除5ms,单字节编程40us)

  3. 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

  4. FLASH 编程模式 1.) 监控模式 - 一般需要硬件支持 - 一般需要RAM程序支持 - 编程器和仿真器使用 2.) 用户模式 - 需要芯片内部软件支持 - 需要RAM程序支持 - 目标系统使用

  5. 监控模式编程 - 监控方式的进入 • 复位向量($FFFE-$FFFF)为空($FFFF) • 在特定引脚上提供特定电平(复位时) - 监控ROM的指令 - 下载到RAM中的程序

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

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

  8. 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

  9. FLASH写入操作(1) 1) 置PGM位为1; 2) 读出FLASH块保护寄存器; 3) 向页地址范围内($XX00-XX7F,或$XX80 - $XXFF)任意FLASH单元写入任意值; 4) 延时Tnvs≥10微秒; 5) 置HVEN位为1; 6) 延时Tpgs≥5微秒; 7) 向页内目标地址写入编程数据;

  10. FLASH写入操作(2) 8) 延时Tprog≥30微秒; 9) 重复7)、8),直至同一页内各字节编程 完毕; 10) 清PGM位为0; 11) 延时Tnvh≥5微秒; 12) 清HVEN位为0; 13) 延时Trcv≥1微秒以后,该FLASH页可以被 正常读取。

  11. FLASH擦除操作(1) 1) 置ERASE位为1(整体擦除时同时置MASS 位为1); 2) 读出FLASH块保护寄存器; 3) 向被擦除的FLASH页(整体擦除时为整 个FLASH区)内任意地址写入任意值; 4) 延时Tnvs ≥ 10微秒; 5) 置HVEN位为1; 6) 延时Terase ≥ 1毫秒(整体擦除时为 Tmerase ≥ 4毫秒);

  12. FLASH擦除操作(2) 7) 清ERASE位为0; 8) 延时Tnvh≥5微秒(整体擦除时为 Tnvhl ≥ 100微秒); 9) 清HVEN位为0; 10) 延时Trcv≥1微秒后,该FLASH页(整体擦 除时为整个FLASH区)可以被正常读取。

  13. FLASH存储器编程范例(常量定义) • 常量定义 FLCR EQU $FE08 FLBPR EQU $FF09 ;C10US、C30US、C50US和C1MS用于延时例程 C10US EQU $FFFE C30US EQU $FFF8 C50US EQU $FFF1 C1MS EQU $FEC8

  14. 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

  15. 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)

  16. 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

  17. 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)

  18. 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)

  19. 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)

  20. 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)

  21. 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)

  22. 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

  23. 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

  24. 监控程序中修改FLASH字节的编程简述(1) • 功能子程序 • SUB_WAIT(延时子程) • SUB_ERASE(FLASH页擦除子程) • SUB_PROGRAM(FLASH页写入子程)

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

  26. 监控程序中修改FLASH字节的编程图解(1) (1)拷贝FLAS页(如FLASH页$8000-$807F) (2)在RAM中修改字节 (如欲修改FLASH中的字节$8040,则应修改RAM中对应字节$01C0)

  27. 监控程序中修改FLASH字节的编程图解(2) (3)擦除FLASH页 (4)写入FLASH页

  28. 注意事项 • FLASH擦写时,FLASH擦写程序代码应放在RAM中,或利用ROM中的例程。 • FLCR的HEVN置1时,整个FLASH加上编程高电压,此时对FLASH内字节的读写不稳定。

  29. MC68HC08GP32IDK监控程序和用户程序的关系 • 用户复位向量$DFFE-$DFFF,芯片复位向量$FFFE-$FFFF • 用户复位向量为非空(非$FFFF ),监控程序等待键盘命令,5s内没有动作,跳转到用户复位向量处,运行用户程序 • 监控程序入口地址$DFDA-$DFDB,用JMP跳转命令可以从用户程序返回监控程序

  30. 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 :

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

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

  33. FLASH 应用二MC68HC08GP32编程器

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

  35. FLASH 应用三(2)MC68HC908LJ12在线编程开发工具特点 • 编程器的功能 —(监控模式对FLASH进行在线编程) 通过硬件方式进入监控模式对片内FLASH进行写入操作; 不占用任何系统资源; 使用4.9152MHz有源晶振。 • 开发板的功能 —(提供给用户最小的调试工作系统) 内含大约3.5K的监控程序; 使用32768Hz晶振; 监控程序提供给用户各种基本的开发和调试功能:程序的下载和运行、断点设置、寄存器显示及修改、存储器显示及修改等等。

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

  37. FLASH 应用四(2)MC68HC908在线编程头特点 • 适用于MC68HC908系列的单片机 MC68HC908GR32, MC68HC908SR12, MC68HC908LJ12等 • 编程功能 可通过硬件方式进入监控模式对片内FLASH进行擦写 • 通讯功能 可作为与PC机串口通讯的工具

More Related