Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1282821
  • 博文数量: 254
  • 博客积分: 1586
  • 博客等级: 上尉
  • 技术积分: 2295
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-15 16:38
个人简介

linux学习中

文章分类

全部博文(254)

文章存档

2016年(6)

2015年(2)

2014年(74)

2013年(93)

2012年(12)

2011年(2)

2010年(51)

2009年(14)

分类: 嵌入式

2014-08-20 13:49:12

关于读、写和擦除的命令流程

读操作
    读操作是指从一个指定地址读取数据出来。为了完成读取,当一个读操作被触发的时候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] 关于读、写和擦除的命令流程


    这些基本的时钟周期是被NAND用来解码和执行各个操作,图2.14展示了一个读命令的时序。第一个周期被
用来触发读命令“RD”(例如00h)。在命令周期之后会有一连串时钟周期,这些周期是为了提供地址。之前有
说过给地址的过程是先给列地址,接着给行地址。所有的引脚(ALE\CLE\RE#)包括图中没有的都必须按照之前
所描述的那样去进行操作。代码“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] 关于读、写和擦除的命令流程

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

    Sequential Read Cache Command 序列如图2.16所示。读命令必须在Read Cache Command之前被触发。在
设备返回准备状态之后,命令代码"RC"(Read Cache 例如31h)是被用来初始化数据从存储阵列到页缓存的下载。
RB#会拉低一会然后NDout周期被用来输出第一个页。由于没有其他地址输入,下一个顺序页的内容就会被自动
读取。当我们不需要读其他页里面的内容的时候,最后一个页的内容会被命令“RCE”(Read Cache End 例如
3Fh)复制到页缓存中。
    随机缓存读序列如图2.17所示:在这个命令的过程中我们可以选择我们想要进行缓存的页 的地址。
[NAND] 关于读、写和擦除的命令流程

    
    对于一个多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] 关于读、写和擦除的命令流程

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

    已经给出的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] 关于读、写和擦除的命令流程


写操作
    写操作的目的是将一个数据序列写进一个指定的地址中去。基本的关于周期的概念在上面读操作中已经介绍
过了:如命令周期和地址周期,唯一需要增加的周期是"Din"周期,参考图2.21。数据输入靠信号WE#来进行转换,在每一个周期一个新的字节就会出现在DQs上。
[NAND] 关于读、写和擦除的命令流程

    写的时序流程如图2.22所示。一个命令周期输入“PM”码(写 例如80h)然后紧跟着希望写的地址的地址
周期。当地址设置完成,若干个“Din”周期就会被用于将数据输入到页缓存中。最后一个“PMC”(Program 
Confirm 例如10h)命令被用来触发这个读算法的开始。
[NAND] 关于读、写和擦除的命令流程

    如之前已经讲解过的读操作,在写操作的情况下也需要传输大量的数据。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] 关于读、写和擦除的命令流程

    重叠的双plane的写操作也是可以的。第一个plane的写操作在数据被加载到页缓存中就立刻开始进行写了。
这种情况NAND的架构必须要能够在两个plane上用独立的方式去执行写算法。
    上面提到的写算法的命令的差异比较见图2.24.
[NAND] 关于读、写和擦除的命令流程


擦除操作
    擦除操作是被用来在NAND上删除数据的操作。如之前所说,擦除操作最小的操作单元是block。图2.25展示
擦除命令的序列。
    擦除命令是非常简单的:一个“ER”码(擦除命令 例如60h)先触发,紧接着是block的地址和“ERC”码
(擦除确认命令 例如D0h)。之后存储器就开始执行擦除算法并进入忙碌状态了。
[NAND] 关于读、写和擦除的命令流程

    由于擦除是时间最长的的操作(大约耗时1ms),双plane的擦除命令可用于在同一时间擦除两个blocks。
图2.26展示了双plane擦除的命令序列。
    标准的擦除周期(“ER”命令和行地址周期)是跟在一个“MER”命令(Multi-plane擦除 例如D1h)之后
的。一旦两个plane的地址和"ERC"码都被给出,那个存储器就进入到了忙碌状态,这个时候两个plane上的两个
block就在被同时擦除。
[NAND] 关于读、写和擦除的命令流程


同步操作
    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] 关于读、写和擦除的命令流程
[NAND] 关于读、写和擦除的命令流程

    这里,时钟是被用来指引命令和地址的传输;而数据阀门信号则是用来指引数据应该被传输到哪里去。
DQS是一个双向总线,也是由和时钟同样的频率来进行驱动。
    之前的关于基本命令周期的介绍必须根据接口来进行调整。
    图2.28展示了SSI标准的一个操作序列,命令周期发完之后紧跟着Dout周期。
    Toggle-Mode DDR 接口使用的引脚如图2.29所示。
[NAND] 关于读、写和擦除的命令流程


    另外需要注意的是只有DQS引脚才被添加进了ASI标准协议之中。这样,更高的速度就可以通过切换RE#的频率的提升来实现。
    图2.30展示了Toggle-Mode接口:一个命令序列后面接着“Dout”周期。
阅读(2276) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~