加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

NOR Flash

发布时间:2020-12-15 17:34:17 所属栏目:百科 来源:网络整理
导读:?所谓Flash,是内存(Memory)的一种,但兼有RAM和ROM 的优点,是一种可在系统(In-System)进行电擦写,掉电后信息不丢失的存储器,同时它的高集成度和低成本使它成为市场主流。 ????Flash 芯片是由内部成千上万个存储单元组成的,每个单元存储一个bit。具
?所谓Flash,是内存(Memory)的一种,但兼有RAM和ROM 的优点,是一种可在系统(In-System)进行电擦写,掉电后信息不丢失的存储器,同时它的高集成度和低成本使它成为市场主流。

????Flash 芯片是由内部成千上万个存储单元组成的,每个单元存储一个bit。具有低功耗、大容量、擦写速度快、可整片或分扇区在系统编程(烧写)、擦除等特点,并且可由内部嵌入的算法完成对芯片的操作,因而在各种嵌入式系统中得到了广泛的应用。

????作为一种非易失性存储器,Flash在系统中通常用于存放程序代码、常量表以及一些在系统掉电后需要保存的用户数据等。

????常用的Flash为8位或16位的数据宽度,编程电压为单3.3V。主要的生产厂商为INTEL、ATMEL、AMD、HYUNDAI等。Flash 技术根据不同的应用场合也分为不同的发展方向,有擅长存储代码的NOR Flash和擅长存储数据的NAND Flash。一下对NOR Flash和NAND Flash的技术分别作了相应的介绍。

?

一.NOR Flash

1.市场介绍

????随着技术的发展,愈来愈多的电子产品需要更多的智能化,这也对这些产品的程序存储提出了更高的要求。Flash 作为一种低成本、高集成度的存储技术在电子产品领域的应用非常广泛。今天90%的PC、超过90%的手机、超过50%的Modem,都是用了Flash,如今Flash市场规模已经超过了100亿美元。

????如此巨大的市场规模,也导致市场上的Flash 品牌层出不穷。在NOR Flash市场中,Intel公司是非常重要的一家生产厂商。Intel公司生产的Flash芯片多年来占据着市场的很大份额,而它的芯片封装形式和接口也成为业界标准,从而为不同品牌的Flash带来了兼容的方便。

2.NOR Flash 的硬件设计和调试

????首先,Flash 要通过系统总线接在处理器上,即保持一个高速的数据交换的通道。那么就必须了解一下Flash在系统总线上的基本操作。

????1)先了解一下处理器存储空间BANK的概念。以32位处理器S3C2410为例,理论上可以寻址的空间为4GB,但其中有3GB的空间都预留给处理器内部的寄存器和其他设备了,留给外部可寻址的空间只有1GB,也就是0X00000000~0X3fffffff,总共应该有30根地址线。这1GB的空间,2410处理器又根据所支持的设备的特点将它分为了8份,每份空间有128MB,这每一份的空间又称为一个BANK。为方便操作,2410独立地给了每个BANK一个片选信号(nGCS7~nGCS0)。其实这8个片选信号可以看作是2410处理器内部30根地址线的最高三位所做的地址译码的结果。正因为这3根地址线所代表的地址信息已经由8个片选信号来传递了,因此2410处理器最后输出的实际地址线就只有A26~A0(如下图1)

<img src="http://s14.sinaimg.cn/bmiddle/510219d706d90da6af8ed" real_src="http://s14.sinaimg.cn/bmiddle/510219d706d90da6af8ed" width="500" border="0" alt="[转载]NOR?Flash" title="[转载]NOR?Flash" style="margin:0px;padding:0px;list-style:none;" />

图1??2410内存BANK示意图

????2)以图2(带nWAIT信号)为例,描述一下处理器的总线的读操作过程,来说明Flash整体读、写的流程。第一个时钟周期开始,系统地址总线给出需要访问的存储空间地址,经过Tacs时间后,片选信号也相应给出(锁存当前地址线上地址信息),再经过Tcso时间后,处理器给出当前操作是读(nOE为低)还是写(nWE为低),并在Tacc时间内将数据数据准备好放之总线上,Tacc时间后(并查看nWAIT信号,为低则延长本次总线操作),nOE 拉高,锁存数据线数据。这样一个总线操作就基本完成

?<img src="http://s14.sinaimg.cn/bmiddle/510219d7447a888314ecd" real_src="http://s14.sinaimg.cn/bmiddle/510219d7447a888314ecd" width="500" border="0" alt="[转载]NOR?Flash" title="[转载]NOR?Flash" style="margin:0px;padding:0px;list-style:none;" />

图2??带nWAIT 信号的总线读操作

????3NOR Flash的接口设计(现代的29LV160芯片)

29LV160存储容量为8M字节,工作电压为3.3V,采用56脚TSOP封装或48脚FBGA封装,16位数据宽度。29LV160仅需单3.3V电压即可完成在系统的编程与擦除操作,通过对其内部的命令寄存器写入标准的命令序列,可对Flash进行编程(烧写)、整片擦除、按扇区擦除以及其他操作。引脚信号描述和接口电路分别如图3和图4所示。

