第2节 Flash编程
推荐给好友
打印
加入收藏
更新于2009-01-11 23:33:56

        该flash存储器模块包含完整的编程/擦除电压产生器和分开的命令处理器状态机,可以自动执行字节编程、页(512字节)或整体擦除以及空白检查命令。将这些命令写入命令接口就可以执行相应的操作。状态标志可用于报告错误以及指出命令何时完成。
        块保护功能可以防止flash的受保护区域被误擦除或误编程。
        安全机制可用于防止对flash和RAM存储器的未经授权的访问。可选的由用户控制的后门密匙机制允许用于开发的受控访问,以保护存储器的内容。

2.1 编程及擦除时间
        与其他技术相比,仿真EEPROM的一个优点是编程和擦除时间都非常快。 表1给出了编程和擦除的具体时间。这些时间包括命令状态机以及使能和禁止编程或擦除电压等开销。
表1 编程和擦除时间

                1不包含开始/结束的开销
    2.1.1 Flash时钟
        在接受任何编程或擦除命令之前,必须先写flash时钟分频寄存器(FCDIV),将flash模块的内部时钟(fFCLK)设置在150kHz~200 kHz之间。(注解:观察到的Flash时钟是以总线时钟为参考的)
        2.1.1.1 Flash时钟分频寄存器(FCDIV)
        该寄存器只能写一次,所以通常在复位初始化时写入。如果寄存器FSTAT的访问错误标志FACCERR位为1,则不能写FCDIV。在写FCDIV之前必须确保FACCERR没有被置1。命令处理器用所产生时钟的一个周期(1/fFCLK)对编程和擦除脉冲进行计时。命令处理器用一个整型的定时脉冲个数作为时间来完成一条编程或擦除命令。该寄存器的第7位是一个只读标志位。第6位到第0位可以在任何时候读取,但是只能写一次。在任何擦除或编程操作之前,写该寄存器,为这个非易失性存储器系统设置可接受范围内的时钟频率。

表2 FCDIV的字段描述


表3 Flash时钟分频器的设置

2.2 编程与擦除Flash的算法
        所有的编程和擦除算法都是由硬件状态机完成的,硬件状态机负责所有的过程,如打开/关闭电荷泵、控制时间等,不需要微控制器的干预。你必须确定将数据放在何处,何时启动编程序列。下面章节会介绍使用这些算法的细节。
    2.2.1 编程和擦除命令的执行
        在执行命令之前,先要初始化FCDIV寄存器,清错误标志。命令执行的步骤(参见图2所示的流程图):
        1、将数据写入flash阵列的某个地址。
  • —— 写入的地址和数据信息被锁定在flash接口中。该写入必须是命令序列的第一步。对于擦除和空白检查命令,数据值并不重要。对于页擦除命令,地址可以是flash的512字节页内的任何地址。对于整体擦除和空白检查命令,地址可以是flash存储器内的任何地址。大小为512字节的一整页是flash可擦除的最小块。在一些对齐条件下,可访问块的大小可小于512字节。
        2、将所需命令的命令代码写入FCMD。
  • —— 有5条有效的命令:空白检查命令($05),字节编程命令($20),突发编程命令($25),页擦除命令($40)和整体擦除命令($41)。
  • —— 命令代码被锁定在命令缓冲区。
        3、向FSTAT的FCBEF位写1以清空FCBEF,启动命令(包含地址和数据信息)。
  • —— 命令必须遵循严格的监控时序才被接受。这最大限度地降低了任何意外修改flash内容的可能。当命令完成时,置命令完成标志位(FCCF)。

图2 编程及擦除命令的执行流程图

    2.2.2 突发编程的执行
        突发编程命令用来写入连续字节的数据,比标准的编程命令所需的时间更短。对于MC9S08LC60/36,只要地址是连续的就可以突发模式访问flash阵列的边界。由于在编程操作之间,加到flash阵列的高压不需去掉,所以这是有可能的。通常,当编程或擦除命令被执行时,必须开启与flash存储器有关的内部电荷泵为阵列提供高电压。电荷泵在命令完成后被关闭。在执行突发编程命令时,电荷泵被开启,如果满足以下两个条件,在完成该命令后电荷泵仍然处在开启状态:
  • 在当前突发命令完成之前,下一个突发命令已在排队。
  • 下一个连续地址与当前编程字节所在的物理行相同。Flash存储器的一行由64字节组成。通过地址A5到A0可以选择某行中的某个字节。如果地址A5到A0全为0则开始了新的一行
        在突发模式下,对一个连续字节序列的第一个字节编程所需的时间与在标准模式对一个字节的编程所需的时间相同。若满足以上条件,接下来的字节在突发编程时间内完成。当下一个连续地址从新的一行开始时,对该字节的编程时间则为标准时间,而不是突发时间,这是因为必须先关掉提供给阵列的高电压然后再开启。如果在当前命令完成前没有新的突发命令排队,电荷泵就会被关闭,阵列上的高电压也会随之消失。


图3 突发命令的执行流程图

2.3 Flash的块保护
        块保护特性对仿真EEPROM非常重要,可以防止对EEPROM保留区域外的意外的flash编程或擦除操作。在实例中,我们保护了整个flash A阵列,预留给程序代码。
        块保护由flash保护寄存器(FPROT)控制。使能后,块保护从低于flash最后地址0xFFFF的、以512字节对齐的地址开始。
        复位后,FPROT从NVPROT处加载内容,其中NVPROT在flash存储器的非易失性寄存器块内。应用软件不能直接修改FPROT,所以运行中的程序不会改变块保护的设置。因为NVPROT位于flash中的最后512个字节区域,所以如果存在被保护的存储区,应用软件就不能修改(不论是有意的还是无意的)NVPROT。FPROT可以通过背景调试命令来修改,它提供了一种对受保护flash存储区进行擦除和再编程的方法。
        块保护机制如图4所示。未保护存储器的最后地址的高位用FPS位表示。这个地址由如图所示的FPS7:FPS1以及那些逻辑1位来确定。例如,为了保护最后的8192个字节的存储区(地址:0XE000~0xFFFF),FPS位必须设置为1101 111。即未保护存储区的最后地址为0xDFFF。除了向FPS位写入合适的值外,还要向FPDIS(NVPROT的第0位)写入逻辑0才能启动块保护功能。因此,为了保护地址为0XE000到0xFFFF的区域,必须向NVPROT写入$DE。

图4 块保护机制


<<上一页    下一页>>
相关链接


 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.