|||
在这篇笔记中,我们主要关注一下Flash存储器的基本存储结构。特别是其最小存储存储单元,也就是存储1位的结构是如何实现的。了解这点会有助于我们理解Flash的工作原理。需要说明的是,其中的一些内容是早前参考网上的资料整理得到的,原文链接已无从查找。
Flash存储器通常使用三端器件作为存储单元,分别为源极、漏极和栅极,与场效应管的工作原理相同,也是主要利用电场的效应来控制源极与漏极之间的通断。在栅极与硅衬底之间增加了一个浮置栅极。浮置栅极可以存储电荷,利用电荷存储来存储记忆。
这个三端器件可表示1BIT的数据,向浮栅中注入电荷表示写入了'0',没有注入电荷表示'1'。注入了电荷的晶体管总是导通状态,而没有注入电荷的则只有在控制栅极施加了相应电压后才导通。所谓的编程,也就是向其注入电荷,而擦除即为释放原注入的电荷。
当存储“1”时,一次注入的电荷可长时间(10年以上)保持,如果制造缺陷或某些原因使其破坏、热能等会使其电荷衰减,影响数据的存储。这也决定了Flash存储器是非易性的,可用于通用的数据存储。
如果要读取数据,则晶体管的源极接地而漏极接位线,在无偏置电压的情况下,检测晶体管的导通状态就可以获得存储单元中的数据。如果位线上的电平为低, 说明晶体管处于导通状态,读取的数据为0;如果位线上为高电平,则说明晶体管处于截止状态,读取的数据为1。控制栅极在读取数据的过程中施加的电压较小或根本不施加电压,不足以改变浮置栅极中原有的电荷量,所以读取操作不会改变FLASH中原有的数据。
数据写入也即向浮栅注入电荷的过程,写入数据有两种技术,热电子注入(hot electron
injection)和F-N隧道效应(Fowler Nordheim
tunneling)。前一种是通过源极给浮栅充电,适用于NorFlash,后一种是通过硅基层给浮栅充电,适用于NandFlash。
数据擦除,即通过相反的方式,加上相应的电压,释放浮栅中的电荷。
在对Flash的操作中,我们通常会提供到两个动词“擦除”和“编程”。通常意义上,“擦除”是将整个芯片或芯片内的某个存储块内的数据还原到初始状态;而编程则是将我们需要存储的数据写入到存储器的过程。
根据前面的介绍以及我的理解,进行Flash数据编程操作时,是向特定的存储结构注入电荷的过程;而擦除则是释放电荷的过程。假设我们要向0x00地址处编程数据0x53,转换成二进制即为01010011。在实际进行编程操作时,仅仅进行电荷注入的操作,即将1变成0,所以只会对0x00地址单元对应的8个Flash存储位结构中的第3位、第4位、第7位、第8位注入电荷,其它位则不受影响。也即编程操作仅仅将将1变成0,而不会将0变成1。演示效果如下面的表格所示:
原值 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
电荷 | 注入 | 无 | 注入 | 无 | 注入 | 注入 | 无 | 无 |
结果 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 |
而擦除操作则不同,擦除操作是仅仅释放原注入的电荷,即将将0变成1,而不能将1变成0。
从本质上来说,编程和擦除没有什么区别,只是最后的结果互逆而已。一个将1变成0,一个将0变成1,工作原理其实是类似的。但目前的通用做法是将Flash内容为全1的状态称作是空片,而将1变成0的过程称之为“编程”。当然,也有个别的厂商会设定Flash内容为全0的状态称作是空片,而将0变成1的过程称之为“编程”。两种做法都是可以的,就看制造的工艺和提供的操作接口如何。这里我们就不去考虑那些个别的情况了,以通用的做法为准。
现在的Flash种类有很多种,比如NandFlash、NorFlash、DINOR、AND等,这里只介绍Nand、NorFlash两种比较通用的类型。
下表是两种类型Flash的比较,很好的比较两种存储器的不同之处:
擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s。与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。
NOR flash占据了容量为1~16MB闪存市场的大部分,而NAND flash用在8~128MB的产品当中,NOR主要应用在代码存储介质中,NAND适合于数据存储。
采用flash介质时一个需要重点考虑的问题是可靠性。
在NAND闪存中每个块的最大擦写次数是一百万次,而NOR的擦写次数是十万次。NAND存储器除了具有10比1的块擦除周期优势,典型的NAND块尺寸要比NOR器件小8倍,每个NAND存储器块在给定的时间内的删除次数要少一些。
NAND的供应商建议使用NAND闪存的时候,同时使用EDC/ECC算法。这个问题对于用NAND存储多媒体信息时倒不是致命的。当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,必须使用EDC/ECC系统以确保可靠性。
NAND FLASH相邻单元之间较易发生位翻转而导致坏块出现,而且是随机分布的,如果想在生产过程中消除坏块会导致成品率太低、性价比很差,所以在出厂前要在高温、高压条件下检测生产过程中产生的坏块,写入坏块标记,防止使用时向坏块写入数据;但在使用过程中还难免产生新的坏块,所以在使用的时候要配合 EDC/ECC(错误探测/错误更正)和BBM(坏块管理)等软件措施来保障数据的可靠性。坏块管理软件能够发现并更换一个读写失败的区块,将数据复制到一个有效的区块。