镁光256Gb NAND Flash芯片介绍

镁光256Gb NAND Flash芯片介绍总体概述该芯片是一款典型的大容量NANDFlash存储颗粒,支持OpenNANDFlashInterface(ONFI)2.1的接口标准,采用ONFINANDFlash的操作协议。该芯片采用Multiple-levelCell(MLC)技术,根据不同的容量,一个芯片内部封装了多个DIE(LUN),每个DIE由两个Plane构成,一个Plane可以分成2048个Block,每个Bl…

大家好,又见面了,我是你们的朋友全栈君。

总体概述

该芯片是一款典型的大容量NAND Flash存储颗粒,支持Open NAND Flash Interface (ONFI) 2.1的接口标准,采用ONFI NANDFlash的操作协议。该芯片采用Multiple-level Cell MLC)技术,根据不同的容量,一个芯片内部封装了多个DIELUN),每个DIE由两个Plane构成,一个Plane可以分成2048Block,每个Block256页组成,一个页的大小为8KB+448B的组织结构方式。

 

在性能方面,一个Page页的读延迟在50us左右,页编程时间为900us,块擦除时间长达3ms。每个块的标称擦除寿命达到5000次。

wKiom1WO2u-gIhsLAACS2lAuSlY082.jpg        

 

芯片接口及信号

镁光的芯片支持同步和异步两种接口模式。在异步接口模式下,采用5个控制信号,分别为#CECLEALE#WE#RE,另外#WP用于控制芯片的写保护,R/#B用于检测芯片的当前状态。在同步操作模式下,#WR引脚为时钟输入信号,#RE信号为读写方向指示信号。

 

NAND Flash的接口信号具体定义如下:

wKioL1WO3MWgW3ZVAAC0k2aDZAE843.jpg

wKiom1WO2xSwA1T4AAG6WLIvTa4437.jpg

一个NAND Flash物理芯片可以由多个DIE(或者称之为LUN)的单元构成,每个DIE会有一套独立的上述提及的控制信号线。一个DIE中会存在若干个Plane,每个Plane有许多Block单元组成,一个Block单元是一个最小的擦除单位,并且有数量较多的Page页构成,每次写的最小单元就是一个Page页。对于容量较小的芯片,芯片厂商只会封装一个DIE,每个DIE的内部结构如下图所示:

wKioL1WO3QbyyvjFAAE27HWt2AU616.jpg

对于镁光512Gb芯片,一个DIE内部集成了两个Plane,通过一套控制信号线和寄存器控制内部的两个Plane同时并发工作。值得一提的是,多个DIELUN)可能会共享一套控制信号线,因此,在物理上多个DIE会被封装成一个Target。需要注意的是,同一个Target内部的DIE虽然共享了物理信号线,但是寄存器都是相互独立的。因此,从结构上来看,一个NAND Flash的内部架构可以只由一个DIELUN)构成,如下图所示:

wKiom1WO23GhNKGTAAB6Qg-bJ8g566.jpg

也可以在一个芯片中集成多个DIELUN),每个DIE拥有一套独立的物理信号线,如下图所示:

wKioL1WO3VaRHMePAAEN0t02u-o441.jpg

在高密的封装中,没有那么多的物理信号线,那么同一个Target中会集成多个DIELUN),如果下图所示:

wKiom1WO277ACPPhAAEcDVjI2Kg548.jpg

无论如何去封装,每个DIELUN)中的基本结构是相同的。

 

NAND Flash存储单元

NAND Flash中一个DIELUN)中的存储单元通常由多个Plane构成,其结构如下:

wKioL1WO3aLRDCF9AAD8WAsyZWg492.jpg

上图所示的一个Page页大小为8KB,考虑到spare area448字节空间,因此需要14位地址访问一个page页,即地址信号的最低14位为页内地址。一个block块内部有256page页,需要8位地址(Page addressPA)信息去访问一个block块内部的不同page页。一个Plane内部存在2048block块,需要11位(Block addressBA)去访问一个Plane中的不同block块。一个DIELUN)中存在2Plane,需要一位地址位去访问一个DIE中的不同Plane。因此,40位地址信息的定义如下表所示:

wKiom1WO3BKglbTKAACqcATKSeU108.jpg

CA0~CA13为页内偏移访问地址信息,PA0~PA7为页地址信息,BA8DIE中的Plane选择地址位,BA9~BA19DIE中的块地址信息,另外,LA0为一个Target中的DIELUN)选择地址位,在该NANDFlash芯片中,一个Target中可以集成2DIE

 

