NAND Flash控制器功能

Nand Flash控制器通常提供损耗均衡,纠错码(ECC)和坏块管理功能。
其实现方式可以用软件,硬件或两者的组合来实现。

通常,Nand Flash控制器位于主机和NAND闪存设备之间,并控制对设备的访问。

正是因为如此,为了简化Nand Flash控制器设计,eMMC基于此而来,将Nand Flash控制器和存储器设计在一起,简化控制器额外的程序操作,提高数据速率。

一、坏块管理

随着Nand Flash使用,NAND闪存阵列的组成块的存储器单元可能磨损。所有Flash技术都是如此,强大的系统需要将块故障考虑在内并使其适当调整。

1、坏块初始化

大多数NAND闪存设备,如大容量存储器的各种类型,出厂时都在存储器阵列中包含一些初始坏块;这些块通常被制造商标记为坏,表明它们不应在任何系统中使用。

NAND闪存器件数据表提供坏块标记的位置。工厂测试在最坏情况下执行,那些未通过此测试的块被标记为坏块。如果在系统中使用出厂标记的坏块,则它可能看起来正常运行,但可能导致其他好块失败或产生其他系统错误。

如果客户擦除了出厂标记的坏块,则标记也会被删除。为避免丢失此信息,最好在发出任何PROGRAM或ERASE命令之前对坏块执行初始读取并创建坏块表。
在创建原始坏块表之后,必须对其进行维护和添加,因为附加块随着使用而变坏。

2、块退化和跟踪

由于NAND闪存设备中的好模块会降级和磨损,因此不仅要跟踪初始的坏块-工厂标记的坏块,还要跟踪在正常操作设备中出现错误的块。

块失败的类型:

当NAND闪存设备运行期间发生故障时,它们被归类为永久或临时故障。
通过适当的NAND Flash设计实践可以最大限度地减少临时故障。如果发生这些故障,则可以恢复存储器阵列的故障位置;不需要将块添加到坏块表中。
要从此类错误中恢复,请擦除发生错误的块,并将数据重新编程到该块。

临时错误以多种形式发生:

  1. 程序干扰:
    当在PROGRAM操作期间改变不打算编程的一个或多个位时,发生编程干扰错误。
    向页面增加部分页面程序的数量可能会加剧此错误。程序干扰错误可能会显示在正在编程的页面上或同一块内的其他页面上。
  2. 阅读打扰:
    在READ操作期间改变一个或多个位时发生读取干扰错误。
    在正在读取的块内发生读取干扰错误,但是在正在读取的页面之外的页面上发生读取干扰错误。在包含这些页面的块的ERASE命令之前,在各个页面上执行大量(数十万或数百万)READ操作会加剧此错误。
  3. 过编程:
    当块内位线上的存储单元阈值栅极电压变得太高时,可能发生过编程。
    这可以防止正确读取存储器单元并且可能导致给定块内的后续页面的编程不正确。
  4. 数据丢失:
    在延长的存储期间,一些存储器单元可能通过改变充电增益或电荷损失而丢失数据。高ERASE / PROGRAM循环计数可以通过在存储单元的栅极氧化物中诱导陷阱电荷来加剧数据丢失,从而有效地磨损栅极氧化物。

二、磨损均衡

因为NAND闪存单元最终会磨损,强大的NAND Flash操作应包括耗损均衡策略。

磨损均衡用于在每次编程文件时将逻辑存储器地址转换为不同的物理存储器地址。该操作由连接到NAND闪存设备的控制器监视和实现。磨损均衡扩展NAND闪存单元在整个存储器阵列范围内的使用,均衡使用所有内存单元,并有助于延长设备的使用寿命。

损耗均衡算法确保对每个块的所有可用写周期进行相等的使用。

简单理解就是不能每次存数据在一个Block里面的,因为半导体器件都会有损耗,所以存数据时可以每次换着Block存储,就是“雨露均沾”的意思,不能老薅一个羊身上的羊毛。

三、Error Correction Code-ECC

在NAND闪存设备操作期间或长时间不活动期间可能会发生位错误,强制使用ECC。

“错误”指的是位反转,一般是浮栅极的电子飘移导致电压偏移,使得从1变为0;或者读取或者写入错误。

ECC的特征通常在于每528字节数据扇区检查的代码可以校正的位数。(数据扇区通常为528字节,但在某些设备中可能会有所不同)
例如,如果控制器具有1位ECC,则能够纠正每个数据扇区中的一个1位错误。

当数字数据存储在非易失性存储器中时,拥有一种可以检测并纠正一定数量错误的机制至关重要。纠错码(ECC)以这样的方式对数据进行编码,使得解码器可以识别和纠正数据中的错误。

通常,通过向它们添加多个冗余位来编码数据串。当重建原始数据时,解码器检查编码的消息以检查任何错误。

请参考如下Micro文章

TN-29-63:Error Correction Code (ECC) in SLC NAND Introduction

