Nand Flash详细分析


  1. NAND技术在设计之初是为了数据存储应用,nand的写回速度比较快,芯片面积小,特别容量大有很大的优势
  1. NAND的地址分为三部分:块号,块内页号,页内字节号;正因为如此,NAND的一次数据访问,要经过3次寻址,先后确定块号,块内页号,页内字节号,至少占用了三个时间周期。因此:NAND FLASH的一个劣势出来了:随机字节读写速度慢。但是nand flash平均每MB成本比nor flash少了三,四倍。所有NAND FLASH的容量可以做的比较大。
  1. Nand flash 的数据是以bit的方式保存在memory cell,一个cell里面只能存储一个bit。这些cell8个或者16个为单元,连成bit line,形成所谓的byte(X8)/word(X16),这就是NAND Device的位宽。这些line会再组成pagepage又分为main area(一般用来做普通数据的存储区)spare area(一般用于在读写操作的时候存放效验码等额外数据用的),最后再又多个page形成一个block
  2. NAND flash以页为单位读写数据,而以块为单位擦除数据。按照这样的组织方式可以形成所谓的三类地址:

――Block address――page address――column address

对于NANDFLASH来说,地址,命令和数据都只能在I/O[7:0]上传递,数据宽度为8bits16bits

下面解释一下块地址,列地址,行地址,还有页寄存器(page Register)的含义:

    在擦除数据的时候块地址会被用到。

  1. 块地址block address:如果一个块有32page,一个page512byte。那么一个block32×512byte。所以块地址由A[14]以上的位来表示。32Mbytes的有32*1024*1024/32/512 = 2048block需要占用11bit,即A[24:14]

    对Nand flash的访问中,地址由列地址和行地址两部分组成。

        列地址column address:列地址表示在页内以byte(如果是X16,则以word)为单元的页内偏移量;   

        行地址(页地址)row address:指page在整个nand芯片中的索引。

    以下列举3个不同大小型号的nand flash进行说明:

SAMSUNG_K9F5608X0D(512Bytes(没有包括16Bytes spare)*32pages*2048blocks=32Mbytes)需要3个地址周期

 

列地址:A[7:0] 第一个地址周期发出,对于X8nandflash来说,如果要把A[8]也编进列地址里面去,那么整个地址传输需要4个周期完成,所以为了节省一个周期,K9F5608X0D把页内分为A(1 half array)区,B(2 half array)区。A0255字节,B256511字节。访问某页时必须通过A[8]选定特定的区,A[8]则由操作指令决定的,00h,在A区;01hB区。所以传输地址时A[8]不需要传输。对于X16nand flash来说,由于一个page main area 的容量为256word,仍相当于512byte。但是,这个时候没有所谓的1st halfpage 2nd halfpage 之分了,所以,bit8就变得没有意义了,也就是这个时候 A8 完全不用管,地址传递仍然和x8 器件相同。除了这一点之外,x16NAND使用方法和 x8 的使用方法完全相同。

行地址:A[24:9]由第23个地址周期发出;

SAMSUNG_K9F1208(512Bytes(不包括16Bytes spare)*32pages*4096blocks=64MBytes)需要4个地址周期

 

列地址:A[7:0] 第一个地址周期发出,同上;

行地址:A[25:9]由第234个地址周期发出,A[25]以上的各位必须被设置为L

SAMSUNG_K9F1G08U0B(2048Bytes(不包括64Bytes spare)*64pages*1024blocks=128MBytes)需要4个地址周期

这里有个问题2048不是用11bits就可以表示了吗?为什么还要用到A[11:0]12bits?????此处求解


 

列地址:A[11:0] 12个地址周期发出,如图*L位要置为low

行地址:A[27:12]由第34个地址周期发出;

 

 页寄存器:由于对nand flash读取和编程操作,一般最小单位是page。所以nand在硬件设计时候,对每一片都有一个对应的区域用于存放将要写入到物理存储单元中区的或者刚从存储单元中读取出来的一页的数据,这个数据缓存区就是页缓存,也叫页寄存器。所以实际上写数据只是写到这个页缓存中,只有等你发了对应的编程第二阶段的确认命令0x10之后,实际的编程动作才开始把页缓存一点点的写到物理存储单元中去,这也就是为什么发完0x10之后需要等待一段时间的原因。

  • 1
  • 2
  • 3
  • 下一页

相关内容