NANDflash详解_nand flash pagesize-程序员宅基地

技术标签: 硬件  

本文转载自:https://www.linuxidc.com/Linux/2012-10/73065.htm

Nand Flash详细分析

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. 接下来解释一下一般nand flash(SAMSUNG_K9F5608X0D)管脚的说明(后面#或前面n后上面-都表示低电平有效):

 

I/O0~I/O7:        用于输入命令/地址/数据,输出数据

CE#  :  片选管脚

CLE        : command latch enable ,命令锁存使能,在输入命令之前必须使其有效

ALE  :    Address latch enable ,地址锁存使能,在输入地址前必须使其有效

RE#    : read enable,读使能,在读数据之前要先使其有效

WR#  : Write enable,写使能,在写数据之前要先使其有效

WP#  :write Protect,写保护

R/B#   :Ready/Busy Output ,就绪/忙,主要用于在发送完编程/擦除后,检测这些操作是否完成。

Vcc     :Power,电源

Vss     :Ground,接地

N.C     :Non-Connection,未定义,未连接

 

以下是关SAMSUNG_K9F5608X0D注意:其它型号命令与时序图可能会有所不同,具体区别可以查阅相关芯片的datasheet命令设置表:

 

Read status读取状态寄存器命令;

 

ReadID 读芯片ID命令;ECh是制造厂商代码,Device code 是设备号

 

Read1    :读data field命令,(00h->1stfield,01h->2nd field)从写入地址开始读,读到此页最后一个byte(包括了sparefield);

 

以下是针对连续row read的时序图,连续row read不会被中止直到CE管脚被拉高(sequential row read 只对于K9F5608U0D_P,F orK9F5608B0D_P有效):

 

Read2 :读sparefield命令;

Reset  : 复位命令,当nand flash还在忙状态(随机读取,写数据或者擦除期间)的时候,如果接收到复位命令则会中止当前这些操作,并且这些正在被改变的存储单元里面的内容不再有效。之后命令寄存器会被清除用于等待下一个命令。

 

 

Page program:写命令,从写入地址开始写,写到此页最后一个byte(包括了sparefield);(这里需要注意:发写命令之前要先写入页内区域选择命令;00h->A(默认)01h->B

 

Copy-Back program:   从源地址某个区开始处把数据快速有效地拷贝到目标地址的同一个区域直到页的最后一个byte而不需要通过外部memory。

 

Block Erase:块擦除,从A[9](因为页内只有512byte故列地址占用A[8:0])以上的地址发出,但是A[13:9]将不被理睬,应该块地址是从A[14]以上位才有效的。



Nand Flash中,一个块中含有1个或多个位是坏的,就成为其为坏块。

坏块的稳定性是无法保证的,也就是说,不能保证你写入的数据是对的,或者写入对了,读出来也不一定对的。而正常的块,肯定是写入读出都是正常的。

坏块有两种:

1)一种是出厂的时候,也就是,你买到的新的,还没用过的Nand Flash,就可以包含了坏块。此类出厂时就有的坏块,被称作factory (masked)bad blockinitial bad/invalid block,在出厂之前,就会做对应的标记,标为坏块。

具体标记的地方是,对于现在常见的页大小为2KNandFlash,是块中第一个页列地址为2048的位置(旧的小页面,pagesize512B甚至256Bnandflash,坏块标记是spare area的第6个字节),如果不是0xFF,就说明是坏块。相对应的是,所有正常的块,好的块,里面所有数据都是0xFF的。

2)第二类叫做在使用过程中产生的,由于使用过程时间长了,在擦块除的时候,出错了,说明此块坏了,也要在程序运行过程中,发现,并且标记成坏块的。具体标记的位置,和上面一样。这类块叫做worn-out bad block