在每个Plane单元中都存在两个寄存器:一个为cache寄存器;另一个为data寄存器。Cache寄存器的作用是缓存NAND Flash控制器输入的数据,而data寄存器的作用是提升数据读取和写入的性能,数据传输和数据加载之间的操作。在数据读取和数据写入的过程中,都提供了流水并发操作模式,这类模式都充分利用了这个data寄存器。

读写操作时序

镁光的NAND Flash芯片提供了两种操作模式,一种为异步操作模式;另一种为同步操作模式。异步操作是一种比较传统的接口模式,NAND Flash和控制器处于两个时钟域,所有的信号在数据传输过程中都需要进行同步操作,因此性能比较差。同步操作由外部提供参考时钟,NAND Flash和控制器处于同一个时钟域,可以获取较高的读写性能。

异步操作

异步操作模式非常适合单片机之类的控制器对其进行操作,不需要特殊的NAND Flash控制器,普通的总线操作就可以对NAND Flash进行控制操作。异步数据写操作的时序如下图所示:

wKioL1WO3fqChMAqAADczr1SZgM516.jpg

#WE信号的驱动下,DQ总线上输入对应的数据,并且在#WE信号上升沿之后需要保持tDH时间。在#WE信号上升沿驱动下,DQ总线上的数据被锁存到NAND Flash的数据寄存器中。

RDY信号为高电平时,说明可以从NAND Flash指定位置中读取数据,读操作的时序如下图所示:

wKiom1WO3GTyDBxoAAC6BQNuLjw820.jpg

在读信号#RE的下降沿驱动下,数据从NAND Flash中输出到数据总线DQ上。NAND Flash控制器可以在#RE信号的上升沿采样数据总线DQ上的数据。当NAND Flash控制器给定的读信号频率较快时,通过#RE上升沿信号无法正确采样数据总线上的数据时,可以通过下一个#RE信号的下降沿采样总线上的输出数据。如下图所示:

wKioL1WO3kqRK40GAAC7A4EOc_M675.jpg

因此,在异步总线操作时,需要考虑#RE读信号频率和tRC之间的时间关系。通过这个时间关系来确定具体的读数据采样方式。

同步操作

同步操作是一种高速接口,和DDR内存接口类似,可以通过上下沿同时采样的方式提升数据传输效率。在同步模式下,时钟信号需要外部持续不断的输入,NAND Flash通过控制ALECLE#CEW/#RDQS信号来控制数据的输入和输出。在同步模式下的数据输入时序如下图所示:

wKioL1WO3nPidjaPAAElar5aIko264.jpg

DQS信号由NAND Flash控制器驱动,并且和时钟信号同频同相。在CLK时钟信号的上升沿和下降沿将总线上的数据锁存到NAND Flash内部的寄存中。为了能够让NAND FlashDQS的上升沿和下降沿采样到总线上的数据,在沿变化之前,NAND Flash控制器需要在总线DQ上准备好写入的数据。

 

RDY信号为高电平时,表明可以从NAND Flash中输出数据。在读操作的时候,数据总线DQ、总线指示信号DQS需要由NAND Flash控制,控制器需要释放对这些信号线的控制。数据读总线操作时序如下图所示:

wKioL1WO3qDDfk3VAAFZMIhGT6Q972.jpg

可以发现总线数据锁存信号DQS和时钟信号CLK同频,但是会存在一定的相差,这样NAND Flash控制器可以通过CLK时钟信号的双沿变化对总线上的数据进行采样,从而可以正确的读取NAND Flash中的数据。

 

NAND Flash操作命令

NAND Flash的操作通过一系列的命令来完成。镁光芯片的操作命令定义如下:

wKiom1WO3QnwTSMPAAJJtYZ_1_0501.jpg

wKioL1WO3uriUA1OAAErFHnyaEs235.jpg

wKiom1WO3U-AfHzCAADKCzQnZXk463.jpg

命令一共分成9大类,包括复位操作、识别操作、配置操作、状态操作、地址操作、读操作、写(编程)操作、擦除操作以及写回操作。在NAND Flash控制器的软件中需要将这些最底层的命令封装成NAND Flash操作库。

 

读命令

对于读操作,NAND Flash提供了多种模式。普通的页读操作效率比较低,在发起页读取的时候需要输入具体的命令和地址信息,然后再输出数据,具体的操作时序如下图所示:

