NAND Flash操作技术详解

原创内容,转载请注明:  [http://www.ssdfans.com]  谢谢!

 

了解底层NAND Flash的工作机制对存储系统研发是非常有必要的。

 

想要和作者吴忠杰还有全世界的大牛讨论SSD及存储相关技术?加nanoarch为微信好友,拉你进ssdfans微信群。

 
 

NAND Flash是构成固态存储的基本存储单元其采用IO的接口方式与控制器相连。控制器对NAND Flash进行操作时需要通过命令交互的方式对NAND Flash进行操作。下面对NAND Flash的操作进行解析可以发现在研发FTL的时候可以充分发掘NAND Flash提供的操作命令来优化读写性能。分析介绍的NAND FlashMicron提供的MT29F16G08AA为蓝本。该芯片能够提供16Gb 的存储容量具体性能指标如下所示

 
 


 
 

Organization

–     Page size: 2048+64 bytes

–     Block size: 64 Pages

–     Plane size: 2048 Blocks

Read performance

–     Random Read: 25us (MAX)

–     Sequential Read: 25ns (MIN)

Write performance

–     Program page: 220us (TYP)

–     Block erase: 1.5ms (TYP)

Data retention: 10 years

Endurance: 100,000 erase cycles

我们知道NAND Flash的最小读写单元是page最小擦除单元是Block。与控制器的接口方式是IO接口NAND Flash的内部原理如下图所示

 
 


 
 

从上图可以看出I/Ox信号用于传输数据或者地址信息通常有8位或者16位数据宽度。其余信号为控制信号包括片选信号、命令选择信号、地址选择信号、写控制信号、读控制信号、写保护信号、状态信号。在NAND Flash内部提供了多种寄存器包括地址/命令寄存器和状态寄存器。NAND Flash控制其就是和这些寄存器打交道完成数据读写/擦除操作。NAND Flash的核心是NAND Flash ArrayNAND Flash Array前有两个非常重要的寄存器数据寄存器和Cache寄存器。有了这两个寄存器之后可以将读写操作进行流水处理从而提高数据读写性能。数据流水的思路如下图所示

 
 


 
 

用户数据通过NAND Flash控制器首先写入Cache Register随后很快将Cache中的数据导入Data Register。数据从CacheData寄存器需要很短的延迟。数据进入Data Register之后可以写入具体的NAND Flash写入操作需要200us左右的延迟。流水的价值在于在数据从Data RegisterNAND Flash写入的时候用户又可以通过控制器将数据写入Cache Register。因此提高了整体数据吞吐量但是从单个请求来讲增加了延迟。

Micron NAND Flash的基本操作命令表如下图所示

 
 


 
 

从上表可以看出NAND Flash操作命令并不复杂主要分为页读、页编程、块擦除、状态查询等命令类型。实现一个驱动程序或者控制器的时候就需要实现上述NAND Flash命令。

NAND Flash控制器的角度来看一个Page页的顺序读时序如下图所示

 
 


 
 

首先发送0x00 Page页读命令在命令期之后发送读地址。如果Page数据已经准备完毕那么状态信号R/B将会由低变高当该信号跳变之后开始读取数据。从NAND Flash芯片内部来看读命令发送之后Page数据将会被装载到内部的Cache寄存器中随后状态指示信号由低变高。之后数据在读信号的控制下从Cache寄存器读入IO接口总线上。

值得一提的是NAND Flash芯片也支持随机读即读地址可以与Page页不对齐。实际上这种随机读是有限制的即随机读只能发生在Page页读完成之后时序图如下所示

 
 


 
 

在一个Page页读完成之后可以发送业内随机读地址最后在读信号的控制下将随机读数据从Cache Page中输出到外部IO总线上。

Nand Flash的另一个重要操作就是写操作在NAND Flash中写操作就是page的编程操作。Page页是编程的最小单元其操作时序可以描述如下

 
 


 
 

FTL软件中为了避免写时块擦除操作会引入类似于Log文件系统的方式对写入的逻辑page进行重映射即实现out-of-place的写入方式。在这种写入方式中如果用户写入的数据小于一个page页那么需要将无需更新的数据从old-page中拷贝出来然后和新数据合并写入新的page中。为了提高这个操作的性能NAND Flash提供了一种数据迁移的命令并且在数据迁移的过程中可以任意修改page中的数据。采用这种命令来实现out-of-place的数据更新方式将会有效提高IO性能。数据迁移的操作时序如下图所示

 
 


 
 

通过0x00命令将数据从Flash Array中读取至寄存器中然后通过0x85命令直接将寄存器中的数据写入至一个新的page页中。在写入之前可以修改数据寄存器中的值从而实现了老数据的迁移和新数据的合并并且可以完成逻辑page页的重映射。

NAND Flash的一个非常重要的操作是数据块的擦除。块擦除是非常耗时的操作ms数量级但是操作命令非常的简单该时序图如下所示

 
 


 
 

需要擦除一个block块是需要发送0x60命令并且需要指定块地址。擦除操作正在进行的时候状态指示信号R/B一直处于低电平状态。一旦从低电平状态恢复成高电平时说明块擦除操作完成。完成之后通过0x70命令获取擦除操作是否存在故障。从而确定该块在后继写入的时候是否能够继续使用。

上述提到的这些接口时序是NAND Flash控制器需要完成的。由于其功能比较有限所以开发难度并不是很大可以采用verilog开发这类控制器。对于软件开发人员而言不会涉及到这些NAND Flash的操作命令除非在一些嵌入式或者单片机开发系统中才有可能涉及到这些命令。例如可以通过单片机的GPIO模拟NAND Flash的接口时序然后通过软件的方式实现与NAND Flash的数据交换。此时软件开发就需要非常熟悉这些接口时序以及接口命令了。

固态存储在不断的往企业级存储领域推进了解底层NAND Flash的工作机制对存储系统研发是非常有必要的。只有这样才可以清楚的了解到每一个IO操作在各个层次都具体做了些什么事情才有可能更好的优化、发挥存储系统的性能。

 
 

不想错过吴忠杰的后续精彩文章?长按或扫描下面二维码关注ssdfans就可以了!

 


 

公司招聘:
Memblaze
华东区高薪招聘
,销售经理,FAE  上海/杭州
联想SSD专家招聘FWQANAND特性工程师,北京/武汉

上海飞斯招聘: 存储开发工程师RAIDUSBSATAAHCINVMEFTL、文件系统的开发及调试

深圳大普微电子招聘SSD芯片设计,固件开发,机器学习相关人才!

ssdfans帮你内推

ssdfans帮你赚推荐费

 
 

经吴忠杰授权,转载自
http://alanwu.blog.51cto.com/3652632/1429438

 

分类目录 未分类.
扫一扫二维码或者微信搜索公众号ssdfans关注(添加朋友->点最下面的公众号->搜索ssdfans),可以经常看到SSD技术和产业的文章(SSD Fans只推送干货)。
ssdfans微信群介绍
技术讨论群 覆盖2000多位中国和世界华人圈SSD以及存储技术精英
固件、软件、测试群 固件、软件和测试技术讨论
异构计算群 讨论人工智能和GPU、FPGA、CPU异构计算
ASIC-FPGA群 芯片和FPGA硬件技术讨论群
闪存器件群 NAND、3D XPoint等固态存储介质技术讨论
企业级 企业级SSD、企业级存储
销售群 全国SSD供应商都在这里,砍砍价,会比某东便宜20%
工作求职群 存储行业换工作,发招聘,要关注各大公司招聘信息,赶快来
高管群 各大SSD相关存储公司高管和创始人、投资人

想加入这些群,请微信扫描下面二维码,或搜索nanoarchplus,加阿呆为微信好友,介绍你的昵称-单位-职务,注明群名,拉你进群。SSD业界需要什么帮助,也可以找阿呆聊。