NAND FLASH学习笔记之nand flash基础(一)

NAND FLASH学习笔记之nand flash基础(一)一 NandFlash 的几个重要的基本特性 1 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp NandFlash 的 IO 接口 nbsp nbsp nbsp nbsp nbsp nbsp nbsp 对于 Norflash dram 之类的存储设备 CPU 可以直接通过地址总线对其进行访问 而 NandFlash 没有这类的总线 只有 IO 接口 只能通过复用的 IO 接口发送命令和地址 从而实现对 NandFlash 内部数据进行访问 端口的复用 2

我入职以来接触的第一个实践内容就是MTD下的NAND FLASH的驱动,下面我将从nand flash的基础和驱动程序两个方面来探讨该知识点,同时最后我会把自己的

动手实验也展示出来,我学习是基于jz4780grus开发板来学习的,使用的nandflash的型号是MT29F32G08CBACA,我的大致学习结构如目录所示:

 

一、NAND FLASH概述

二、NAND FLASH的参数及物理结构

三、NAND FLASH的地址访问方法

四、 NAND FLASH的操作方法

五、 NAND FLASH的其他一些补充

(一)Nand Flash的概述

1、Nand Flash的定义:

NAND Flash 在嵌入式系统中的地位与PC机上的硬盘是类似的。用于保存系统运行所必需的操作系统,应用程序,用户数据,运行过程中产生的各类数据,系统掉电后数据不会丢失。

