我是靠谱客的博主 羞涩滑板,最近开发中收集的这篇文章主要介绍nand关于读、写和擦除的命令流程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

转载地址:http://blog.sina.com.cn/s/blog_5c401a150101d9yk.html

读操作

    读操作是指从一个指定地址读取数据出来。为了完成读取,当一个读操作被触发的时候NAND必须去识别这

个操作和相对应的地址。在执行了读取操作算法一段时间之后,NAND Flash就开始输出了数据序列。基于NAND的

各个pin的信号,NAND的Command Interface就能够去识别被触发的命令。

    图2.11展示了一个命令周期,当CLE为高的时候Command Interface就会识别一个命令周期;在那种情况下,

DQs上输出的8-bit的值就代表command。

    图2.12展示的是一个地址周期,通常任何操作都需要对要进行操作的部分进行寻址。地址的长度依赖于要

做什么操作和NAND本身的容量。不管怎样,输入列地址需要N个周期,输入行地址需要M个周期。当ALE是高的时候Command Interface就识别地址;同样的如果所有的输入信号是低的时候DQs的值也是地址。

    在读操作的最后一个命令阶段就是数据输出,如图2.13所示。数据的输出是由RE#信号来进行切换的:在每

一个周期内DQs上都会有一个新的数据。

[NAND] <wbr>关于读、写和擦除的命令流程
 

 

    这些基本的时钟周期是被NAND用来解码和执行各个操作,图2.14展示了一个读命令的时序。第一个周期被

用来触发读命令“RD”(例如00h)。在命令周期之后会有一连串时钟周期,这些周期是为了提供地址。之前有