对于坏块的管理,在Linux系统中,叫做坏块管理(BBMBad Block Managment),对应的会有一个表去记录好块,坏块的信息,以及坏块是出厂就有的,还是后来使用产生的,这个表叫做坏块表(BBTBad Block Table)。在Linux内核MTD架构下的Nand Flash驱动,和UbootNand Flash驱动中,在加载完驱动之后,如果你没有加入参数主动要求跳过坏块扫描的话,那么都会去主动扫描坏块,建立必要的BBT的,以备后面坏块管理所使用。(这样每次使用之之前,都会自动扫描一下,建立BBT,这样就可以跳过怀块进行别的方面的处理了)

  1. 关于好的,可以使用的块的数目达到一定的数目,比如三星的K9G8G08U0M,整个flash一共有4096个块,出厂的时候,保证好的块至少大于3996个,也就是意思是,你新买到这个型号的nand flash,最坏的可能,有30963996100个坏块。不过,事实上,现在出厂时的坏块,比较少,绝大多数,都是使用时间长了,在使用过程中出现的。
    2.保证第一个块是好的,并且一般相对来说比较耐用。做此保证的主要原因是,很多Nand Flash坏块管理方法中,就是将第一个块,用来存储上面提到的BBT,否则,都是出错几率一样的块,那么也就不太好管理了,连放BBT的地方,都不好找了,^_^。一般来说,不同型号的Nand Flash的数据手册中,也会提到,自己的这个nand flash,最多允许多少个坏块。就比如上面提到的,三星的K9G8G08U0M,最多有100个坏块。 对于坏块的标记,本质上,也只是对应的flash上的某些字节的数据是非0xFF而已,所以,只要是数据,就是可以读取和写入的。也就意味着,可以写入其他值,也就把这个坏块标记信息破坏了。对于出厂时的坏块,一般是不建议将标记好的信息擦除掉的。uboot中有个命令是“nand scrub”就可以将块中所有的内容都擦除了,包括坏块标记,不论是出厂时的,还是后来使用过程中出现而新标记的。一般来说,不建议用这个。不过,我倒是经常用,其实也没啥大碍,呵呵。
    最好用“
    nand erase”只擦除好的块,对于已经标记坏块的块,不擦除。
    nand Flash中页的访问顺序】

在一个块内,对每一个页进行编程的话,必须是顺序的,而不能是随机的。比如,一个块中有128个页,那么你只能先对page0编程,再对page1编程,。。。。,而不能随机的,比如先对page3,再page1page2.page0page4.。。。

【片选无关(CEdon’t-care)技术】

没明白什么意思?很多Nand flash支持一个叫做CE don’t-care的技术,字面意思就是,不关心是否片选,那有人会问了,如果不片选,那还能对其操作吗?答案就是,这个技术,主要用在当时是不需要选中芯片却还可以继续操作的这些情况:在某些应用,比如录音,音频播放等应用中,外部使用的微秒(us)级的时钟周期,此处假设是比较少的2us,在进行读取一页或者对页编程时,是对Nand Flash操作,这样的串行(SerialAccess)访问的周期都是20/30/50ns,都是纳秒(ns)级的,此处假设是50ns,当你已经发了对应的读或写的命令之后,接下来只是需要Nand Flash内部去自己操作,将数据读取或写入进去到内部的数据寄存器中而已,此处,如果可以把片选取消,CE#是低电平有效,取消片选就是拉高电平,这样会在下一个外部命令发送过来之前,即微秒量级的时间里面,即2us50ns2us,这段时间的取消片选,可以降低很少的系统功耗,但是多次的操作,就可以在很大程度上降低整体的功耗了。

总结起来简单解释就是:由于某些外部应用的频率比较低。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34127958/article/details/79608241

智能推荐

delphi10.2的Date/time 实用程序单元DateUtils.pas_hourofthedaydelphi-程序员宅基地