wKioL1WO3zeDqvFCAACAiJzuJ2E120.jpg

输入命令和地址信息之后,RDY信号变低,NAND Flash需要等待一段时间之后才能输出数据,当数据准备完毕,可以输出时,RDY信号变高。NAND Flash在这个过程中需要不断检测RDY信号,当该信号由低变高之后,可以通过同步或者异步的方式输出数据。

 

NAND Flash的内部,有一个data cache寄存器,通过该寄存器可以将数据读取操作分成两个阶段:一个是从page cache寄存器向NAND Flash控制器传输数据;另一个是从NAND Flash中向data寄存器加载数据。这两个操作可以进行流水并发,命令0x31就是用来实现这个流水并发操作的。为了提高数据输出的效率,在普通页读取的基础上,通过0x31命令可以在数据从page cache输出的同时从NAND Flash中向data cache加载新的数据。这种并发模式分成两类:一类为顺序读,另一类为随机读,在操作时序上存在差别。下图为并发顺序读的操作时序:

wKiom1WO3Zyij7GoAACCQaAKa_0871.jpg

在指定地址的数据从page cache中输出的同时,NAND Flash会将下一页数据加载到data寄存器中,这样当NAND Flash控制器读取完指定page中的数据之后,下一页数据也已经被加载成功了。通过这种流水机制,提升读性能。

 

除了可以流水并发顺序page页之外,也可以将随机的page页进行并发流水读取,如下图所示:

wKioL1WO34HTbCyKAADYKAdL5rg838.jpg

在页读取命令发送完毕之后,当该数据被加载到page cache之后,RDY信号由低置高。紧接着输入另一个页地址,以及流水加载命令0x31。在page cache中数据往外输出的同时,NAND Flash中的数据并发输出到data寄存器中。通过这种方式可以流水并发读取两个离散page页中的数据。

 

对于并发读取两个plane中的数据,NAND Flash也提供了0x00-0x32控制命令,通过该命令可以实现多个plane数据的并发加载,从NAND Flash中加载到各自对应的page cache中。

写(编程)命令

普通的写命令允许NAND Flash控制器将数据写入NAND Flash中的page cache寄存器,并且将数据从page cache寄存器中写入到NAND Flash介质中。一个普通的页编程时序如下图所示:

wKiom1WO3e3DSaPDAABzLn46jIg086.jpg

该过程可以分成三大步骤:第一步输入控制命令、操作地址信息;第二步输入需要写入的数据至page cache;第三步启动编程,将page cache寄存器中的数据写入NAND Flash介质。

 

如果每次写入操作都经历上述过程,那么写延迟将会变得很长。为了提高页写入性能,NAND Flash提供了流水并发模式,该模式充分利用了data寄存器。采用的命令是0x80-0x15,时序如下图所示:

wKioL1WO39PQZgbGAADecJWCp_M663.jpg

在该模式下,在地址和命令的控制下,数据被首先写入到page cache寄存器中。当0x15控制命令发送完毕之后,page cache寄存器中的数据会被拷贝到data寄存器中。拷贝进行时RDY信号置低,当拷贝完成之后,RDY信号变高电平。NAND Flash控制器在这种情况下可以输入下一个页的数据,在下一个页数据输入的过程中,NAND Flash会并发将data寄存器中的数据写入指定的介质中去。从而达到控制器输入和具体的编程操作之间的流水并发,提高了page页写操作的吞吐量。

 

需要结束流水编程时,在最后一页数据写入之后,写入0x10命令即可。具体的时序操作如下图所示:

wKiom1WO3j_Rjd4vAADpbMsxHyQ795.jpg

对于并发编程两个Plane中的数据页,NAND Flash提供了0x80-0x11命令。通过该命令可以直接将数据写入到多个Plane中的page cache寄存器中,从而实现多个Plane中的数据页并发写入。

 

擦除操作命令

擦除操作是一个非常费时的操作,对于NAND Flash而言,一个最小的擦除单元是block块。当需要对一个块进行擦除操作时,需要输入块的地址以及对应的控制命令,具体时序如下图所示:

wKioL1WO4C-iCy-TAABuU4WkOTE954.jpg

在擦除的过程中,RDY信号会置低,此时该DIE将无法进行正常的读写操作。所以,虽然不同的Plane之间拥有不同的寄存器组,但是由于物理信号线是共用的,所以,一旦一个Plane中的block进入了擦除状态,那么整个DIE的读写操作将会受到影响。

 

