Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1322280
  • 博文数量: 860
  • 博客积分: 425
  • 博客等级: 下士
  • 技术积分: 1464
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-20 19:57
个人简介

对技术执着

文章分类

全部博文(860)

文章存档

2019年(16)

2018年(12)

2015年(732)

2013年(85)

2012年(15)

我的朋友

分类: 嵌入式

2015-03-14 14:35:11

NAND Flash 芯片是构成 SSD 的基本存储单元, NAND Flash 芯片工艺的发展、结构的变化将会推动整个闪存存储产业的高速发展。在设计闪存存储系统的时候,特别是在设计 NAND Flash 控制器、 SSD 盘或者卡的时候,都需要深入的了解 NAND Flash 的操作方法、接口命令及其时序。一个 NAND Flash 芯片虽然非常小,采用LGA 或者 TSOP 的封装形式,但是,其内部结构还是非常复杂的。特别是随着存储密度的不断提高, NAND Flash 内部抽象的概念也越来越多,例如 Flash 颗粒、Device 、 Die 、 Plane 、 Block 和 Page 。颗粒就是我们通常所看到的一个基本芯片封装颗粒;每个颗粒可以封装多个 Device ,每个 Device 可以看成是一个独立的Chip ,拥有独立的控制、数据信号线;每个 Device 可以由多个 Die 构成,多个 Die之间内部有独立的操作寄存器、状态指示信号,对外的信号线是共享的;一个 Die 又可以分成多个 Plane ,每个 Plane 拥有独立的数据寄存器组,可以在一定情况下对多个 Plane 进行并发操作;一个 Plane 可以分成若干个 Block ;每个 Block 又是一个独立的数据块擦除单元;一个 Block 最后又被分成很多个 Page 页,每个 Page 页是读写操作的基本单元。

以镁光的 Flash 芯片为例, MT29F32G 芯片由一个 Die 构成,其中包括两个Plane ; MT29F64G 芯片由两个 Die 构成,并且这两个 Die 分别归属为两个 Device,每个 Die 包括两个 Plane 。 MT29F32G 和 MT29F64G 芯片的 Die 基本单元结构可以描述如下:

wKioL1P6A0WyY8OBAAE8CH7yLs8210.jpg

对于 MT29F32G 和 MT29F64G 芯片的地址信息可以定义如下表:

wKiom1P6AkXBkR_5AADYgD73rWU029.jpg

对于镁光的 MT29F128G 芯片而言,由于存储密度提升了,所以整个芯片由两个Device 构成,每个 Device 包括两个 Die ,每个 Die 容纳了两个 Plane 。MT29F128G 芯片内部的基本存储单元 Device 的结构描述如下:

wKioL1P6A3LSn14mAAGooE66jWI246.jpg

MT29F128G 的地址信息定义如下表:

wKiom1P6AnDwDJg_AADVgivbI3Y433.jpg

在了解到 NAND Flash 的内部结构之后,我们需要思考从软件层面如何利用好NAND Flash 的内部结构,从而提升整体的 IO 性能。

Plane 单元拥有独立的数据寄存器,是否可以并发 Plane 操作从而提升 IO 性能呢?以 MT29F128G 芯片为例,每个 Die 可以被分成 2 个物理 Plane 。每个 Plane包含一个 4314 字节的数据寄存器,一个 4314 字节的数据 Cache 寄存器,以及一个由 4K 页构成的 Block Array 。由于两个 Plane 的数据寄存器是物理上独立的,因此,这两个 Plane 可以同时执行 Program 、 Read 和 Erase 操作,通过这种方式可以提升 NAND Flash 的系统 IO 性能。两个 Plane 同时读数据的时序图如下所示:

wKioL1P6A5-QuJrdAAEie1b7Suw561.jpg

