您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 造纸印刷 > FLASH存储器的编程模式与兼容性研究
FLASH存储器的编程模式与兼容性研究发表时间:2006-2-19发布人:administrator来源:来源:国外电子元器件作者:作者:杨力波阅读次数:93摘要:FLASH存储器是继传统ROM和EPROM之后推出的新型存储器件。它可通过与之相连的微处理器在线编程和擦除,因而十分适合嵌入式系统的设计和开发。文章分析了FLASH存储器的软硬件结构特征,探讨了FLASH存储器在实际应用中遇到的编程模式与兼容性问题。关键词:FLASH存储器;编程模式;兼容性FLASH是一种非易失性的存储器,即在掉电情况下仍能保证数据不丢失。与传统的ROM和E-PROM相比,它可以通过与之相连的微处理器在线编程和擦除,这一优点使得FLASH十分适合嵌入式系统的设计和开发。它不必在调试完成用户代码后再制作PCB,而可以在制板前后反复多次写入测试代码以用于系统的调试,从而大大加快了开发的进度。它的另外一个优点就是系统升级十分方便,设备供应商甚至用户自己都可以从网上下载最新版本的程序代码并载入FLASH中来实现系统的升级。此外,由于程序可以直接在FLASH中运行,因而节省了引导加载步骤,减少了高成本RAM的容量,节省了系统空间和功耗。由于性能和价格方面的优势,FLASH已广泛用于MP3播放器、机顶盒等消费电子产品以及PC机主板的BIOS芯片、CD-ROM、DVD等计算机外设中,甚至在一些网络设备中(比如路由器、防火墙)也有应用。FLASH作为一种半导体新技术,必将促使便携式可重新编程应用系统内部的存储器体系的重大变革[1]。1硬件结构FLASH存储器按功能一般可分为两种类型:引导型(BootBlockFlashMemory)和均匀型(UniformBlockFlashMemory)。引导型FLASH的存储单元包括若干大小不等的引导块(BootBlock)、参数块(ParameterBlock)、小的主块(SmallMainBlock)和主块(MainBlock)。引导块一般为16k字节大小,可存放引导程序,用于微处理器的复位运行。它一般都加保护处理,以防止被加电或掉电时出现的脉冲信号错误修改而导致系统无法正常启动。参数块一般为8k字节大小,可存放系统参数。参数块一般容量较小,但擦除和编程速度比较快,适合于升级。小的主块及主块一般分别为32k及64k字节大小。小的主块和部分主块用来存放应用程序,而其余的主块则用来存放用户数据。根据引导块处于高地址区或低地址区的位置不同又可以将其进一步划分为两种类型,其选择主要取决于微处理器的自启地址以及其与FLASH的连接方式。引导型FLASH十分适合作为微处理器的引导单元,以在系统加电后运行引导程序或实现应用程序的加载运行。而均匀型FLASH则由大小相等的主块构成,它仅仅作为微处理器的外扩存储单元。与ROM相比,FLASH的优点主要在于可在线编程。在实际应用中,如果不涉及系统引导,引导型或均匀型在使用上没有太大区别。FLASH主要与微处理器连接使用,连接方式除增加了控制线和写使能外,其它基本与EPROM类似。按数据访问方式,FLASH又可分为并行访问型、串行访问型和串行NAND访问型。并行访问型FLASH采用并行的数据和地址总线,并支持随机存取。在读数据时,它先将地址送到地址线,然后由控制线向FLASH发出读取指令,最后由FLASH将数据送到数据线。在写数据时,它先将地址和数据送到地址线和数据线,然后由控制线发出编程指令将数据锁存进相应的地址。其中,控制线的指令是向FLASH中的公共接口单元发出的,FLASH可在接到指令后判断微处理器进行何种操作。串行访问型FLASH则采用串行总线,常见的有SPI总线。其中地址和数据都是通过时钟来顺序传送的。串行NAND访问型FLASH尽管也采用8位并行总线,却不支持随机存取。它的命令字、地址和数据都是以8位并行传送的。一般用于与简单控制器的连接(如用于PC卡的ATA控制器),而不直接和微处理器连接使用。在以上类型中,并行访问型FLASH较为常用。另外,在连接时还要注意速率匹配问题,并应适当也插入等待周期。FLASH的存储容量常见的有512kb、1Mb、2Mb、4Mb、8Mb、16Mb等,最近又推出更大容量的128Mb、256Mb也有推出。其总线宽度有8位、16位以及32位几种,不少FLASH同时支持多种总线宽度,比如8/16位FLASH可通过管脚BYTE选择8位或16位总线模式。它们在与微处理器连接的时候尤其要注意地址的映射方式,即微处理器内部的地址要转换为FLASH内部的地址,这样FLASH才能正确的接收微处理器发出的指令。假如FLASH地址线为A0~An,对8位总线而言,低地址A0选择奇偶字节,而对16位总线而言,A0则选择奇偶字,对32位总线而言,A0选择奇偶双字。一些8/16位总线FLASH中通常有一个复用管脚A-1/DQ15,该脚一般在8位总线工作时作为最低地址位A-1,而工作在16位总线时作为最高数据位DQ15。以8、16位总线模式FLASH为例,微处理器与FLASH的连接大致有如图1所示的几种方式。在图1(a)中,MCU按字节寻址,地址一一对应直接相连;在(b)中,MCU按字寻址,其中的两片FLASH,一片用于存储高字节,另一片存储低字节;(c)中的MCU按字节寻址,该方式可利用复用位A-1将FLASH划分成以字节为单位;在(d)中,MCU按字寻址,FLASH以字为单位。当然,上述连接方式也不是唯一的。由于应用方式各异,不同连接方式下的寻址一般来说是不同的。2软件结构FLASH的读出如同RAM或EPROM一样不需要特殊的指令,但对FLASH的写入则需要特殊的编程指令序列。通常不直接写入FLASH的主要原因是为了防止加电或去电时产生的脉冲信号写入FLASH而破坏原来的数据。当FLASH焊到电路板上之后,对其编程有两种方式:第一种是通过与板相连的PROM编程器来进行,第二种则是通过微处理器(比如DSP)软件来编程。在第一种方式下,系统通过PROM编程器提供编程电压和编程指令。而在第二种方式下,其编程电压则是经内部的供给泵或DC/DC转换器将低电压上调而产生的,但在第二种方式下,需要根据FLASH支持的指令集编写驱动程序。这两种方式各有优点,但后者更适合于系统的在线升级。如前所述,对FLASH读写数据可以以字节或字为单位独立进行,但在写入之前必须先对所在的块进行删除操作。除了底层的总线读写操作之外,FLASH还支持一定的指令集。如ST公司的M29F400B定义的片擦除指令10h、读指令F0h、写指令A0h等。不同指令通常要占用长短不一的若干个总线写周期。FLASH中的公共FLASH接口(CommonFLASHInterface)可对控制线的指令进行判断,以识别当前控制线上是属于读指令、写指令或者其它。目前,此接口协议已成为业界的兼容性标准[2],但此接口本身并不占据可寻址的存储空间,它只是存储指令以及执行指令所需要的地址和数据。基于这种结构,FLASH可从第一个总线写周期获得指令且不会破坏特定地址上所存储的数据。而在实际的读写操作中,一般都在每条指令前加入两个编码序列以用于启动公共FLASH接口。通过公共FLASH接口中的命令集定义,可以解释得到输入的命令字序列,这将使得FLASH工作在读阵列、自动选择、编程/擦除和擦除继续几种模式之一。在读阵列模式下,它相当于ROM,也就是说可以在指定的地址上读取数据。而在自动选择模式下,它可以读取识别号(厂商号和器件号)以及块保护状态标志位。而在编程/擦除模式下,则可以进行编程和擦除,并且可在随后来读取状态寄存器的内容。而在擦除继续模式下,它可在擦除某一块的同图1微处理器与FLASH的连接方式时读取另一块中的数据。FLASH可在不同的命令字序列输入方式下进行各个模式之间的转移。除了读、写和擦除等基本命令字外,FLASH通常还提供一些其它命令字,如用于防止数据被意外改写的加保护和去保护命令,可在执行擦除操作期间响应中断请求的擦除等待和擦除继续命令,另外,还有校验、复位等命令。在每一次命令操作之后,FLASH还可以支持状态寄存器查询,以使用户能够了解命令的执行情况。除了命令集之外,公共接口还定义了FLASH的块结构、接口参数、厂商属性等一切外部控制软件所需的特征信息,并可以通过写入特定的命令字来进行查询。3编程模式由于FLASH存储器的实际应用千差万别,因此FLASH支持的命令集也因器件系列的不同而不同。比如常见的M28和M29两个系列,它们在管脚定义和命令集方面就有较大差异,这就导致了在一种器件上开发的软件无法在另一种器件上直接使用。因此,可以考虑由下而上将整个系统分为如图2所示的4个层次。图2中,最低层是硬件适配层,该层次主要考虑的是如何与实际的硬件总线协调工作,并为上层提供可调用的读和写等最基本模块。这一层还需要考虑微处理器的地址空间和FLASH的地址空间是如何映射的,以及各自工作在字节、字还是双字模式。理顺了这些关系之后,就可以实现微处理器在指定的FLASH地址位置的读出或是写入指定长度的数据。从底层向上的第二层为FLASH适配层,该层主要是和公共FLASH接口进行通信,任务是向上层提供FLASH可接受的命令集,并由公共FLASH接口负责解释,同时发出一定的响应。这一层需要考虑与FLASH软件结构密切相关的各种功能的支持程度和指令时序,以及各种事件的具体响应和模式转移。该部分可用于决定实际读写擦除的时间开销等性能指标。再往上的第三层为功能适配层,该层功能适配层的功能主要是向上层提供一切读写擦除功能,其命令方式独立于具体的FLASH,它可以以某个数据记录为单位进行读写。这一层需要对FLASH的命令集进行适当的封装,并隔离上层和FLASH之间的直接联系,以使得应用程序开发人员不必了解FLASH的具体细节就可调用各种功能并对其操作。最上层是应用适配层,它面向的是最终应用,可以为普通用户提供高级功能和友好的交互接口。在图2所示的数据库应用系统中,由硬件适配层提供的三个基本模块FlashWrite()和FlashRead()和FlashPause()分别是总线写、总线读和等待操作。FLASH适配层提供的FlashAutoSelect()、FlashRead-Reset()、FlashBlockErase()、FlashChipErase()、Flash-Program()等几个和实际命令集有关的模块则可分别用于实现进入自动选择模式、进入读阵列模式、块擦除、整片擦除、编程等功能,当然也可以根据实际器件的支持程度增加其它功能模块。功能适配层提供的ReadRecord()、AddRecord()、DeleteRecord()等记录操作模块则用于实现基本的数据库操作。如读记录、添加记录和删除记录等。最后由应用适配层提供诸如查找、排序、身份认证、注销等各种面向用户的功能以及系统实际需要的其它功能。采用分层的编程模式有利于建立清晰的逻辑结构,增加模块的可重用性。它可使高层应用和底层器件相互独立,并最终提高软件的开发质量,缩短开发周期,同时提供更丰富的应用和更友好的人机互交界面。4兼容性所谓兼容性,就是不同层次上的功能模块可以不作修改或者少量修改就可以替代同一层次模块的属性。影响FLASH的最根本因素是其制造工艺,常见的有NOR、DINOR、NAND和AND等几种技术。采用不同制造工艺的FLASH一般是很难兼容的。所以本节讨论兼容性是建立在采用同一制造工艺这一前提下的。按照上文提到的分层模式,大致存在如下几个方面的兼容性问题。4.1电气兼容性电气兼容性主要包括管脚连接、封装方式、直流和交流特性、电压和功率要求、数据存储容量、定时匹配要求以及工作温度范围等方面的兼容性内容。不同属性的器件之间是不能直接替换的,其中有些可以通过增加转换电路的方法来实现兼容匹配,而有些则无法实现兼容替换。4.2命令集兼容性实际上,公共FLASH接口的标准化正是兼容性的产物,对于同一系列的FLASH产品,其公共接口往往提供兼容的命令集。同时,为了便于日后的升级,也要考虑
本文标题:FLASH存储器的编程模式与兼容性研究
链接地址:https://www.777doc.com/doc-2872038 .html