NAND Flash 控制器

目标:

  • 了解 NAND Flash 芯片的接口
  • 掌握通过 NAND Flash 控制器访问 NAND Flash 的方法

NAND Flash 介绍和 NAND Flash 控制器使用

NAND Flash 在嵌入式系统中的地位与 PC 上的硬盘类似,用于保存:

  • 系统运行所必须的操作系统
  • 应用程序
  • 用户数据
  • 运行过程中产生的各类数据

Flash 介绍

常用的 Flash 类型有 NOR Flash 和 NAND Flash 两种。

两者的差别如下:

NOR Flash 支持 XIP,即代码可以直接在 NOR Flash 上执行,无需复制到内存中。

这是由于 NOR Flash 的接口与 RAM 完全相同,可以随机访问任意地址的数据。

在 NOR Flash 上进行读操作的效率非常高,但是曹处和写操作的效率很低;另外,NOR Flash 的容量一般比较小。

NAND Flash 进行擦除和写操作的效率更高,并且容量更大。

一般而言,NOR Flash 用于存储程序,NAND Flash 用于存储数据。

基于 NAND Flash 的设备通常也要搭配 NOR Flash 以存储程序。

Flash 存储器件由 擦除单元(也成为块)组成,当要写入某个块时,需要确保这个块已经被擦除。

NOR Flash 的块大小范围为 64KB~128KB;NAND Flash 的块大小范围为 8KB~64KB,擦/写一个 NOR Flash 块需要 4s,而擦写一个 NAND Flash 块仅需 2ms。

NOR Flash 的块太大,不仅增加了擦写时间,而且对于给定的写操作,NOR Flash 也需要更多的擦除操作——特别是小文件,比如一个文件只有 1KB,但是为了保存它却需要擦除大小为 64KB~128KB 的 NOR Flash 块。

NOR Flash 的接口与 RAM 完全相同,可以随意访问任意地址的数据。

而 NAND Flash 的接口仅仅包含几个 I/O 引脚,需要串行地访问。NAND Flash 一般以 512 字节为单位进行读写。

这使得 NOR Flash 适合于运行程序,而 NAND Flash 更适合于存储数据。

容量相同的情况下,NAND Flash 的体积更小,对于空间有严格要求的系统,NAND Flash 可以节省更多的空间。

市场上 NOR Flash 的容量通常为 1MB~4MB(也有 32MB 的 NOR Flash),NAND Flash 的容量为 8MB~512MB。

容量差别也使得 NOR Flash 多用于存储程序,NAND Flash 多用于存储数据。

对于 Flash 存储器件的可靠性需要考虑 3 点:位反转、坏块和可擦除次数。

所有 Flash 器件都遭遇位反转的问题:由于 Flash 固有的电器特性,在读写数据的过程中,偶然会产生一位或几位数据错误(这种概率很低),而 NAND Flash 出的概率远大于 NOR Flash。

当位反转发生在关键的代码、数据上时,有可能导致系统崩溃。

当仅仅是报告位反转,重新读取即可;如果确实发生了位反转,则必须有相应的错误检测/恢复措施。

在 NAND Flash 上发生位反转的概率更高,推荐使用 EDC/ECC 进行错误检测和恢复。NAND Flash 上面会有坏块随机分布,在使用前需要将坏块扫描出来,确保不再使用它们,否则会使产品含有严重的故障。NAND Flash 每块的可擦除次数通常在 100000 次左右,是 NOR Flash 的 10 倍。

另外,因为 NAND Flash 的块大小通常是 NOR Flash 的 1/8,所以 NAND Flash 的寿命远远超过 NOR Flash。

嵌入式 Linux 对 NOR、NAND Flash 的软件支持都很成熟。

在 NOR Flash 上常使用 jffs2 文件系统,而在 NAND Flash 上常用 yaffs 文件系统。

在更底层,有 MTD 驱动程序实现对它们的读、写、擦除操作,它也实现了 EDC/ECC 校验。

我擦,概念讲了一堆啊!!!

NAND Flash 的物理结构

以 NAND Flash K9F1208U0M 为例,K9F1208U0M 是三星公司生产的容量为 64MB 的  NAND Flash,常用于手持设备等消费电子产品。

它的封装及外部引脚如上图。

K9F1208U0M 的功能结构图如下图所示:

K9F1208U0M 的内部结构分为 10 个功能部件。

  • X-Buffers Latche & Decoders:用于行地址
  • Y-Buffers Latche & Decoders:用于列地址
  • Command Register:用于命令字
  • Control Logic & High Voltage Generator:控制逻辑及产生 Flash 所需高压。
  • NAND Flash Array:存储部件。
  • Page Register & S/A:页寄存器,当读、写某页时,会将数据先读入/写入此寄存器,大小为 528 字节。
  • Y-Gating
  • I/O Buffers & Latches
  • Global Buffers
  • Output Driver

NAND Flash 存储单元组织结构如下图:

K9F1208U0M 容量为 528 Mbit,分 131072 行(页)

待续。。。

原文地址:https://www.cnblogs.com/tuhooo/p/11186819.html

时间: 2024-09-30 00:59:40

