zoukankan      html  css  js  c++  java
  • flash的读写与擦除

      对于flash的认识,比较肤浅,在网上找了些资料,感谢 http://blog.csdn.net/lin364812726/article/details/18815395  的博主,

         将其博文转载过来,以便以后查看。

      flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。

    flash按照内部存储结构不同,分为两种:nor flash和nand flash。
    (1)nor flash:像访问SDRAM一样,按照数据/地址总线直接访问, 可写的次数较少,速度也慢,由于其读时序类似于SRAM,读地址是线性结构,多用于程序代码的存储.
    (2)nand flash:只有8位/16位/32位甚至更多位宽的总线,每次访问,都要将长地址分为几部分,一点点的分步传入才能访问nand flash。Nand Flash相比其余的几种flash优势在于可擦写次数多,擦写速度快,但是在使用以及使用过程中会出现坏块因此需要做特殊处理才可以使用。其主要用于数据存储,大部分U盘都是Nand Flash。

    Nand和Nor的使用寿命,块擦除的速度,数据存储的出错几率等,都有很大区别。

      任何 flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为1。

      由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s ,与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。执行擦除时块尺寸的不同进一步拉大了NOR和NAND之间的性能差距。

      NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。

      NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同 。8个引脚用来传送控制、地址和数据信息。NAND读和写操作采用512字

    节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。NAND Flash 的数据是以bit的方式保存在memory cell,

    一般来说,一个cell 中只能存储一个bit。这些cell 以8个或者16个为单位,连成bitline,形成所谓的byte(x8)/word(x16),这就是NAND Device的位宽。这些Line

    会再组成Page,(NAND Flash 有多种结构,以三星的K9F1208U0M),每页528Bytes(512byte(MainArea)+16byte(Spare Area)为例),每32个page形成一个

    Block(32*528B)。具体一片flash上有多少个Block视需要所定,实例的NAND FLASH 有 4096个block,故总容量为4096*(32*528B)=66MB,但是其中的

    2MB是用来保存ECC校验码等额外数据的,故实际中可使用的为64MB。

      NAND flash以页为单位读写数据,而以块为单位擦除数据。按照这样的组织方式可以形成所谓的三类地址:

    Column Address:列地址

    Page Address :页地址

    Block Address :块地址

      对于NAND Flash来讲,地址和命令只能在I/O[7:0]上传递,数据宽度是8位。所有flash器件都受位交换现象的困扰。在某些情况下,一个比特位会发生反转或被

    报告反转了。一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障可能导致系统停机。如果只是报告有问题,多读几次就可能解决了。当然,

    如果这个位真的改变了,就必须采用错误探测/错误更正(EDC/ECC)算法。位反转的问题更多见于NAND闪存,NAND的供应商建议使用NAND闪存的时候,同时使用

    EDC/ECC算法。这个问题对于用NAND存储多媒体信息时倒不是致命的。当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,必须使用

    EDC/ECC系统以确保可靠性。NAND器件中的坏块是随机分布的。NAND器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。在已制成的器件中,

    如果通过可靠的方法不能进行这项处理,将导致高故障率。

      可以非常直接地使用基于NOR的闪存,可以像其他存储器那样连接,并可以在上面直接运行代码。对于NAND器件,由于需要I/O接口,NAND器件使用要复杂得

    多。各种NAND器件的存取方法因厂家而异。在使用NAND器件时,必须先写入驱动程序,才能继续执行其他操作。向NAND器件写入信息需要相当的技巧,因为绝不

    能向坏块写入,这就意味着在NAND器件上自始至终都必须进行虚拟映射。

      在NOR器件上运行代码不需要任何的软件支持,在NAND器件上进行同样操作时,通常需要驱动程序,也就是内存技术驱动程序(MTD ),NAND和NOR器件在进

    行写入和擦除操作时都需要MTD。

      驱动还用于对DiskOnChip产品进行仿真和NAND闪存的管理,包括纠错、坏块处理和 损耗平衡。NAND FLASH的主要供应商是SAMSUNG和东芝,在U盘、各

    种存储卡、MP3播放器里面的都是这种FLASH,由于工艺上的不同,它比NORFLASH拥有更大存储容量,而且便宜。但也有缺点,就是无法寻址直接运行程序,只能

    存储数据。另外NAND FLASH 非常容易出现坏区,所以需要有校验的算法。

  • 相关阅读:
    使用Gson将对象类转成Json对象时出现u003d的问题
    spark 关联source
    FutureTask demo
    mybatis batchinsert
    spark-shell下有提示了,但是发现不能退格
    why big data
    MySQL buffer pool中的三种链
    MySQL 性能监控 4 大指标
    实战演示疑惑 mysql insert到底加什么锁
    MySQL锁(行锁、表锁、页锁、乐观锁、悲观锁等)
  • 原文地址:https://www.cnblogs.com/hxing/p/5878143.html
Copyright © 2011-2022 走看看