说过给地址的过程是先给列地址,接着给行地址。所有的引脚(ALECLERE#)包括图中没有的都必须按照之前

所描述的那样去进行操作。代码“RDC”(Read Command Confirm,例如30h)被用于确认读命令。最后,开始

进行读取操作并且设备进入到忙碌状态;当NAND重新回到准备状态,数据的输出周期也就开始了。

    上面所描述的读命令输出的数据时整个页的数据一起输出,而不会去管你是否想要读哪个byte的数据。在

某些情况下,我们只需要对很小的数据进行操作,或者是我们只想读一个页里面的随机值。这种时候Command

Change Read Column(也就是我们熟知的随机数据输出)就能够改变我们正在读取的列地址。

    图2.15展示了Change Read Column的时序,通常在读命令被执行之后,将会由可能在数据输出的时候改变

列地址。当一个命令周期内触发了“CRC”(Change Read Column 例如05h),紧接着是我们想要去进行读取的

数据的地址。当由于需要的列地址更少的时候 那么对读命令所需求的周期就更少了。用于确认的命令周期“CRCC”(Change Read Column Confirm 例如:E0h)被用于使能数据输出。由于这个过程数据已经存储到页缓存里面,所以就不需要额外的时间去做这个动作。

    一般而言,一个读操作的忙碌时间会持续大概25-30us。通过Read Cache Command来提高读的效率是一种不错的方法;在这个命令里面,我们可能会从Flash存储器中去下载数据,而页缓存则正在读另外一个页的内容。

[NAND] <wbr>关于读、写和擦除的命令流程

[NAND] <wbr>关于读、写和擦除的命令流程
 

    Sequential Read Cache Command 序列如图2.16所示。读命令必须在Read Cache Command之前被触发。在

设备返回准备状态之后,命令代码"RC"(Read Cache 例如31h)是被用来初始化数据从存储阵列到页缓存的下载。

RB#会拉低一会然后NDout周期被用来输出第一个页。由于没有其他地址输入,下一个顺序页的内容就会被自动

读取。当我们不需要读其他页里面的内容的时候,最后一个页的内容会被命令“RCE”(Read Cache End 例如

3Fh)复制到页缓存中。

    随机缓存读序列如图2.17所示:在这个命令的过程中我们可以选择我们想要进行缓存的页 的地址。

 

 

[NAND] <wbr>关于读、写和擦除的命令流程

 

 

    

    对于一个多plane的芯片,我们可以对多个plane同时触发读命令。图2.18展示多Plane的读命令序列。

    在标准读命令周期“RD”之后,对plane 0中我们想要读取的页的地址就会被触发。命令代码“MR”

(Multi-plane read 如32h)会被用在下一个命令周期中,这样设备就可以为接收plane 1的数据的地址做准备。一旦新的地址和读命令确认代码“RDC”给出,那么设备就会进入到忙碌状态并开始在两个planes上同时执行读取算法。当设备返回准备状态,命令周期CC(Choose Column 例如06h)就会被用来选择我们想要输出的页的地址,接着就是一连串地址周期。命令代码“CCC”(Choose Column Confirm 例如 E0h)是一个命令确认代码。最后Dout的周期就是被用来输出读取的数据。

    由于不管Read Cache Command还是多plane的读取都是为了提高NAND的读数据的效能,所以我们简单的对他

们进行了对比,如图2.19所示为一般读取、缓存读取和多plane读取的比较结果。

[NAND] <wbr>关于读、写和擦除的命令流程

[NAND] <wbr>关于读、写和擦除的命令流程
 

    已经给出的Talgo这个时间需要去从NAND中读取,Tout这个时间需要去页里面进行下载,执行对两个页的读

取的全部时间是 T = 2*Talgo + 2*Tout。如果一个多plane命令被用到了,Talgo在两个plane同时被执行,那么

T = Talgo + 2*Tout。评价在Cache Read中的时间T比较困难。因为我们必须考虑到Talgo和Tout的比率问题。

如果Tout比Talgo更长的话,那么T = Talgo + 2*Tout。他必须遵守这样的规则:Cache Read 和 Double Plane

Read是一样的。相比之下,如果Talgo比Tout更长的话,那么就不可能用Talgo去对单个页的数据输出进行标识。

在这种情况下,Double-plane Read的效能就会比Cache Read的效能要好。

[NAND] <wbr>关于读、写和擦除的命令流程
 

 

写操作

    写操作的目的是将一个数据序列写进一个指定的地址中去。基本的关于周期的概念在上面读操作中已经介绍

过了:如命令周期和地址周期,唯一需要增加的周期是"Din"周期,参考图2.21。数据输入靠信号WE#来进行转换,在每一个周期一个新的字节就会出现在DQs上。

[NAND] <wbr>关于读、写和擦除的命令流程
 

    写的时序流程如图2.22所示。一个命令周期输入“PM”码(写 例如80h)然后紧跟着希望写的地址的地址

周期。当地址设置完成,若干个“Din”周期就会被用于将数据输入到页缓存中。最后一个“PMC”(Program 

Confirm 例如10h)命令被用来触发这个读算法的开始。

[NAND] <wbr>关于读、写和擦除的命令流程
 

    如之前已经讲解过的读操作,在写操作的情况下也需要传输大量的数据。Change Write Column被用于改变

我们想要写的地址的列地址。

    写的过程需要保持忙碌的时间会比较长:一般150-200us。写缓存操作或是两个plane的写操作都是用来提高

写操作的效率的。图2.23展示了写缓存操作和两个plane写操作的时序。

    第一阶段的周期(“PM”周期,地址周期和“Din”周期)是和标准写操作的周期是一样的。没有用“PMC”

而是用了一个“C/M”命令周期来进行触发。“C/M”可以是写缓存操作(例如15h)也可以是两个plane操作(例如11h)。一旦另外一个“PM”命令给出,紧接着就是新的地址和“PMC”命令。存储器会进入到忙碌状态并且写

算法也会在两个页中被同时执行。两个plane的情况不需要上面这样操作,因为两个plane的写操作已经被熟知

为是一种同时在两个plane上进行写的动作,写算法会同时在两个plane上同时工作。

[NAND] <wbr>关于读、写和擦除的命令流程
 

    重叠的双plane的写操作也是可以的。第一个plane的写操作在数据被加载到页缓存中就立刻开始进行写了。

这种情况NAND的架构必须要能够在两个plane上用独立的方式去执行写算法。

    上面提到的写算法的命令的差异比较见图2.24.

[NAND] <wbr>关于读、写和擦除的命令流程
 

 

擦除操作

    擦除操作是被用来在NAND上删除数据的操作。如之前所说,擦除操作最小的操作单元是block。图2.25展示

擦除命令的序列。

    擦除命令是非常简单的:一个“ER”码(擦除命令 例如60h)先触发,紧接着是block的地址和“ERC”码

(擦除确认命令 例如D0h)。之后存储器就开始执行擦除算法并进入忙碌状态了。

[NAND] <wbr>关于读、写和擦除的命令流程
 

    由于擦除是时间最长的的操作(大约耗时1ms),双plane的擦除命令可用于在同一时间擦除两个blocks。

图2.26展示了双plane擦除的命令序列。

    标准的擦除周期(“ER”命令和行地址周期)是跟在一个“MER”命令(Multi-plane擦除 例如D1h)之后

的。一旦两个plane的地址和"ERC"码都被给出,那个存储器就进入到了忙碌状态,这个时候两个plane上的两个

block就在被同时擦除。

[NAND] <wbr>关于读、写和擦除的命令流程
 

 

同步操作

    NAND的读操作的吞吐量是由寻址时间和数据传输时间决定的。异步总线的数据传输速度极限是40MB/s。随着

制程技术的提升,页的大小在提升,同时数据传输所需的时间也有所增加。这样,NAND的读操作的吞吐量反而

降低了。这也就在寻址时间和数据传输时间的比率上造成了混乱。DDR的接口引入就是为了解决这样的问题。

    现在市场上两种可能的解决方法:第一是Source Synchronous Interface(SSI),SSI是一种被ONFI结构

(Open NAND Flash Interface)驱动的方法;ONFI是为了让NAND的接口标准化而在2006年的时候制定的。另外

一些NAND供应商则使用的是Toggle-Mode接口。

    图2.27展示的是NAND的SSI标准的接口。和异步接口(ASI)进行对比,可以发现主要有三点不同:

1、RE#变成了W/R#,W/R#是一个指示读/写的引脚

  2、WE#变成了CLK时钟信号脚。

3、多了一个DQS脚,主要是用来作为数据的阀门作用;例如他可以用来指示数据的有效窗口。

[NAND] <wbr>关于读、写和擦除的命令流程
[NAND] <wbr>关于读、写和擦除的命令流程
 

    这里,时钟是被用来指引命令和地址的传输;而数据阀门信号则是用来指引数据应该被传输到哪里去。

DQS是一个双向总线,也是由和时钟同样的频率来进行驱动。

    之前的关于基本命令周期的介绍必须根据接口来进行调整。

    图2.28展示了SSI标准的一个操作序列,命令周期发完之后紧跟着Dout周期。

    Toggle-Mode DDR 接口使用的引脚如图2.29所示。

[NAND] <wbr>关于读、写和擦除的命令流程
 

 

    另外需要注意的是只有DQS引脚才被添加进了ASI标准协议之中。这样,更高的速度就可以通过切换RE#的频率的提升来实现。

    图2.30展示了Toggle-Mode接口:一个命令序列后面接着“Dout”周期。

最后

以上就是羞涩滑板为你收集整理的nand关于读、写和擦除的命令流程的全部内容,希望文章能够帮你解决nand关于读、写和擦除的命令流程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部