NOR闪存基础知识
电子产品因数据存储、内部指令执行、系统数据交换等功能需要,往往在设计上有一定存储空间的需求。单片机自身的存储有时不能满足实际应用的需要。因此,电子工程师在产品设计时会采用各种闪存(Flash Memory)芯片。
NOR闪存和NAND闪存
嵌入式工程师或者电子工程师在选择闪存时必须考虑很多因素:采用哪种类型的架构(NOR或NAND)?是选择串行接口(serial)还是并行接口(parallel)?是否需要纠错码(ECC)?等等。如果处理器或控制器只支持一种类型的接口,选择起来就相对容易。然而现实情况往往并非如此。这里我们先来认识一下闪存的两种架构:NOR和NAND。
NOR架构的布线和结构如下图所示。每个记忆单元互相独立,都有一段直连到地,组成一个类似NOR闸(或称“或非门”)的电路。当两个字线中有一个字线(Word Line)被拉低(0)时,相应的位线(Bit Line)就会被拉高(1)。而想要位线被拉低,则需要两个字线都拉低。
NOR Flash 闪存在硅上的布线和结构 (图片来源:维基百科)
NAND架构的布线和结构如下图所示。多个(通常是8个)记忆单元以类似NAND闸(或称“与非门”)的方式彼此串联。当所有的字线都拉高(1)时,位线就被拉低(0)。
NAND Flash 闪存在硅上的布线和结构 (图片来源:维基百科)
NOR闪存架构提供了足够的地址线来映射整个内存范围。这使其具有随机访问和读取时间短的优势,成为“代码执行”的理想选择。NOR架构另一个优点是在闪存的使用寿命内每个储存单元的好坏情况都是可知的。缺点包括单元尺寸较大,导致每比特成本较高,且写入和擦除速度较慢。
相比之下,NAND架构与NOR架构相比,单元尺寸更小,写入和擦除速度更高。缺点包括读取速度较慢,且采用I/O映射型或间接接口,比较复杂,不允许随机访问。另一个主要缺点是存在坏块。NAND Flash在出厂时通常有98%的单元正常工作,在产品的整个使用寿命中可能会发生额外的故障(坏块),因此需要在器件内部设置纠错码(ECC)功能。
总结NOR架构与NAND架构的区别如下:
一般来说,对于需要较低容量、快速随机读取访问和较高数据可靠性的应用,如代码执行所需,NOR闪存是一个很好的选择。比如,在物联网和人工智能技术蓬勃发展的今天,NOR闪存就可以应用在很多设备上来存储、运行程序以让产品更加智能。而NAND闪存则是数据存储等应用的理想选择,因为这些应用需要更高的内存容量和更快的写入和擦除操作,因此SSD等都是使用NAND闪存。
目前NOR闪存市场占有率排名靠前的有华邦(台湾)、旺宏(台湾)、兆易创新(中国大陆)、赛普拉斯(美国)、美光(美国)。行业内主流NOR Flash产品的工艺节点仍为65nm。合肥恒烁半导体在2020年4月推出50nm高速低功耗产品,中国大陆半导体厂家已经开始在NOR闪存的赛道奋起直追。而NAND 市场占有率主要集中在三星(韩国)、东芝(日本)、西部数据(美国)、美光(美国)、英特尔(美国)、SK海力士(韩国)等传统大厂手上,国产厂商与之还存在一定技术差距。但也有好消息传来:长江存储在2020年初宣布将跳过96层,直接量产128层闪存,惟具体时间表还没有公布。
NOR闪存的电气接口
NOR闪存刚问世时,采用的是带有并行地址和数据总线的并行接口。随着密度的增长,并行接口的信号数逐渐提高,使得电路设计变得更加困难。在这种情况下NOR闪存的接口开始向串行发展,但相较并行接口其性能受到一定的影响。下面讨论几种采用不同接口方式的NOR闪存。
并行NOR闪存的电气接口
顾名思义,并行NOR闪存使用类似SRAM的并行地址和数据总线与存储器控制器进行接口。市场上的并行NOR Flash器件一般支持8位(8-bit)或16位(16-bit)数据总线。地址总线的宽度取决于Flash的容量。地址总线的宽度可以用以下公式计算:
总线宽度 = log2 (以bit计的总容量 / 以bit计的数据总线宽度)
根据此公式我们可以算出具有16位数据总线的2-Gbit(256MB)NOR闪存将有27条地址线。一个256MB的内存如果使用并行接口的话,算上片选、重置等脚位后将会有30多个电气接口,给电路设计带来很大的难度。
我们再来看看除了地址线以外并行接口还需要哪些信号:
并行NOR闪存的接口方式(图片来源:赛普拉斯)
不难看出并行NOR闪存使用的接口数会非常多,给电路设计带来很大困难。因此目前大多数的NOR闪存都采用了串行接口。
串行NOR闪存的电气接口
串行接口的接口数量大大减少,可以实现更小的器件封装和更简单的PCB布线。缺点是牺牲了NOR闪存的主要优势之一,即直接随机存储访问。
串行NOR闪存通常使用串行外设接口(标准SPI)协议与存储器控制器连接。为了实现更高的速度,可以使用双SPI(Dual SPI)和四SPI(QUAD SPI)接口。
标准SPI 通常就称SPI,它是一种串行外设接口规范,有4根引脚信号:CLK, CS, MOSI, MISO。而Dual SPI 只是针对闪存的SPI接口而言,不是针对所有SPI外设。对于闪存的SPI链接,全双工模式并不常用,因此Dual SPI扩展了MOSI和MISO的用法,让它们工作在半双工,以加倍数据传输。也就是对于闪存的Dual SPI,可以发送一个命令字节进入Dual模式,这样MOSI变成SIO0,MISO变成SIO1,一个时钟周期内就能传输2个bit数据。而Qual SPI 与Dual SPI类似,再增加了两根I/O线(SIO2, SIO3),可以在一个时钟周期内传输4个bit。我们以合肥恒烁半导体出品的32M-bit(4MB) NOR闪存ZB25VQ32B为例:
Datasheet of ZB25VQ32B(ZBIT Semi)
从ZB25VQ32B的规格书我们可以看到,在数据传输方式上,该NOR闪存同时支持Standard SPI、Dual SPI和Quad SPI三种方式。得益于串行接口,ZB25VQ32B的封装采用SOP-8(5.3mm x 7.9mm)和DFN-8(3mm x 4mm)这种8个管脚的小型封装,大大简化了电路设计。
ZB25VQ32B的管脚与封装
ZB25VQ32B的管脚说明如下:
ZB25VQ32B 管脚及说明
串行NOR闪存的接口方式(图片来源:赛普拉斯)
跟并行传输每个时钟周期可以传输8或者16个bit数据比,串行接口的传输速率低了很多(每个时钟至多4bit),但是这是硬件设计上的必要妥协。市面上大多数的串行NOR闪存在不同厂商之间都是兼容封装的,因此即使在设计阶段完成后,也可以很容易地更换器件。这使得开发人员不仅可以在不同厂商之间进行更换,还可以迁移到其他更大或更小容量的NOR闪存器件上,而不必完全重新设计系统。以合肥恒烁半导体3V ZB25系列NOR闪存为例,以下不同容量的闪存之间都采用了相同的封装,电子工程师可以根据产品设计需要选择合适的产品:
8MBit, ZB25VQ8016MBit, ZB25VQ1632MBit, ZB25VQ32128MBit, ZB25VQ128等等NOR闪存应用的电路原理图
以ZB25VQ32这类SOP-8封装的NOR闪存为例:
C1 = 100nF, R1 = 50Ω, R2 = 10KΩ, R3 = 100KΩ
声明:本号对所有原创、转载文章的陈述与观点均保持中立,推送文章仅供读者学习和交流。文章、图片等版权归原作者享有,如有侵权,联系删除。
SSD学习笔记-NOR, NAND, FTL, GC基本概念
NOR v.s. NAND
两者都是非易失存储介质。即掉电都不会丢失内容, 在写入前都需要擦除。
NOR有点像内存,支持随机访问,这使它也具有支持XIP(eXecute In Place)的特性,可以像普通ROM一样执行程序。现在几乎所有的BIOS和一些机顶盒上都是使用NOR Flash,它的大小一般在1MB到32MB之间,价格昂贵。
NAND Flash广泛应用在各种存储卡,U盘,SSD,eMMC等等大容量设备中。
NOR VS NAND - 场景
如果以镁光(Micron)自己的NAND和NOR对比的话,详细速度数据如下:
NOR VS NAND - 性能
NAND Flash
NAND Flash目前的用途更为广泛,它的颗粒根据每个存储单元内存储比特个数的不同,可以分为 SLC(Single-Level Cell)、MLC(Multi-Level Cell) 和 TLC(Triple-Level Cell) 三类。其中,在一个存储单元中,SLC 可以存储 1 个比特,MLC 可以存储 2 个比特,TLC 则可以存储 3 个比特。NAND Flash 的单个存储单元存储的比特位越多,读写性能会越差,寿命也越短,但是成本会更低。现在高端SSD会选取MLC甚至SLC,低端SSD则选取TLC。SD卡一般选取TLC。
SLC,MLC,TLC
NAND Flash的组成
一个典型的Flash芯片由Package, Die, Plane, Block和Page组成,其中die内部可以通过3D 堆叠技术扩展容量,譬如三星的V-NAND每层容量都有128Gb(16GB),通过3D堆叠技术可以实现最多24层堆叠,这意味着24层堆叠的总容量将达到384GB!
NAND Flash组成
写放大
Block是擦除操作的最小单位,Page是写入动作的最小单位,一个Block包含若干个Pages。当我们有了块干净的Flash,我们第一个想干的事就是写些东西上去,无论我们是写一个byte还是很多东西,必须以page为单位,即写一个byte上去也要写一个page。要修改一个字节,必须要擦除,擦除的最小单元是Block。
Flash Translation Layer (FTL)
NAND flash的寿命是由其擦写次数决定的(P/E数 (Program/Erase Count)来衡量的),频繁的擦除慢慢的会产生坏块。那么我们如何才能平衡整块Flash的整体擦写次数呢?这就要我们的FTL登场了。
Flash Translation Layer原理
FTL简单来说就是系统维护了一个逻辑Block地址(LBA,logical block addresses )和物理Block地址(PBA, physical block addresses)的对应关系。 有了这层映射关系,我们需要修改时就不需要改动原来的物理块,只需要标记原块为废块,同时找一个没用的新物理块对应到原来的逻辑块上就好了。
垃圾回收(GC,Garbage Collection)机制定期回收这些废块, 和Java,GO等语言的GC机制类似,应用不需要像C/C++那样关注内存释放,GC定期扫描,回收释放内存。目标是让Flash最小化擦除次数,最大化使用寿命。
相关问答
and运算 计算公式?AND函数是扩大用于执行逻辑检验的其他函数的效用的函数公式,其功能是返回逻辑值,如果所有参数值均为逻辑“真(TRUE)”,则返回逻辑“真(TRUE)”,反之返回逻辑...
计算机中号的 and运算 怎么算?and左右两边都需要满足,则得true,否则得falseand左右两边都需要满足,则得true,否则得false
【逻辑 运算 的问题=(rorp) and ((~rorp)and(~rorq))and(rorq)) ...[最佳回答]&&优先级高于||(优先级不会决定运算顺序)||符号的执行方式是,从左向右执行,当可确定表达式的值时就不在计算右侧的值1||0&&0等价于1||(0&&...
子网掩码里的 and运算 是怎么运算?IP:192.168.1.1SubnetMask:255.255.255.0转化为二进制:IP:11000000101010000000000100000001SubnetMask:11...
微机原理 AND 怎么计算?AND∶逻辑运算符(在语句的操作数部分,汇编时完成)或逻辑操作指令助记符(在语句的操作码部分,其运算在执行指令时完成)——按位与。只有相“与”的两位全...
函数 and 和or的区别?在逻辑运算中,and和or是两个常见的逻辑运算符,其主要区别在于其逻辑关系和运算结果。and表示逻辑与(同时满足两个条件),其运算结果为真(true),当且仅当...在...
逻辑 and 和or的用法区别[回答]and和or的最大的区别在于,or表示两者只取其一,and表示两者皆是.and是“和”的意思表示事物之间的并列,而or是或者的意思表示事物间的选择,二选一,...
函数 and 和or的用法区别?and和or是Python中的逻辑运算符,and需要满足两边条件都为真时,才能得到真值,or只要满足一边条件为真,就能得到真值。and的用法是:先判断左边表达式是否为真...
SQL语句中 AND 和OR的区别?区别1:and是与运算;or是或运算。区别2:and运算要前后两个运算对象都为真是,and运算结果才为真;or运算是两个运算对象中有一个为真,or运算结果就为真。...
逻辑 运算 中“ and ”“or”“not”“xor”的先后顺序?not(非)和xor(异或)优先级高,因为他们是单运算符。and和or优先级低,因为他们是双运算符,就是说需要两边都有数据才算。not(非)和xor(异或)优先级高,因...