COPYBACK命令

wear-leveling操作,或者garbage collecting的时候,通常需要将一个page页中的数据拷贝到另一个page页,这就用到了COPYBACK的功能。该命令可以将一个page页中的数据加载到寄存器中,然后直接写入到指定的另一个page页中。

 

在实际操作过程中,考虑到NAND Flash中的数据可能已经遭到破坏,NAND Flash通常建议控制器在数据回拷的过程中,对迁移的数据进行校验。为此NAND Flash提供了COPYBACK READ的控制操作过程,如下图所示:

wKiom1WO3qPx0mJSAACDF0iReBg743.jpg

COPYBACK READ命令执行完毕之后,数据会输入到NANDFlash控制器,控制器中的ECC解码器对数据进行校验,如果数据发生错误,那么在COPYBACK WRITE的过程中可以将正确的数据写入到NAND Flash中,在这个过程中可以使用CHANGE WRITE COLUME实现对page页的随机写操作。该时序如下图所示:

wKioL1WO4Iij-07EAAEJshLEj-M785.jpg

当更新的数据被写入到Page cache寄存器之后,启动页编程,完成COPYBACK操作。

(吴忠杰,存储之道)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152098.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python中空格的代码_python 空格

    python中空格的代码_python 空格初学python,不明白代码之间时空格的用处比如:print”Hens”,25+30/6print”hens”,25+30/6一个有空格一个代码之间的空格其实没有什么作用。只是为了增强可读性。代码不是越集中越好,符合规范的结构,比如让大括号单独成行,反而看起来更加清晰、舒服,是更能避免笔误的好习惯。虽然,代码可读性是通过设计来实现的。python如何添加多个空格我添加了多个空…

  • 教你PSD文件如何预览(支持32以及64位win7系统)

    教你PSD文件如何预览(支持32以及64位win7系统)相信随着软矿发出关于AdobeCS6的系列文章,很多矿友们已经按捺不住都早早的安装上了吧!但是笔者安装之后发现之前安装的PhotoshopCS5所具有的PSD文件预览功能消失了,相当郁闷的说~所以苦寻很多方法之后终于找到了消失的PSD文件预览功能。NO.1下载右侧链接的压缩包文件:点我下载下载完成后解压缩至任意目录,压缩包内容如下图所示然后将对应系统的MysticThum…

  • DropDownList1_SelectedIndexChanged使用

    DropDownList1_SelectedIndexChanged使用       今天写代码给DropDownList1添加DropDownList1_SelectedIndexChanged事件,在运行测试时发现DropDownList1的index发生改变后DropDownList1_SelectedIndexChanged没有执行,查了一下DropDownList1的属性才知道AutoPostBack要设置成true,才会执行DropDownList1_S

  • 2018阿里笔试题一道

    2018阿里笔试题一道八卦阵相传是由诸葛亮创设的一种战斗队形和兵力部署,由八种阵势组成。为了方便,采用矩阵来描述一个八卦阵,它由八个单阵组成,每个单阵由多个兵力区域组成形成一种阵势,如下图所示,其中数字为一个兵力区域的士兵个数。假设单阵与单阵之间兵力区域不会相邻,且单阵中每个兵力区域至少存在一个相邻兵力区域(注:相邻是指在其左上,正上,右上,右方,右下,正下,左下,左方与其相邻),请用最快的速度计算出八个单阵中的兵力(…

  • 凸函数与凹函数的区别_convex中文

    凸函数与凹函数的区别_convex中文读文章和学习过程中经常会遇到concave,convex以及down,up的组合。怎样区分呢?下面有一些摘自网络的定义,不同情况下应有不同的定义,以下仅供参考:定义一:当四种都存在时:上凹(conve

  • kindeditor php配置,KindEditor-编辑器配置参数属性 | 小灰灰博客

    kindeditor php配置,KindEditor-编辑器配置参数属性 | 小灰灰博客在《开发php接入富文本编辑器KindEditor》中提到了KindEditor编辑器的使用方法,通过使用KE.show(config)方法即可将编辑器添加到文档中。·无论使用哪种方式使用KindEditor编辑器,都必须进行参数配置;·可以在KE.show()和KE.init()方法中传递配置参数config;·配置参数config是一个对象,一般使用字面量对象;·其中,id参数是唯一必须进行配…

    2022年10月12日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号