在HC08系列单片机中,对Flash进行擦除或写入操作需要遵循一定的时序和步骤。对于整个MC68HC908系列的各个型号,这些步骤是一样的,但时序要求可能略有不同,针对具体型号的Flash进行编程时应参考相应的芯片手册。同时需要注意的是,一些型号的监控ROM内含有Flash编程子程序,用户可直接调用,例如MC68HC908JL3;有的型号则没有,例如MC908GP32,这种情况需自行编制子程序。下面介绍MC908GP32的Flash编程的基本操作。
下面过程可以擦除GP32的Flash存储器的一页(128字节):
①$2→FLCR(1→ERASE位,0→MASS位):进行页面擦除。
②读Flash块保护寄存器FLBPR。
③向被擦除的Flash页内任意一个地址写入任意值,为方便起见,一般向待擦除页首地址写入0。
④延时tnvs(>10µs)。
⑤$A→FLCR(1→HVEN位)。
⑥延时terase(>1ms)。
⑦$8→FLCR(0→ERASE位)。
⑧延时tnvh(>5µs)。
⑨$0→FLCR(0→HVEN位)。
⑩延时trcv(>1µs),完成一页的擦除操作。
下面过程擦除GP32的整个Flash区域,以便把新的程序装入Flash存储器,这是应用系统研制过程中开发工具对GP32编程的准备工作。
①$6→FLCR(1→ERASE位,1→MASS位):进行整体擦除。
②读Flash块保护寄存器FLBPR。
③向被擦除的Flash任意一个地址写入任意值,为方便起见,一般向首地址写入0。
④延时tnvs(>10µs)。
⑤$E→FLCR(1→HVEN位、MASS位、ERASE位)。
⑥延时tMerase(>4ms)。
⑦$C→FLCR(0→ERASE位)。
⑧延时tnvhl(>100µs)。
⑨$0→FLCR(0→HVEN位、MASS位)。
⑩延时trcv(>1µs),完成整体擦除操作。
MC908GP32的Flash编程操作以行(64字节)为单位进行的。当然,一次写入可以小于一行,但不能大于一行。对于已经写过的部分,未经擦除不能重新写入变更其数据,否则将引起数据出错。写入过程如下:
①$1→FLCR(1→PGM位)。
②读Flash块保护寄存器FLBPR。
③向将要写入的Flash行内任意一个地址写入任意值,为方便起见,一般向行首地址写入0,这一步选定了所要编程的行,以下的目标地址必须在这一行中。
④先延时tnvs(>10µs);再将$9→FLCR(1→HVEN位)。
⑤先延时tpgs(>5µs);再将待写数据写入对应的Flash地址。
⑥延时tprog(>30µs),完成一个字节的写入(编程)工作。
⑦重复⑤、⑥,直至同一行内各字节写入完毕。
⑧$8→FLCR(0→PGM位)。
⑨先延时tnvh(>5µs);再将$0→FLCR(0→HVEN位)。
⑩延时trcv(>1µs)以后,完成本行写入工作,可以读出校验。