电子产品因数据存储、内部指令执行、系统数据交换等功能需要,往往在设计上有一定存储空间的需求。单片机自身的存储有时不能满足实际应用的需要。因此,电子工程师在产品设计时会采用各种闪存(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, ZB25VQ80
  • 16MBit, ZB25VQ16
  • 32MBit, ZB25VQ32
  • 128MBit, ZB25VQ128
  • 等等
NOR闪存应用的电路原理图
以ZB25VQ32这类SOP-8封装的NOR闪存为例:


C1 = 100nF, R1 = 50Ω, R2 = 10KΩ, R3 = 100KΩ