flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何 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的闪存,可以像其他存储器那样连接,并可以在上面直接运行代码。由于需要I/O接口,NAND要复杂得多。各种NAND器件的存取方法因厂家而异。在使用NAND器件时,必须先写入驱动程序,才能继续执行其他操作。向NAND器件写入信息需要相当的技巧,因为绝不能向坏块写入,这就意味着在NAND器件上自始至终都必须进行虚拟映射。

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

驱动还用于对DiskOnChip产品进行仿真和NAND闪存的管理,包括纠错、坏块处理和 损耗平衡。NAND FLASH的主要供应商是SAMSUNG和东芝,在U盘、各种存储卡、MP3播放器里面的都是这种FLASH,由于工艺上的不同,它比NORFLASH拥有更大存储容量,而且便宜。但也有缺点,就是无法寻址直接运行程序,只能存储数据。另外NAND FLASH 非常容易出现坏区,所以需要有校验的算法。

MTD
MTD(memorytechnology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统。MTD的主要目的是为了使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口。MTD的所有源代码在/drivers/mtd子目录下。CFI接口的MTD设备分为四层(从设备节点直到底层硬件驱动),这四层从上到下依次是:设备节点、MTD设备层、MTD原始设备层和硬件驱动层。

1)Flash硬件驱动层:硬件驱动层负责在驱动加载时初始化Flash硬件,Linux MTD设备的NOR Flash芯片驱动遵循CFI接口标准,其驱动程序位于drivers/mtd/chips子目录下。NAND型Flash的驱动程序则位于/drivers/mtd/nand子目录下

2)MTD原始设备:原始设备层有两部分组成,一部分是MTD原始设备的通用代码,另一部分是各个特定的Flash的数据,例如分区。

  用于描述MTD原始设备的数据结构是mtd_info,这其中定义了大量的关于MTD的数据和操作函数。mtd_table(mtdcore.c)则是所有MTD原始设备的列表,mtd_part(mtd_part.c)是用于表示MTD原始设备分区的结构,其中包含了mtd_info,因为每一个分区都是被看成一个MTD原始设备加在mtd_table中的,mtd_part.mtd_info中的大部分数据都从该分区的主分区mtd_part->master中获得。

  在drivers/mtd/maps/子目录下存放的是特定的flash的数据,每一个文件都描述了一块板子上的flash。其中调用add_mtd_device()、del_mtd_device()建立/删除mtd_info结构并将其加入/删除mtd_table(或者调用add_mtd_partition()、del_mtd_partition()(mtdpart.c)建立/删除mtd_part结构并将mtd_part.mtd_info加入/删除mtd_table中)。

3)MTD设备层:基于MTD原始设备,linux系统可以定义出MTD的块设备(主设备号31)和字符设备(设备号90)。MTD字符设备的定义在mtdchar.c中实现,通过注册一系列file operation函数(lseek、open、close、read、write)。MTD块设备则是定义了一个描述MTD块设备的结构 mtdblk_dev,并声明了一个名为mtdblks的指针数组,这数组中的每一个mtdblk_dev和mtd_table中的每一个 mtd_info一一对应。

  4)设备节点:通过mknod在/dev子目录下建立MTD字符设备节点(主设备号为90)和MTD块设备节点(主设备号为31),通过访问此设备节点即可访问MTD字符设备和块设备。

转自:https://blog.csdn.net/lin364812726/article/details/18815395

flash的读写擦除相关推荐

  1. 使用CYUSB3014实现SPIFlash读写擦除控制

    背景: 使用USB3014芯片,对应的Demo,外加Cypress官方USB Control Center软件实现SPI Flash的读写. 由于未找到Cypress官放提供的文档,因此通过代码与摸索 ...

  2. flash读取程序 msp430_MSP430读写擦除FLASH程序

    1-简介 MSP430单片机对片内FLASH的读写操作程序范例. 2-程序例程 //********************************************************** ...

  3. flash读取程序 msp430_MSP430单片机对片内FLASH的读写操作程序范例

    原标题:MSP430单片机对片内FLASH的读写操作程序范例 // 参数: wAddr 为地址 , 范围 0x1000~0xFFFF void ReadFlash(U16 wAddr,U8 *bBuf ...

  4. NAND Flash硬件读写原理

    1.nand接口 s3c2440板的Nand Flash模块由两部分组成:Nand Flash控制器(集成在s3c2440)和Nand Flash存储芯片(K9F1208U0B)两大部分组成.当要访问 ...

  5. STM32F10X SPI操作flash MX25L64读写数据

    STM32F10X SPI操作flash MX25L64读写数据 前一段时间在弄SPI,之前没接触过嵌入式外围应用,就是单片机也只接触过串口通信,且也是在学校的时候了.从离开手机硬件测试岗位后,自己一 ...

  6. 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列

    第51章     设置FLASH的读写保护及解除 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...

  7. 第51章 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列

    第51章     设置FLASH的读写保护及解除 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...

  8. 第51章 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列

    原文地址::https://www.cnblogs.com/firege/p/5806164.html 相关文章 1.用J-Flash去掉STM32写保护----http://download.csd ...

  9. STM32F10X SPI操作flash MX25L64读写数据(转)

    源:STM32F10X SPI操作flash MX25L64读写数据 前一段时间在弄SPI,之前没接触过嵌入式外围应用,就是单片机也只接触过串口通信,且也是在学校的时候了.从离开手机硬件测试岗位后,自 ...

最新文章

  1. putty颜色设置|securecrt颜色设置|windows命令行颜色设置
  2. Express的基本路由实现对get和post等的请求和响应
  3. 2014\Province_C_C++_B\7 六角填数
  4. 手机端实现6位短信验证码input输入框效果(样式及代码方法)
  5. 背账100万,不付利息不用还钱,银行套路好深
  6. 从shiro源码角度学习工厂方法设计模式
  7. PPT 2010实现使用自定义主题付下载
  8. 【Android源码】Activity如何加载布局
  9. java 内部类_Java内部类总结
  10. 电信行业BOSS系统
  11. HTML中淡入的动画效果,利用CSS3制作淡入淡出动画效果
  12. 世界上最简单的会计书(利润表)
  13. java graphics2d旋转_反向Java Graphics2D缩放和旋转坐标
  14. sigmod 求导计算
  15. linux配置防火墙和重启防火墙
  16. USTC English Club Note20211222
  17. 我也写了部lt;西游记gt;
  18. 编写一个函数判断一个整数是不是素数c语言,编写函数判断一个整数是否为素数....
  19. Numpy计算二维、三维、多维向量空间夹角余弦值
  20. GeoServer发布osm数据地图服务

热门文章

  1. spool导出多列去空格
  2. Windows和UNIX系统调用的一些区别
  3. 九月的诗11首 - AI 创作诗文绘画
  4. 【数论】博弈论 —— nim游戏
  5. python资讯_python学习-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....
  6. 填写运算符判断等式是否成立
  7. python作业网站_怒刷python作业-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....
  8. Pandas 时间序列 - DateOffset 对象
  9. 八款流行无线黑客工具,非常实用
  10. GPT-3: 最强的人工智能?