文章浏览阅读681次。这些是用于日期和时间计算的函数{*******************************************************}{ Date/time 实用程序单元 }{*******************************************************}{ 下面的单位是符合ISO 8..._hourofthedaydelphi

Theme Section_z.theme section-程序员宅基地

文章浏览阅读1.2k次。DescriptionIt's time for music! A lot of popular musicians are invited to join us in the music festival. Each of them will play one of their representative songs. To make the programs more interes_z.theme section

Python3笔记--文件操作-程序员宅基地

文章浏览阅读94次。emmm,直接开始罢...打开文件open(path,flag[,encoding][,error])path:要打开文件的路径flag:打开方式 r 只读 r+ 读写 rb 以二进制格式打开一个文件用于只读 w 写入,先删除原内容,再写入,没有此文件则创建 w+ 读写,先删除原内容,再写入,没有此文件则创建 ..._python3 能直接对移动硬盘中的文件进行调用吗

阿里云短信sdk的懒人用法_defaultacsclient修改endpoint-程序员宅基地

文章浏览阅读1.3k次,点赞7次,收藏18次。1.因为是懒人写法,所以我们直接用带有demo的sdk图示链接:https://help.aliyun.com/document_detail/55359.html?spm=a2c4g.11186623.6.698.13d911273aOxl02、下载后的目录结构是3、因为是懒人写法所以我们的修改就简单了下面进行讲解进入正题找到对应的参数accessKeyId、accessKeySecret 、签名、模板id、模板内的变量修改demo里面的参数和内容,封装成一个方法或者类,如下:_defaultacsclient修改endpoint

解决Oracle ORA-00911错误的一个方法_oracle 创建用户 ora 00911-程序员宅基地

文章浏览阅读4k次。运行时发现执行PreparedStatement ps = conn.prepareStatement("select 1 from dual;");时报错:java.sql.SQLException: ORA-00911: 无效字符哦,此时我知道是什么原因了。马上把PreparedStatement ps = conn.prepareStatement("select 1 from du_oracle 创建用户 ora 00911

OptionsMenu和ContextMenu的使用(一)_optionsmenu 、contextmenu的使用方法-程序员宅基地

文章浏览阅读1k次。一、OptionsContextMenu的使用1.1 创建OptionsContextMenu方式一: 请参考AndroidStudio模板工程(七)的关于菜单Menu的使用提示方式二: //重写Activity的onCreateOptionsMenu方法 @Override public boolean onCreateOptionsMenu(Menu..._optionsmenu 、contextmenu的使用方法

随便推点

医院wifi覆盖解决方案_医院楼层ap覆盖方案-程序员宅基地

文章浏览阅读2.2k次。一、项目背景 大多数医院信息化建设发展经历了从早期的单机单用户应用阶段,到部分级和全院级治理信息系统应用;从以财务、药品和管理为中央,开始向以病人信息为中央的临床业务支持和电子病历应用。医疗行业信息化正在走向如何利用信息化技术减少医疗差错,如何利用信息化技术进行医疗服务的立异,如何将分散的医疗资源整合,为患者提供更完善的服务的方向。 随着病院信息化建设水平的不断进步,医院信息系统在我国已得到了较快发展,海内多数医院已建立起以治理为主的HIS系统。当前的发展重点则是建设以病人为中央的临床信息系统CIS_医院楼层ap覆盖方案

django 最佳实践_5本适合初学者的最佳Django书-程序员宅基地

文章浏览阅读6.7k次,点赞2次,收藏8次。django 最佳实践Here you will find list of best django books for beginners to learn. 在这里,您将找到最佳django书籍清单,供初学者学习。 If you’re eager to learn Django as it is so popular nowadays for its simplicity, then you..._django书籍

FL Studio 21 for Mac中文破解版百度网盘免费下载安装激活_fl studio 21 osx-程序员宅基地

文章浏览阅读712次,点赞14次,收藏3次。是Mac系统中的一款水果音乐编辑软件,提供多种插件,包括采样器、合成器和效果器,可编辑不同风格的音乐作品,Pattern/Song双模式,可兼容第三方插件和音效包,为您的创意插上翅膀。FL Studio 21 Mac破解版入门低,想学习音乐编曲的朋友可以选择这款软件。FL Studio 21 for Mac中文破解版完整下载是最好的音乐开发和制作软件也称为水果循环。它是最受欢迎的工作室,因为它包含了一个主要的听觉工作场所。_fl studio 21 osx

Hibernate源码分析_hibernate 源码类关系-程序员宅基地

文章浏览阅读7.5k次。这段时间本人利用空闲时间解读了一下Hibernate3的源码,饶有收获,愿与大家共享。 废话不多说,首先我们先对Hibernate有一个大致的印象l 设计模式Hibernate=监听器,实际上是回调l Hibernate3支持拦截器 Hibernate配置方面的大原则:l bhn.xml文件所有配置都是描述本实体,除了cascade描述级联,即如何将本实体的操作(_hibernate 源码类关系

react native 如何上传文件/图片到 strapi数据库_react-native 上传-程序员宅基地

文章浏览阅读1.4k次,点赞40次,收藏20次。折腾了一段时间,发现在strapi上传文件是出名的困难,而且官方文档上传文件教程也没有针对react native的部分,仅仅通过它的nodejs和browser代码在rn中套用行不通,其中还有些细节的纰漏。开始前请确保自己已经按照官方教程安装好strapi提示:以下是本篇文章正文内容,下面案例可供参考。_react-native 上传

DDos防护系列之2--DDos防御策略_ds防护策略-程序员宅基地

文章浏览阅读3k次。前一篇文章讲述了什么是DDos,DDos的种类等。这一节我们讲述DDos的防御策略。我们按照DDos的攻击类型来讲解每一种类型对应的防御策略。一、DDos攻击类型有以下一些类型,但不限于:畸形报文、传输层(4层)DDoS攻击、Web应用DDoS攻击、DNS DDoS攻击、连接型DDoS攻击。1. 畸形报文每中报文都有相对应的标准格式,如果不符合这种格式就属于畸形报文,我们可_ds防护策略