您的位置 首页 新能源

FLASH存储—–NOR Flash

所谓Flash,是内存(Memory)的一种,但兼有RAM和ROM的优点,是一种可在系统(In-System)进行电擦写,掉电后信息不丢失的存储器,同时它的

所谓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)

图12410内存BANK示意图

2)以图2(带nWAIT信号)为例,描绘一下处理器的总线的读操作过程,来阐明Flash全体读、写的流程。第一个时钟周期开端,体系地址总线给出需求拜访的存储空间地址,经过Tacs时刻后,片选信号也相应给出(锁存当时地址线上地址信息),再经过Tcso时刻后,处理器给出当时操作是读(nOE为低)仍是写(new为低),并在Tacc时刻内将数据数据准备好放之总线上,Tacc时刻后(并检查nWAIT信号,为低则延伸本次总线操作),nOE拉高,锁存数据线数据。这样一个总线操作就根本完结

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

3)NOR Flash的接口规划(现代的29LV160芯片)

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

图3 29LV160引脚信号描绘

图4FLASH(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)=%4x\n”,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,0xaa);

_WR(0x2aa,0x55);

_WR(0x555,0x80);

_WR(0x555,0xaa);

_WR(0x2aa,0x55);

_WR(BADDR2WADDR(targetAddr),0x30);

return_WAIT(BADDR2WADDR(targetAddr);

}

图5Erase 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;

}

图6Toggle 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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/263410.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部