2、 Nand Flash的几个重要的基本特性:

         a、NandFlash的IO接口

        对于Norflash、dram 之类的存储设备,CPU 可以直接通过地址总线对其进行访问,而 Nand Flash 没有这类的总线,只有 IO 接口,只能通过复用的 IO接口发送命令和地址,从而实现对 Nand Flash 内部数据进行访问。(端口的复用)

         b、  NandFlash的读、写、擦除操作:

            读写是以页为单位的,擦除是以块为单位的。

            对于Nand的写操作,只能由1变成0,而不能由0变成1。所以必须先对nand执行erase操作,即将0变成1,然后再写(使对应的1变成0

 c、存储在Nand中的数据容易发生错误,所以采取一定的算法对数据进行编码和解码很有必要。在数据存储到nand flash之前进行编码,连同校验数据一同存储到nand之中;在数据从nand读出之后进行解码,以验证数据是否出错。(BCH

3、与Nand Flash相关的名词术语:

1. ONFI标准

    ONFI(Open NAND Flash Interface,开放式NAND闪存接口)规范是一种Flash闪存接口的标准,它是Intel为统一当初混乱的闪存接口所倡导的标准。因为在此之前,市场上销售的NAND闪存芯片在引脚定义上都不完全相同。这就使得为一家公司设计的控制器,很有可能无法用在另一家公司的产品上。比如为东芝芯片设计的控制器,就无法用在三星或海力士的产品上,这就给上游的主控设计商以及最终的产品设计人员带来了很大的困难。

为此,Intel联合多家NAND Flash厂商制定了ONFI标准,统一NAND Flash芯片的引脚定义,并在此基础上采用新的技术以实现新的功能。

2. Block Management(坏)块管理

            NandFlash 由于其物理特性,只有有限的擦写次数,超过那个次数,基本上就是坏了。在使用过程中,有些 Nand Flash 的 block 会出现被用坏了,当发现了,要及时将此 block 标注为坏块,不再使用。于此相关的管理工作,属于 Nand Flash 的坏块管理的一部分工作。

3. Wear-Leveling 负载平衡

            NandFlash 的 block 的管理,还包括负载平衡。

正是由于 Nand Flash 的 block,都是有一定寿命限制的,所以如果你每次都往同一个 block擦除然后写入数据,那么那个 block 就很容易被用坏了,所以我们要去管理一下,将这么多次的对同一个 block 的操作,平均分布到其他一些 block 上面,使得在 block 的使用上,相对较平均,这样相对来说,可以更能充分利用 Nand Flash。

4. ECC 错误校验码

            NandFlash 物理特性上使得其数据读写过程中会发生一定几率的错误,所以要有个对应的错误检测和纠正的机制,于是才有此 ECC,用于数据错误的检测与纠正。Nand Flash 的 ECC,常见的算法有海明码和BCH,这类算法的实现,可以是软件也可以是硬件。不同系统,根据自己的需求,采用对应的软件或者是硬件。

5.SLC MLC

SLC(Single Level Cell)

单个存储单元,只存储一位数据,表示 1 或 0。

对于数据的表示,单个存储单元中内部所存储电荷的电压,和某个特定的阈值电压 Vth相比,如果大于此 Vth 值,就是表示 1,反之,小于 Vth,就表示 0.

MLC(Multi Level Cell)

与 SLC 相对应的,就是单个存储单元,可以存储多个位,比如 2 位,4位等。其实现机制,说起来比较简单,

就是通过控制内部电荷的多少,分成多个阈值,通过控制里面的电荷多少,而达到我们所需要的存储成不同的数据。比如,假设输入电压是 Vin=4V(实际没有这样的电压,此处只是为了举例方便),那么,可以设计出 2 的 2 次方=4 个阈值, 1/4 的 Vin=1V,2/4 的 Vin=2V,3/4 的 Vin=3V,Vin=4V,分别表示 2 位数据 00,01,10,11,对于写入数据,就是充电,通过控制内部的电荷的多少,对应表示不同的数据。

4、Nand Flash的数据存储:

NAND flash的数据是以bit的方式保存;对于SLC而言,一个cell只能存储一个bit,而对于MLC而言,一个cell可以存储2bit;这些cell8个或者16个为单位连成bit line,形成所谓的bytex8/wordx16),即我们所说的NAND device的位宽。

NAND flash以页(后面会介绍到)为单位读写数据,而以块为单位擦出数据。

NAND FLASH学习笔记之nand flash基础(一)

(二)Nand Flash的参数及结构

1、MT29F32G08CBACA型号分析

NAND FLASH学习笔记之nand flash基础(一)

2、MT29F32G08CBACA的封装及设备结构

NAND FLASH学习笔记之nand flash基础(一)

3、MT29F32G08CBACA存储单元组织结构

NAND FLASH学习笔记之nand flash基础(一)

Organization

– Page size : 4320bytes (4096 + 224 bytes)

– Block size: 256pages (1024K + 56K bytes)

– Plane size: 2 planesx 2048 blocks per plane

– Device size: 32Gb:4096 blocks

NANDFLASH存储器MT29F32G08CBACA的总容量为34560Mb(4G+224M),其中包括两个plane,每个plane由2048个block (块) ,每个block又由256 pages组成,而每个page包含了大小为4K字节的Data area(数据存储区域) 和224字节的Spare area(备用区域)

  OOB:每页还有一块区域,在Linux 系统中,称为OOB(Out Of Band),这个区域最初基于Nand Flash在读写数据时容易错误的特性,为了保证数据的正确性,采用相应的检测和纠错机制(EDC/ECC),而设计的用于放置数据的校验值的区域。

   关于 oob具体用途,总结起来有:

1、标记是否是坏块

2、存储ECC数据

3、存储一些和文件系统相关的数据。如jffs2就会用到这些空间存储一些特定信息,而yaffs2文件系统,会在oob中,存放很多和自己文件系统相关的信息。

4、MT29F32G08CBACA功能框图

NAND FLASH学习笔记之nand flash基础(一)

由于,I/O线是数据地址和命令复用的,所以要根据ALE和CLE的高低电平可以判断I/O线上传递过来的是地址,命令还是数据。



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178359.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午5:27
下一篇 2026年3月26日 下午5:27


相关推荐

  • lea指令!「建议收藏」

    lea指令!「建议收藏」
    最近在看linux-0.11内核,看到lea这个指令,google搜索了一下,转给大家,一起学习@!
     
    先看这个这个语法格式吧:
    对AT&T来说,寻址方式比较怪异,但又非常简洁,语法格式如下:segreg:base_address(offset_address,index,size) ;例子movl%eax,label1(,$2,$4)movl%ebx,(label2,$2,)movl%ecx,(%esp)
    其效果为

    2025年7月27日
    5
  • linux中sftp默认登录的端口号是多少? sftp通过指定的端口号连接?sftp默认端口号[通俗易懂]

    linux中sftp默认登录的端口号是多少? sftp通过指定的端口号连接?sftp默认端口号[通俗易懂]需求描述:  今天一个同事,遇到个问题,程序连接sftp服务器连接不上,问我端口号是多少,  我想了一下是21还是22,所以就做了测试,发现sftp默认的连接端口号是22,  在此做下记录.操作过程:1.使用sftp默认的端口号进行登录aiuap_cj@cuchc802:~>sftpaisftp@10.124.163.133aisftp@10.124.163.13…

    2025年11月16日
    6
  • Django(22)Django执行SQL语句

    Django(22)Django执行SQL语句前言Django在查询数据时,大多数查询都能使用ORM提供的API方法,但对于一些复杂的查询可能难以使用ORM的API方法实现,因此Django引入了SQL语句的执行方法,有以下三种执行方式ext

    2022年7月31日
    13
  • woff字体反爬实战,10分钟就能学会(ttf字体同理)

    woff字体反爬实战,10分钟就能学会(ttf字体同理)声明 本帖子仅是用于学习用途 请勿与用于而已破坏别人网站 本人不承担法律责任 来继续学爬虫呀 前言简单描述一下这种手段 html 源码的数字跟页面展示的数字是不一致的 当时就一脸黑人问号 嗯 经过分析 当前这种字体反爬机制是 通过获取指定链接的 woff 字体文件 然后根据 html 源码的数字去 woff 字体文件里面查找真正的数字 讲到底就是一个映射关系 查找字典 如 html 源码是 123 去 w

    2026年3月20日
    4
  • 大数据概况及Hadoop生态系统总结

    大数据概况及Hadoop生态系统总结觉得有帮助的,请多多支持博主,点赞关注哦~文章目录大数据概况及Hadoop生态系统1、大数据概念理解1.1、什么是大数据?1.2、大数据特征(4V)?1.3、大数据应用场景?1.4、大数据部门业务流程分析?1.5、大数据部门组织结构?1.6、数据仓库与数据库的区别?2、职业简介2.1、大数据工程师2.1.1、简介2.1.2、职责2.1.3、所需技能2.1.4、工作方向2.2、大数据分析师2.2….

    2022年5月19日
    42
  • android布局文件详解

    android布局文件详解本文是我从DeclaringLayout翻译而来的文章,如果有不当之处请指出DeclaringLayout布局决定了Activity所展现的样子,他决定了布局的结构和控制着你展现给用户所有的元素,你可以通过两种方式来声明你的布局.①在xml文件中定义UI元素:android提供了与View类及其子类相关的简单易懂的标签。   ②在运行时期定义你的布局,即

    2022年6月2日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号