FLASH的读写原理.docx
- 文档编号:15412035
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:22
- 大小:24.99KB
FLASH的读写原理.docx
《FLASH的读写原理.docx》由会员分享,可在线阅读,更多相关《FLASH的读写原理.docx(22页珍藏版)》请在冰点文库上搜索。
FLASH的读写原理
FLASH的读写原理
FlashROM一般是一种单芯的FlashROM,从读写方式上看能够说是最简单的一种FlashROM。
特点是写入的单位是“页”,且写入新数据之前不需要先擦除其中原有的内容。
结构框图一般下所示:
引脚一般有:
A0~A16:
AddressInputs(地址线的数量与FlashROM的容量有关)
DQ0~DQ7:
DataInputs/Outputs
#CE:
ChipEnableInput(芯片使能)
#OE:
OutputEnableInput(输出使能)
#WE:
WriteEnableInput
Figure2-1Vdd:
PowerSupply
GND:
Ground
一般提供了如下几种功能状态:
1.ReadArrayMode
由#CE和#OE控制。
当两者都为低电平时宿主(FlashROM所在的设备,
本文描述的主板BIOS的读写,所以在这里可以将宿主理解为主板,下同)才
可以从FlashROM中读取数据。
#CE用于设备选择,当#CE为高电平时
FlashROM不被选中。
#OE用于输出控制,当#OE为高电平时输出被阻止。
当
#CE和#OE两者中任一为高电平时数据总线处于高阻抗状态。
2.PageWriteMode
PageType的FlashROM的编程的基本单位是“页”,每一“页”包含一定
的数据(一般为128字节或256字节)。
如果要修改一“页”中的某一个字节的
数据,需要将这一“页”的数据全部读出,修改指定的字节,再写回至FlashROM
中。
在写入每一“页”的时候,如果该“页”的某个字节没有被写入FlashROM,
那么FlashROM中的对应位置上的数据将会被擦除为0xFF。
写操作的初始化状
态一般是#CE和#WE为低电平且#OE为高电平。
写操作进程通常包括两个步
骤:
第一步是字节装载周期,在那个周期中宿主将一页的数据写入FlashROM
的页缓冲区(即上图的OUTPUTBUFFER);第二步是内部编程周期,在那个
周期中FlashROM的页缓冲区的内容被同时写入FlashROM的非挥发存储器阵
列(即上图的COREARRAY)。
在字节装载周期中,在#CE或#WE的下降沿二者出现的较晚的时刻地址被
锁存,在#CE或#WE的上升沿两者出现较早的时刻数据被锁存。
字节装载周期
中宿主向FlashROM的页缓冲区写数据时单位为字节,但不一定必须按顺序写
入。
在字节装载周期中,如果在设定的时间内没有新的数据写入,即在上一次
#WE发生电平跳变之后的设定的时间内没有再次发生#WE的电平跳变,
FlashROM将结束字节装载周期进入内部编程周期。
地址线的高若干位指明
“页”地址,低若干位指明每个字节在该“页”中地址。
这里,不同的FlashROM
对“页”大小的定义有差异,以“页”大小为128字节为例,指明“页”地址
的地址线为A7~A16,指明“页”内偏移的地址线为A0~A6。
在内部编程周期
中,FlashROM的页缓冲区中的内容被同时写入FlashROM的非挥发性存储器
阵列中;在这个过程中宿主可以执行除对FlashROM操作外的任何任务。
3.SoftWareProtectedDataWrite
FlashROM一般会提供软件保护数据写模式,当这种模式被启用后,在进
行任何写操作之前都必须先写入一组三个字节的命令序列(即向特定的地址写
入特定的数据)。
这个三字节的命令序列开启了字节装载周期,否则写操作不会
被激活。
这种策略可以保护FlashROM免受无意造成的写周期,比如,由于系
统启动或关闭时产生的总线上的噪声,的影响。
退出该模式需要写入一组六字
节的命令序列。
事实上这一点也是通过软件写BIOS的基础。
以Winbond公司
制造的W29EE011为例(WinbondW29EE011是PageType的FlashROM产品,
下文将简称为W29EE011),进入写操作之前要写入的命令序列为:
向地址
0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0xA0,然
后才可以进入字节装载周期。
这里提到的地址指相对于FlashROM映射到物理
地址的起始地址。
退出写操作需要写入的命令序列为:
向地址0x5555写入
0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x80、向地址0x5555
写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x20。
固然不同
的FlashROM对这些命令序列的定义可能有所不同。
4.HardWareDataProtection
FlashROM一般会提供多种硬件上的数据保护策略,这里列出其中的一部
分:
(1)噪声保护:
#WE脉冲时间长度小于指定时间长度的会被忽略而不会开
启写周期;这种策略可以降低信号中的毛刺的影响;
(2)VDD电压检测:
当VDD的电压值小于指定值时,读写操作都会被忽略;
(3)抑制写模式:
强制使#OE为低电平,#CE或#WE为高电平可以使写操
作被忽略;这种策略可以避免在系统启动和关闭时总线上产生的噪声的影响;
固然有些厂商可能会针对自己的产品提出一些特殊的数据保护策略,这里
不再列举。
StatusDetection
FlashROM一般会提供多种编程状态的检测方法,常见的有两种:
Data
Polling和ToggleBit。
下面分别说明。
DataPolling:
当FlashROM仍然处于内部编程周期时,读取在字节装载周
期所载入的最后一个字节时,其某一位(通常是最高位)的值将是真实数据的
补码;直至内部编程周期结束后,该位的内容才会变成真实值。
ToggleBit:
当FlashROM仍然处于内部编程周期时,连续地读此前在字节
装载周期载入的某个字节时,其某一位(通常是次高位)的值将是连续的0和
1的跳变;直至内部编程周期结束后,该位的内容才会稳定下来变成真实值。
这两种方法提供了内部编程模式的状态检测方法。
如上所说,由于
FlashROM在处于内部编程周期中时对FlashROM的任何写入操作都是非法的,
因此只有在通过状态检测确认FlashROM已经完成了内部编程周期之后才能对
其进行进一步的操作,如写入下一页等。
6.SoftWareChipErase
FlashROM一般会提供用软件擦除芯片模式。
启用这种模式需要先写入一
组六字节的指令序列,擦除模式会自动执行,并且会在执行完之后自动返回至
ReadMode;擦除模式的执行是在FlashROM的内部进行的,其间不需要宿主
的干预,当然宿主也不应对FlashROM有任何与写操作相关的操作。
以
W29EE011为例,这一组指令序列为:
向地址0x5555写入0xAA、向地址0x2AAA
写入0x55、向地址0x5555写入0x80、向地址0x5555写入0xAA、向地址0x2AAA
写入0x55、向地址0x5555写入0x10。
这里提到的地址指相对于FlashROM映
射到物理地址的起始地址。
不同厂商的FlashROM对这些命令序列的定义可能
有所不同。
中国科学技术大学本科毕业论文
第11页
7.ProductIdentification
FlashROM一般会内置厂商代码和产品代码,该功能用于输出这两个代码。
这两个代码(下面称为ProductID)是该型号产品的认证码,通过这两个代码
可以检索到这个型号的产品的全部信息。
ProductID可以通过硬件和软件的方法检测。
硬件检测方法是将某些引脚
的信号置为特定的高低电平组合,这个组合各种产品的定义多少都有些差别,
在这里不作说明;软件检测方法是写入一组六字节的指令序列(有些FlashROM
可能是写入三字节的指令序列,这个定义主要来自厂商的差别),然后读取指定
地址上的数据。
检测完之后还需要写入一组三字节的指令序列以退出该模式。
以W29EE011为例,检测ProductID需写入的指令序列为:
向地址0x5555
写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x80、向地址0x5555
写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x60;然后从地
址0上读取厂商代码,从地址1上读取产品代码;对这个型号的产品来说,厂
商代码为0xDA,产品代码为0xC1;退出该模式需写入的指令序列为:
向地址
0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0xF0。
这
里提到的地址指相对于FlashROM映射到物理地址的起始地址。
不同厂商的
FlashROM对这些指令序列的定义可能有所不同。
该模式的重要性在于,不同的FlashROM的擦除/写入方法存在差异,因此
需要通过检测到的ProductID来对特定的FlashROM设定指定的擦除/写入方
法。
SectorType
SectorType的FlashROM一般包括多个区块,对一个区块的擦除/写入操作
不会影响其它区块。
从结构上来看较PageType复杂。
SectorType的FlashROM
写入的单位是字节,但是在写入新数据前需要将要写入的地址所在的Sector原
有的内容全部擦除。
中国科学技术大学本科毕业论文
第12页
如下Figure2-2是一个典型的SectorType的FlashROM的结构框图:
引脚一般包括:
A0–A21:
AddressInputs(地址线的数目与FlashROM的容量有关)
DQ0–DQ15:
DataInput/Output(一般来说数据线只需8位即可,有些产
品可能出于某些考虑设计了16条数据线)
#CE:
ChipEnableInput
#OE:
OutputEnableInput
#WE:
WriteEnableInput
#RP:
Reset/DeepPower-DownInput(通过两级电平(VIL,VIH)来控制
reset/deeppowerdown模式)
#WP:
WriteProtectInput
VCC:
Power,DEVICEPowerSupply
Figure2-2
中国科学技术大学本科毕业论文
第13页
VPP:
Power,PROGRAM/ERASEPowerSupply
GND:
Ground
一般提供了如下几种功能状态:
1.ReadArray
这是通常所能见到的状态,现在FlashROM的表现同一般的ROM,能够随
机读取。
进入该模式的条件是:
#RP从低电平跳至高电平。
通常加电后#RP就
会发生跳变。
因此可以说这种状态就是FlashROM默认的状态。
当然要能够被
宿主访问还需要如下的信号:
#WE处于高电平;#CE处于低电平;#OE处于低电平;#RP处于高电平。
固然,另外还需腹地址线上的相应的地址信号。
从其它的状态,如擦除/
写入状态返回ReadArray状态必需先写入一组命令字。
以Intel28F016B3为例
(Intel28F016B3是Intel公司生产的“AdvancedBootBlockFlashMemory(B3)”
系列产品中的一个型号),这一组命令字是:
向地址0x5555写入0xAA、向地
址0x2AAA写入0x55、向地址0x5555写入0xFF。
这里提到的地址指相对于
FlashROM映射到物理地址的起始地址。
不同的产品对这组命令字的定义可能
有所不同。
2.ProductIdentification
读产品的生产厂商代码和产品代码的操作。
一般FlashROM会提供一组特
殊的指令来检测这两个代码。
这部分请参考上一节相关部分的描述。
为表明不
同产品在这个模式操作的定义上的不同,这里以Intel28F016B3为例说明检测
方法。
对用作示例的FlashROM来说,读取厂商朝码和产品代码之前需要写入
一组三字节的指令序列:
向地址0x5555写入0xAA、向地址0x2AAA写入0x5五、
向地址0x5555写入0x90。
这里提到的地址指相对于FlashROM映射到物理地
址的起始地址。
之后从地址0上读取厂商ID,从地址1上读取产品ID;Intel
的厂商ID为0x89。
从该模式退出至ReadArrayMode需要写入一组三字节的指
令序列(即在前面ReadArrayMode描述的指令序列)。
中国科学技术大学本科毕业论文
第14页
3.Read/ClearStatusRegister
FlashROM中的状态寄存器指明擦除/写入操作的进行情况(完成与否和成
功与否)。
读取该寄存器信息需要预先写入一组三字节的指令序列。
在这里要强
调一下,所有的FlashROM都会提供擦除/写入操作进行情况的检测方法,但是
不同的产品提供的方法多少有些不同;这里只是描述其中的一种方法。
以Intel28F016B3为例,读取状态寄放器需要预先写入的指令序列是:
向
地址0x5555写入0xAA、向地址0x2AAA写入0x5五、向地址0x5555写入0x70。
这里提到的地址指相对于FlashROM映射到物理地址的起始地址。
写入这一组
指令序列后读操作的结果反映在DQ数据线的低八位上就是状态寄存器的内
容。
从该模式退出至ReadArrayMode需要写入一组三字节的指令序列(即在
前面ReadArrayMode描述的指令序列)。
为了防止可能的总线上的错误(如毛
刺的影响),设计时一般会在#OE或#CE的下降沿将状态寄存器的数据锁存。
如果擦除/写入动作没有完成,则#CE或#OE将持续翻转。
状态寄存器一般也会有特殊的指令可以清除其中的内容,以IntelIntel
28F016B3为例,清除状态寄放器内容的一组指令是:
向地址0x5555写入0xAA、
向地址0x2AAA写入0x55、向地址0x5555写入0x50。
这里提到的地址指相对
于FlashROM映射到物理地址的起始地址。
不过可能并不是所有位都能清除,
因为厂商可能会对状态寄存器的特定位作特殊的定义。
当然,从该模式退出至
ReadArrayMode需要写入一组三字节的指令序列(即在前面描述ReadArray
Mode描述的指令序列)。
4.ProgramMode
SectorType的FlashROM写入的单位是字节。
通常写入操作是通过两步来
完成的。
首先要写入一组指令序列,然后才可以向指定的地址写入指定的数据,
随后FlashROM将会执行内部编程动作将指定的内容写入非挥发性存储器阵
列。
以Intel28F016B3为例,写入数据前需要预先写入的指令序列是:
向地址
0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x40。
这
中国科学技术大学本科毕业论文
第15页
里提到的地址指相对于FlashROM映射到物理地址的起始地址。
随后才可以向
指定的地址写入指定的数据。
要注意的是,SectorType的编程只能将指定位的
值由“1”变成“0”,而不能将“0”变成“1”,这也就是在写入新数据前需要
将原有数据擦除的原因。
写入操作的进行情况由状态寄存器反映。
在执行写入操作的时候所允许的
操作只有读状态寄存器和/或有些产品提供的编程延缓和编程再继续操作。
这两
个操作可以暂时中断写入过程以执行其它的动作,比如ReadArray操作等。
结束该模式需要清除状态寄存器中的内容(即在前面Read/ClearStatus
Register所描述的内容)。
从该模式退出至ReadArrayMode需要写入一组三字
节的指令序列(即在前面ReadArrayMode描述的指令序列)。
5.EraseMode
所有的SectorType的FlashROM都需要提供擦除功能。
擦除一个Sector的
内容通常也是需要两步:
擦除设置命令和擦除确认命令。
同时需要指定要擦除
的Sector的地址。
在擦除过程中,该Sector内的所有位都会被置为“1”。
一般
一次只允许擦除一个Sector,且擦除一个Sector不会影响存储器阵列中的其它
Sector的内容。
擦除动作的进行情况由状态寄存器反映。
在执行擦除操作的时候所允许的
操作只有读状态寄存器和/或有些产品提供的擦除延缓和擦除再继续操作。
这两
个操作可以暂时中断擦除过程以执行其它的动作,比如ReadArray操作和对其
它地址上的写入操作等。
结束该模式需要清除状态寄存器中的内容(即在前面Read/ClearStatus
Register所描述的内容)。
从该模式退出至ReadArrayMode需要写入一组三字
节的指令序列(即在前面ReadArrayMode描述的指令序列)。
6.HardwareDataProtectionandOtherMode
SectorType的FlashROM对数据的硬件上的保护大同小异,主要目的都是
为了避免总线上的突发信号对FlashROM产生的不可预期的影响。
接下来从功耗的角度介绍一下FlashROM的几种工作状态。
ActivePower,活动态
当#CE处于低电平且#RP处于高电平时,FlashROM处于活动状态。
活动
状态是FlashROM功耗的主要部分。
降低活动态的能耗有利于降低整个系统的
功耗。
AutomaticPowerSavings(APS)自动节能状态
APS是能够在FlashROM处于ReadArray模式下提供自动节能的一项技术。
在数据被从存储器阵列中读出后,地址线上没有信号的时候,自动节能电路会
将FlashROM置于这种小电流的状态;直到地址线上再次出现信号,即有新的
地址被送上时才恢复到正常需要的电流水平。
这种技术可以有效地降低
FlashROM的功耗。
StandbyPower待机状态
当#CE处于高电平并且之前FlashROM是在ReadArray模式下时,
FlashROM就进入待机状态。
这种状态下FlashROM中的大部分电路停止工作,
因此可以降低功耗。
此时不论#OE处于何种状态,数据线上始终保持高阻抗状
态,也就是说,此时任何针对此FlashROM的读写操作都无效。
当然,如果#CE
跳至高电平时FlashROM是处于擦除模式或编程模式,则直至正在进行的动作
完成之前,FlashROM不会进入待机状态。
DeepPower-DownMode/ResetMode复位
当#RP处于低电平时FlashROM进入该状态。
当FlashROM从ReadArray
模式转至此状态时,该FlashROM被取消选定,数据线上保持高阻抗状态。
从
此状态恢复需要等一段指定的时间,这个时间是由硬件设计决定的。
如果在
FlashROM处于擦除/写入状态时#RP跳至低电平,则所有进行中的操作会被强
制退出,此时不能保证FlashROM的内容的正确性和一致性。
由于这个状态的
存在,#RP一般是与系统的复位信号相连的。
中国科学技术大学本科毕业论文
第17页
Bulk-EraseType
这种类型的FlashROM大体上与SectorType的FlashROM相似:
它们都是
由多个Sector构成的,写入的单位都是字节。
但是最大的不同在于这个类型的
FlashROM在写入时需要把FlashROM中的全部内容全部清除。
就是说此类型
的FlashROM的编程原理与SectorType的编程原理基本相同,即在写入时都是
只允许将“1”改成“0”,而不允许将“0”改成“1”。
这方面产品的一个例子
是STM29F512B。
Bulk-EraseBlankingType
这种类型的FlashROM大体上与Bulk-EraseType相似,唯一的不同在于擦
除一个Sector之前需要将该Sector的内容全部清成0,然后才可以进行擦除操
作。
这方面产品的一个例子是Catalyst28F010。
SmallSectorType
这个类型可以说是一个比较特别的类型。
它的Sector的定义比通常的Sector
Type定义的Sector包含的字节数要少,与PageType定义的“页”大小比较近
似;它在对一个Sector进行写入操作之前需要对该Sector进行擦除操作,然后
才可以进行按字节进行写入操作。
也就是说,该类型具有近似于PageType的
单位定义和SectorType的操作特性。
这方面产品的一个例子是SST28SF040。
小结:
5类FlashROM的比较
这5类FlashROM中,PageType和SectorType是目前所应用的最广泛的
两类,其余三类可以看作是这两类的变形。
从实际使用的角度(仅考虑作为BIOS的载体)看,FlashROM的最重要的
性能参数指标应该是读性能。
一般来说FlashROM的访问时间比RAM的访问
中国科学技术大学本科毕业论文
第18页
时间长大约一个数量级。
FlashROM的主要用途是ROM,即在计算机加电启动
时提供最初的指令。
FlashROM提供擦除/写入功能的目的是为了能够支持BIOS
的较方便的更新。
因此,应该可以这样说,只要FlashROM的读性能比较优秀,
不管写性能都多糟糕,就有选择它做BIOS载体的理由。
因为用户不会经常的
(甚至可能一次也不会)应用到FlashROM的擦除/写入功能。
实际上目前
FlashROM的读性能大体比较相近,主板厂商选择产品可能更多的是出
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FLASH 读写 原理
![提示](https://static.bingdoc.com/images/bang_tan.gif)