从上面的时序图可以看出,两个 Plane 之间的并发操作不是那么随意的。当需要从两个 Plane 同时读取数据的时候,首先加载第一个 Plane 的地址信息,然后加载第二个 Plane 的地址信息,当两个地址信息都加载完毕之后,发出结束命令 30H 。随后整个 Die 进入忙状态, R/B# 信号置低。在 Die 处于忙状态时,无法对其进行任何操作,在这个阶段,数据从 NAND Flash 介质中加载到两个 Plane 的寄存器中。当 R/B# 信号恢复之后,可以读取两个 Plane 中的数据。值得注意的是,第二个Plane 中的数据读取需要 06H-E0H 命令的支持。从这点上来看,由于两个 Plane 只是独立了数据寄存器,共享了操作寄存器,所以,不能很好的做到非常随意的数据并发。

两个 Plane 的并发写操作时序如下图所示:

wKiom1P6Ap_ytIBnAABVRZ4he5U657.jpg

和并发读操作类似,两个 Plane 之间的并发写也不是随意的,需要同时做相同的操作。两个 Plane 的并发操作需要同时发起命令。对于写操作,首先需要加载两个Plane 的访问地址。第一个地址期的结束符 11H 不会触发真正的编程操作;第二个地址期的结束符 10H 才会真正触发编程操作。一旦编程操作启动之后,状态信号R/B# 就会置低,直到编程操作完成,状态信号才能恢复。

两个 Plane 的并发擦除操作时序如下图所示:

wKiom1P6ArjwRHRGAACcUz3IgDA718.jpg

和读写操作的原理一样,两个 Plane 的并发擦除需要同时加载两个 Plane 的地址信息,然后后台并发同时执行擦除操作。和串行操作相比,这种并发操作可以提升NAND Flash 的整体性能。

所以,从上述的描述来看,虽然两个 Plane 之间的数据寄存器是完全独立的,但是,操作寄存器是共享的,可以让读写和擦除操作在这两个 Plane 上并发执行。但是,这种并发操作的条件是两个 Plane 必须同时进行相同的操作。而不是两个 Plane可以随意、独立、并发执行不同的操作。这就是两个 Plane 并发操作的局限,但是即使是这样,如果软件层能够设计好的算法,能够充分的让多个 Plane 并发执行,那么 IO 性能还是可以大幅度的提升。

在 NAND Flash 芯片中,一个真正的独立并发单元是 Die 。以 MT29F128G 为例,一个 Device 内部有两个 Die ,在芯片内部,这两个 Die 拥有独立的操作寄存器、状态信号线,对外的控制、状态信号线是共享的。在这种情况下,芯片提供了一种 Interleave 的操作方式,可以完全并发这两个 Die 的读写、擦除操作。下图是两个Die 的并发读时序图:

wKiom1P6AtXCQBcWAAByejRVDu4122.jpg

从上图可以看出,两个 Die 内部拥有独立 R/B# 信号线,对外的状态信号线是内部状态信号的“逻辑与”结果。两个 Die 的操作可以独立、并发,只不过由于共享对外接口,因此在数据输出时还需要串行化。

Interleave 的并发写时序如下图所示:

wKioL1P6BAWT1ZNeAAB5qnnX0O4853.jpg

和并发读操作类似,两个 Die 可以完全独立的并发执行写操作。

在 Device 级别这种并发操作显得更加随意。不同的 Device 拥有完全独立的对外接口,因此,两个 Device 可以同时执行独立的操作。

综上而言,在 NAND Flash 芯片内部有 3 种并发执行单元,分别是 Device 、 Die和 Plane 。其中 Plane 是数据寄存器独立,因此,多个 Plane 之间可以并发的执行相同的操作; Die 拥有独立的操作寄存器、独立的内部状态信号线,共享外部接口,因此,多个 Die 之间可以独立并发操作; Device 之间拥有独立的控制、数据信号线,因此,多个 Device 之间可以随意并发。利用好 NAND Flash 芯片内部的这些并发单元,可以很好的提升闪存存储的 IO 性能。

阅读(813) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~