NAND Flash 控制器的相关文章

NAND FLASH控制器

一.nand flash访问原理 地址空间概念 nand的编址 nand命令  命令,地址,数据 使用S3C2440的nand flash控制器访问nand flash 前几个编译出来的文件都小于4k,读出来放到SDRAM中去 SDRAM.dm9000地址-->2440地址 nand 没有地址总线 片内内存:SDRAM:网卡:寄存器  都是CPU统一编址 写地址,读数据   连续读一页                           只进行了读操作,擦除,oob访问都没有 二.源码分析

第8章 NAND FLASH控制器

8.1 NAND Flash介绍和NAND Flash控制器使用 NAND Flash在嵌入式系统中的地位与PC上的硬盘类似 NAND Flash在掉电后仍可保存 8.1.1 Flash介绍 有NOR Flash和NAND Flash两种 NOR Flash与SDRAM的接口完全相同,可以随机访问任意地址的数据 NOR Flash的块大小是64kb~128kb,NAND的块大小是8kb~64kb NAND Flash一般以512字节为单位进行读写 Flash存储期间的可靠性主要考虑3点:位翻转.

Nand Flash 控制器工作原理

对 Nand Flash 存储芯片进行操作, 必须通过 Nand Flash 控制器的专用寄存器才能完成.所以,不能对 Nand Flash 进行总线操作.而 Nand Flash 的写操作也必须块方式进行.对 Nand Flash 的读操作可以按字节读取.   Nand Flash 控制器特性 1. 支持对 Nand Flash 芯片的读.检验.编程控制 2. 如果支持从 Nand Flash 启动, 在每次重启后自动将前 Nand Flash 的前 4KB 数据搬运到 ARM 的内部 RAM

Nand Flash 控制器中的硬件 ECC 介绍

ECC 产生方法 ECC 是用于对存储器之间传送数据正确进行校验的一种算法,分硬件 ECC 和软件 ECC 算法两种,在 S3C2410 的 Nand Flash 控制器中实现了由硬件电路(ECC 生成器)实现的硬件 ECC. ECC 生成器工作过程 当写入数据到 Nand flash 存储空间时, ECC 生成器会在写入数据完毕后自动生成 ECC 码,将其放入到 ECC0-ECC2.当读出数据时 Nand Flash 同样会在读数据完毕后,自动生成 ECC 码将其放到 ECC0-ECC2 当

u-boot分析(九)----nand flash初始化|nand flash读写分析

u-boot分析(九) 上篇博文我们按照210的启动流程,分析到了初始化串口,由于接下来的取消存储保护不是很重要,所以我们今天按照u-boot的启动流程对nand flash初始化进行分析. 今天我们会用到的文档: 1.        2440芯片手册:http://download.csdn.net/detail/wrjvszq/8358949 2.        6410芯片手册:http://download.csdn.net/detail/wrjvszq/8358965 3.      

Nand Flash原理(二)

K9F2G08U0B的存储阵列 图 2-1 K9F2G08U0B的存储阵列 由图2-1,我们可以知道:K9F2G08U0B的一页为(2K+64)字节(2K 表示的是 main 区容量,64表示的是 spare 区容量),它的一块为 64 页,而整个设备包括了2048个块.这样算下来一共有 2112M 位容量,如果只算 main 区容量则有256M 字节(即 256M×8 位). 要实现用 8 个 IO 口来要访问这么大的容量,如图 2-1 所示:K9F2G08U0A 规定了用 5 个周期来实现.

NAND Flash操作技术详解

NAND Flash是构成固态存储的基本存储单元其采用IO的接口方式与控制器相连.控制器对NAND Flash进行操作时需要通过命令交互的方式对NAND Flash进行操作.下面对NAND Flash的操作进行解析可以发现在研发FTL的时候可以充分发掘NAND Flash提供的操作命令来优化读写性能.分析介绍的NAND Flash以Micron提供的MT29F16G08AA为蓝本.该芯片能够提供16Gb 的存储容量具体性能指标如下所示 Organization –     Page size:

LCD实验学习笔记(七):NAND FLASH

s3c2440 CPU内置NAND FLASH控制器.相关寄存大器起始地址为0x4e000000. 通过设置NFCONF寄存器,设置NAND FLASH 时序. 通过设置NFCONT寄存器,使能NAND FLASH.初始化ECC等. 代码: #define GSTATUS1 (*(volatile unsigned int *)0x560000B0) //读此寄存器可以知道CPU芯片型号#define BUSY 1 #define NAND_SECTOR_SIZE_LP 2048 //大页每页2

怎么看时序图--nand flash的读操作详解(转载)

出处:http://blog.chinaunix.net/uid-28852942-id-3992727.html这篇文章不是介绍 nand flash的物理结构和关于nand flash的一些基本知识的.你需要至少了解 你手上的 nand flash的物理结构和一些诸如读写命令 操作的大概印象,你至少也需要看过 s3c2440中关于nand flash控制寄存器的说明. 由于本人也没有专门学过这方面的知识,下面的介绍也是经验之谈. 这里 我用的 K9F2G08-SCB0 这款nand flas