?

<img src="http://s12.sinaimg.cn/bmiddle/510219d7447a8883d8c6b" real_src="http://s12.sinaimg.cn/bmiddle/510219d7447a8883d8c6b" border="0" alt="[转载]NOR?Flash" title="[转载]NOR?Flash" style="margin:0px;padding:0px;list-style:none;" />

图3 29LV160引脚信号描述

?<img src="http://s1.sinaimg.cn/bmiddle/510219d706d90da6e0970" real_src="http://s1.sinaimg.cn/bmiddle/510219d706d90da6e0970" border="0" alt="[转载]NOR?Flash" title="[转载]NOR?Flash" style="margin:0px;padding:0px;list-style:none;" />

?

图4??FLASH(29LV160)接口电路

?

????可以从信号引脚图3和总线操作图2看出,NOR Flash的接口和系统总线接口完全匹配,可以很容易地接到系统总线上。

?

3.NOR Flash的软件设计

????Flash 的命令很多,但常用到的命令就3种:识别、擦除、编程命令。以下就对3种命令作分别的简要介绍:

????1)??NOR Flash的识别

29lv160_CheckId()

{

????U8 tmp;

????U16 manId,devId;

????int i;

????_RESET();

???

????_WR(0x555,0xaa);

????_WR(0x2aa,0x55);

????_WR(0x555,0x90);

????manId=_RD(0x0);

????devId=_RD(0x1);

?

????_RESET();??

????printf("Manufacture ID(0x22C4)=%4x,Device ID(0x2249)=%4xn",manId,devId);

?

????if(manId == 0x22C4 && devId == 0x2249)

????????return 1;

????else

????????return 0;

}

????NOR Flash 的识别程序由四个读写周期就可以完成,在Flash的相关命令表中可以查到相应ID识别的命令。

?

????2)?NOR Flash的擦除

????要对NOR Flash进行写操作,就一定要先进性擦除操作。NOR Flash 的擦除都是以块(sector)为单位进行的,但是每一种型号的Flash的sector的大小不同,即使在同一片的Flash内,,不同sector的大小也是不完全一样的。

void 29lv160db_EraseSector(int targetAddr)

{

????printf("Sector Erase is started!n");

????_RESET();

????_WR(0x555,0x80);

????_WR(0x555,0xaa);

_WR(0x2aa,0x55);

_WR(BADDR2WADDR(targetAddr),0x30); ?

return ?_WAIT(BADDR2WADDR(targetAddr);???

?}

?<img src="http://s16.sinaimg.cn/bmiddle/510219d7447a8884be06f" real_src="http://s16.sinaimg.cn/bmiddle/510219d7447a8884be06f" border="0" alt="[转载]NOR?Flash" title="[转载]NOR?Flash" style="margin:0px;padding:0px;list-style:none;" />????????????

??????????????????????图5??Erase Operation???

?

Int??_WAIT(void)

{

unsigned int state,flashStatus,old;

old=_RD(BADDR2WADDR(0x0));

while(1)

????{

????????flashStatus=_RD(BADDR2WADDR(0x0));

????????if( (old&0x40) == (flashStatus&0x40) )

????????????break;

????????if( flashStatus&0x20 )

????????{

????????//printf("[DQ5=1:%x]n",flashStatus);

????????old=_RD(BADDR2WADDR(0x0));

????????flashStatus=_RD(BADDR2WADDR(0x0));

????????if( (old&0x40) == (flashStatus&0x40) )

????????????return 0;

????????else return 1;

????????}

????????//printf(".");

????????old=flashStatus;

????}????????????????????????????????????????????//printf("!n");

????return 1;

}

?

<img src="http://s15.sinaimg.cn/bmiddle/510219d7447a888576bce" real_src="http://s15.sinaimg.cn/bmiddle/510219d7447a888576bce" border="0" alt="[转载]NOR?Flash" title="[转载]NOR?Flash" action-data="http%3A%2F%2Fs15.sinaimg.cn%2Fbmiddle%2F510219d7447a888576bce" action-type="show-slide" style="margin:0px;padding:0px;list-style:none;" />

?

图6??Toggle Bit Algorithm

???????

????以上的方法为查询数据线上的一个特定位Toggle位。此外还有2种检测方法,一种为提供额外的Busy信号,处理器通过不断查询Busy信号来得知Flash的擦除操作是否完成,一般较少应用;一种为查询Polling位。

?

????3)?NOR Flash?的编程操作

int 29lv160db_ProgFlash(U32 realAddr,U16 data)

{

????????_WR(0x555,0xaa);

????????_WR(0x2aa,0x55);

????????_WR(0x555,0xa0);

?

????????_WR(BADDR2WADDR(realAddr),data);

???????????return ?_WAIT(BADDR2WADDR(realAddr);

?????????

}

????对擦除过的Flash进行编程比较简单,但仍然用到以上提到的查询算法,速度比较慢,一般为20uS,最长的达到500uS 。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读