NAND Flash 控制器

Posted tuhooo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 行(页)

 

待续。。。

 

以上是关于NAND Flash 控制器的主要内容,如果未能解决你的问题,请参考以下文章

Nand Flash 控制器工作原理

Tiny6410之NAND FLASH驱动

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

在 U-BOOT 对 Nand Flash 的支持

nor flash 和 nand flash 启动的区别

LCD实验学习笔记:NAND FLASH