访问电脑版页面

导航:老古开发网手机版其他

MC68HC908 FLASH存储器的在线擦写方法

导读:
关键字:
MC68HC908 FLASH存储器的在线擦写方法 复旦大学MOTOROLA单片机开发应用中心涂时亮 摘要MC68HC908 是具有FLASH存储器的高性能CMOS单片机。该FLASH存储器一般用作程序存储器,不能在运行时随时擦除、写入。本文分类介绍使用MC68HC908的FLASH存储器用作存储数据的EEPROM的在线擦除、写入方法和具体程序。 关键词单片机FLASH存储器EEPROM M68HC908是MOTOROLA公司生产的高性能CMOS单片机。它的CPU为8位,最高工作频率为32MHz,具有100余条指令, 包括乘法、除法和各种位操作指令。它有多种型号,有128~1024字节RAM和1~60KB(字节)FLASH ROM;有一或两个具有多路输入输出的16位定时器、并行和串行I/O口、A/D、外部中断输入等。 M68HC908的FLASH存储器一般用作程序存储器,不能在运行时随时擦除、写入。许多单片机应用场合需要使用掉电不丢失内容的数据存储器,这一般用EEPROM来实现。为节省成本,可使用M68HC908的FLASH存储器来用作数据存储器。由于擦除、写入FLASH存储器的程序不能位于FLASH存储器中,必须把该程序放于RAM或ROM中,故应使用特殊的写入方法。按M68HC908的RAM大小,FLASH的写入方法可分为两大类:一类是RAM大于256字节,包括GP32、SR12、MR32、AZ60等;另一类是RAM小于256字节,包括JL3/JK3、GR8、JB8、KX8等。下面分类介绍写入方法。 一、 MC68HC908GP32/SR12/MR32/AZ60等 FLASH 在线擦除、写入方法它们有FLASH 编程寄存器控制FLASH存储器的擦除与写入,有FLASH块保护寄存器保护高于指定地址的FLASH不被写入。M68HC908的FLASH采用页擦除方法,每页为64~128字节。而在用作EEPROM存放数据时,一般以字节为单位进行。所以,在修改某个字节进行擦除前,应先保护该字节所在的一页内容至RAM中,再修改该字节,最后把RAM内容写回FLASH中。由于执行擦除和写入的程序不能位于FLASH存储器中,必须把该程序放于RAM中。下面以MC68HC908GP32为例,介绍具体的写入方法。 1. FLASH 编程寄存器 MC68HC908GP32有32KB FLASH 存储器。FLCR ($FE08) 控制GP32的FLASH存储器的擦除与写入。位0为PGM位,写入时置位;位1为ERASE位,擦除时置位;位3为HVEN位,执行写入或擦除时置位。在FLCR不为零时不能读出FLASH存储器(包括执行程序)。 FLSPR ($FF7E) 为FLASH块保护寄存器,对应于FLASH保护区首地址的位14~位7(位15=1)。如数据存储区位于$8000~$807F,则FLSPR=$01。注意,FLSPR为FLASH单元,它必须在编程时写入。 2.M68HC908GP32芯片FLASH擦除、写入方法 (1) 擦除操作 68HC908GP32的FLASH采用页擦除方法,每页为128字节。 ① 置位ERASE位。 ② 读出FLSPR寄存器。 ③ 向页地址范围内任意FLASH地址写入任意值。 ④ 等待至少10μs。 ⑤ 置位HVEN位。 ⑥ 等待至少1ms。 ⑦ 清零ERASE位。 ⑧ 等待至少5μs。 ⑨ 清零HVEN位。 (2) 写入操作 68HC908GP32的FLASH采用行写入方法,每行为64字节(起始地址为$XX00、$XX40、$XX80、$XXC0)。 ① 置位PGM位。 ② 读出FLSPR寄存器。 ③ 向行地址范围内任意FLASH地址写入任意值。 ④ 等待至少10μs。 ⑤ 置位HVEN位。 ⑥ 等待至少5μs。 ⑦ 向一个FLASH地址写入数据。 ⑧ 等待至少30μs。 ⑨ 重复⑦、⑧,直至一行内各字节写入完成。 ⑩ 清零PGM位。 瘙 暢 瘙 暊 等待至少5μs。 瘙 暢 瘙 暋 清零HVEN位。 3. 在线擦除、写入程序 下面给出MC68HC908GP32的在线擦除、写入程序。 WBF1〖〗EQU〖〗$50〖〗;Working Buffer 1〖1〗WBF2〖〗 EQU〖〗$51〖〗;Working Buffer 2〖1〗COUNT〖〗EQU〖〗$52〖〗;Write Counter 1~128〖1〗WTIME〖〗 EQU〖〗$53〖〗;Wait Time 32MHz:24,16MHz:12〖1〗TMP〖〗EQU〖〗$54〖1〗DBUF〖〗EQU〖〗$100〖〗;DATA to be writen to FLASH〖1〗CBUF〖〗EQU〖〗$180〖〗;CODE RAM〖1〗FLCR〖〗EQU〖〗$FE08〖1〗FLSPR〖〗EQU〖〗$FF7E〖1〗FLSH〖〗EQU〖〗$8000 〖1〗PRGM:〖〗SEI〖〗;FLASH MEMORY PGM SUBROUTINE〖2〗CLRH〖2〗CLRX〖1〗PRGM1:〖〗LDA〖〗EFLASH,X;ERASE FLASH CODE ;->RAM:CBUF〖2〗STA〖〗CBUF,X〖2〗INCX〖2〗CPX〖〗#EFEND-EFLASH〖2〗BLO〖〗PRGM1〖2〗LDHX〖〗#FLSH〖〗;Erase Address〖2〗MOV〖〗#24,WTIME ;32MHz〖2〗JSR〖〗CBUF〖〗;EXECUTE FLASH ERASE〖2〗CLRX〖2〗CLRH〖1〗PRGM2:〖〗LDA〖〗WFLASH,X;WRITE FLASH CODE ;->RAM:CBUF〖2〗STA〖〗CBUF,X〖2〗INCX〖2〗CPX〖〗#EFLASH-WFLASH〖2〗BLO〖〗PRGM2〖2〗LDHX〖〗#FLSH〖〗;PROGRAMMING ADDRESS〖2〗MOV〖〗#24,WTIME;32MHz〖2〗MOV〖〗#128,COUNT;128 Bytes〖2〗JSR〖〗CBUF〖〗;EXECUTE FLASH WRITE〖2〗RTS〖1〗WFLASH:CLR〖〗WBF2〖〗;Entry: H:X Flash Address〖2〗LDA〖〗COUNT〖2〗CMP〖〗#64〖2〗BLS〖〗WFLSH0〖2〗SUB〖〗#64〖2〗STA〖〗COUNT〖2〗LDA〖〗#64〖2〗BRA〖〗WFLSH1〖1〗WFLSH0:CLRA〖1〗WFLSH1:PSHA〖2〗LDA〖〗#1〖〗;1->PGM〖2〗STA〖〗FLCR〖2〗LDA〖〗FLSPR〖〗;Read FLASH Protect Reg.〖2〗STA〖〗,X〖2〗BSR〖〗P1DL10〖2〗LDA〖〗#9〖〗;1->HVEN〖2〗STA〖〗FLCR〖2〗BSR〖〗P1DL10〖1〗WFLSH2: PSHH〖2〗PSHX〖2〗CLRH〖2〗LDX〖〗WBF2〖2〗LDA〖〗DBUF,X〖〗;Read DATA〖2〗PULX〖2〗PULH〖2〗STA〖〗,X〖〗;Write to FLASH〖2〗BSR〖〗P1DL30〖2〗AIX〖〗#1〖2〗INC〖〗WBF2〖2〗DBNZ COUNT,WFLSH2;Loop 1 Page(1~64 Bytes)〖2〗LDA〖〗#8〖2〗STA〖〗FLCR〖2〗BSR〖〗P1DL10〖2〗LDA〖〗#0〖2〗STA〖〗FLCR〖2〗PULA〖2〗TSTA〖2〗BEQ〖〗WFLSH3〖2〗STA〖〗COUNT〖〗;Second Write〖2〗BRA〖〗WFLSH0〖1〗WFLSH3: RTS〖1〗P1DL30: MOV〖〗#3,WBF1〖〗;Delay 30μs〖2〗BRA〖〗P1DL1〖1〗P1DL10: MOV〖〗#1,WBF1〖〗;Delay 10μs〖1〗P1DL1:〖〗LDA〖〗WTIME〖1〗P1DL2:〖〗DBNZA P1DL2〖2〗DEC〖〗WBF1〖2〗BNE〖〗P1DL1〖2〗RTS〖1〗EFLASH: LDA〖〗#2〖〗;H:X=Erase Address〖2〗STA〖〗FLCR〖〗;1->ERASE〖2〗LDA〖〗FLSPR〖〗;Read FLASH Protect Reg.〖2〗STA〖〗,X〖1〗EFLASH0: BSR〖〗EDL10〖2〗LDA〖〗#$A〖〗;1->HVEN〖2〗STA〖〗FLCR〖2〗BSR〖〗EDLK〖2〗LDA〖〗#8〖2〗STA〖〗FLCR〖2〗BSR〖〗EDL10〖2〗CLRA〖2〗STA〖〗FLCR〖2〗RTS〖1〗EDLK:〖〗MOV〖〗#100,WBF1〖2〗BRA〖〗EDL1〖1〗EDL10:〖〗MOV〖〗#1,WBF1〖1〗EDL1:〖〗LDA〖〗WTIME〖1〗EDL2:〖〗DBNZAEDL2〖2〗DBNZWBF1,EDL1〖2〗RTS〖1〗EFEND:〖〗NOP程序中EFLASH为FLASH擦除程序,WFLASH为FLASH写入程序,它们必须拷贝至RAM中执行。PRGM为擦除、写入执行程序,它先把EFLASH拷贝至RAM的CBUF中,再执行CBUF的程序擦除FLASH $8000~$807F的数据,然后把WFLASH拷贝至RAM的CBUF中,最后执行CBUF的程序,把DBUF中的数据(128字节)写入FLASH的$8000~$807F中。WTIME中存放延时参数(与晶振频率有关:32MHz为24,10MHz为8)。执行PRGM前,应先把FLASH $8000~$807F的内容拷贝至RAM的DBUF中,并按需修改其中的数据。执行本程序时,应禁止中断和COP,否则,应加入清COP的指令。二、 MC68HC908JL3/JK3/JB8/GR8/KX8 FLASH 在线擦除、写入方法它们的FLASH与GP32类似,也有FLCR和FLSPR寄存器。但前三者的FLSPR为RAM寄存器,必须每次在复位后写入,且FLSPR的对应保护地址与GP32也不同。例如JL3的FLSPR的位7~位1对应于FLASH存储器保护地址的位12~位6(位15~位13为1)。擦除时每页为64字节,写入时每行为32字节。 前面的程序在修改地址后也可用于这些芯片。但由于它们的RAM容量较小,难于既存放写入程序又存放数据。为此,可使用它们的Monitor ROM来实现。下面给出Monitor ROM的擦除和写入子程序调用方法。 1. 擦除子程序 入口地址:$FC06 (JL3/JK3, JB8), $1C06 (GR8), $1006 (KX8) 入口时,RAM $89 (JL3/JK3)或$49(JB8, GR8, KX8) 为延时参数(与晶振频率有关:32MHz为32,10MHz为10),$88 (JL3/JK3)或$48(JB8, GR8, KX8) 应为零,H:X指向擦除地址。 调用后,擦除H:X指向的64字节FLASH存储器。 2. 写入子程序 入口地址:$FC09 (JL3/JK3, JB8), $1C09 (GR8), $1009 (KX8) 入口时,RAM $89 (JL3/JK3)或$49(JB8, GR8, KX8) 为延时参数(与晶振频率有关,同上),H:X为写入开始地址,$8A:$8B (JL3/JK3)或$4A:$4B(JB8, GR8, KX8) 为写入结束地址,$8C (JL3/JK3)或$4C(JB8, GR8, KX8) 开始为写入数据。 调用后,把RAM从$8C或$4C开始的数据写入从(H:X)开始到($8A:$8B)或($4A:$4B)为止的FLASH存储器中。 3. 使用方法 下面以JL3为例说明使用方法:首先,把要写入的FLASH存储器所在的一页(64字节)内容拷贝到RAM的从$8C开始的单元中,按需修改其中的数据。然后,执行如下程序(假设写入$EC00~$EC3F): PRGM:〖〗LDA〖〗#$62〖〗;保护区为$EC40~$FFFF〖2〗STA〖〗$FE09〖〗;FLSPR〖2〗MOV〖〗#32,$89〖〗;32MHz〖2〗LDHX〖〗#$EC00〖〗;FLASH擦除首地址〖2〗JSR〖〗$FC06〖〗;擦除子程序〖2〗MOV〖〗#32,$89〖〗;32MHz〖2〗LDHX〖〗#$EC3F〖〗;FLASH写入结束地址〖2〗STHX〖〗$8A〖2〗LDHX〖〗#$EC00〖〗;FLASH写入首地址〖2〗JSR〖〗$FC09〖〗;写入子程序〖2〗RTS〖〗MES
来源:单片机与嵌入式系统应用   作者:复旦大学MOTOROLA单片机开发应用中心 涂时亮  2006/2/12 0:00:00
栏目: [ ]

相关阅读

安森美推出新的高功率图腾柱PFC控制器,满足具挑战的能效标准

动态功耗低至60μA/MHz!助力设备超长续航,首选国民技术低功耗MCU!