目标:
- 了解 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