TN-29-61: Wear Leveling in NAND Flash Memory Introduction

2019-07-22良人当归即好

NAND Flash控制器功能相关推荐

  1. Nand Flash控制器

    回忆一下,一上电以后,Nand Flash的前面4K就会被拷贝到2440的片内存里面. 在前面几个程序,编译出来的程序都小于4K:如果我们编译出来的程序大于了4K,这时候Nand Flash的前面4K ...

  2. Nboot中nand flash控制器参数TACLS、TWRPH0和TWRPH1的确定(基于K9F1208U0B)

    注:K9F1208U0B的供电电压时3.3V,本系统的FCLK=533Mhz,HCLK=533/4=133Mhz 如果看不到图片,请看这个链接http://cky0612.blog.163.com/b ...

  3. Nand Flash基础知识与坏块管理机制的研究

    概述 Flash名称的由来,Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次 ...

  4. 块设备驱动之NAND FLASH驱动程序

    转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/25240909 一.框架总结 二.硬件原理 相比于nor flash.我们能够清 ...

  5. NAND FLASH/NOR FLASH/EMMC等存储器的比较和区别

    首先介绍一下NAND FLASH/NOR FLASH: Nand Flash:Nand Flash存储器是Flash存储器的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决 ...

  6. jz2440开发板修改UBOOT支持NAND FLASH

    很多天没有看嵌入式的东西了,今天来看一下,继续之前移植uboot到jz2440开发板.今天我们来实现Uboot支持NAND FLASH. 在之前的文章里(点击连接查看之前的记录),我们为了编译通过把N ...

  7. Nand Flash数据存储单元的整体架构

    http://www.crifan.com/files/doc/docbook/linux_nand_driver/release/html/linux_nand_driver.html 简单说就是, ...

  8. Nand flash驱动的编写与移植

    1 Nand flash工作原理     S3C2410板的Nand Flash支持由两部分组成:Nand Flash控制器(集成在S3C2410 CPU)和Nand Flash存储 芯片(K9F12 ...

  9. S3C2440对Nand Flash操作和电路原理(基于K9F2G08U0A)

    S3C2440对Nand Flash操作和电路原理(基于K9F2G08U0A) S3C2440内部集成了一个Nand flash控制器.S3C2440的Nand flash控制器包含了如下的特性: l ...

  10. NAND FLASH读写原理

    NAND FLASH读写原理 一.结构分析  S3C2410处理器集成了8位Nand Flash控制器.目前市场上常见的8位NandFlash有三星公司的k9f1208.k9f1g08.k9f2g08 ...

最新文章

  1. 图论之拓扑排序 poj 2367 Genealogical tree
  2. 如何给变量取个简短且无歧义的名字
  3. JDK1.5 新特性
  4. python 报错 AttributeError: type object ‘datetime.datetime‘ has no attribute ‘datetime‘
  5. MongoDB架构——记得结合前面的文章看,里面的图画的很好
  6. spring cloud 路由
  7. asp.net 2.0 中引用Web.config内的连接字符串的方法
  8. linux 扫描mipi设备,VS-RK3399 在linux系统下面调试Mipi camera接口介绍
  9. Qt笔记-桌面应用程序加载字体库(ttf)
  10. Win10系统Win键无法使用
  11. 华为补助武汉员工,最高每日 2000 元;iPhone SE 2 量产或推迟;PowerShell 7.0 发布 | 极客头条...
  12. POJ 1002 UVA 755 487--3279 电话排序 简单但不容易的水题
  13. jar的MANIFEST.MF配置了Class-Path, java -classpath设置无效
  14. C语言 段错误Segmentation Fault
  15. 单片机sprintf函数的用法_C++小知识之sprintf用法
  16. 中国人民大学_《组织行为学》_19.冲突:怎样避免组织内耗?
  17. jsp界面对数据库增删改查
  18. 如果让你来制作一个访问量很高的大型网站,你会如何来管理所有CSS文件、JS与图片?
  19. 七个最佳 GitHub 代码库,让你成为更好的 JavaScript 程序员
  20. 不同介质中的运动目标检测(虚拟潜望镜)

热门文章

  1. Matlab线型,颜色及标记的自定义
  2. bootstrap 可以拖动 表格宽度_table表格列宽可拖动
  3. 脉动风时程matlab程序,脉动风时程matlab程序.docx
  4. wireshark读写pcap文件_使用wireshark分析tcpdump出来的pcap文件
  5. matlab能否用递推公式给出表达式,matlab定积分运算
  6. 数字电路:常见的锁存器浅析
  7. 怎么把ide改成ahci_小科普 | 老电脑不重装系统,硬盘IDE模式如何改成AHCI?
  8. Java将多张图片合并保存到同一页PDF中
  9. UltraEdit 注册机使用激活方法:
  10. 对C语言程序设计老师的评价,C语言程序设计课程教学评价研究