资料介绍
目前市场上主要有两类,即NAND Flash(Not And Flash ROM)和NOR Flash(Not Or Flash ROM)。前者具有容量大、读写速度快、芯片面积小、单元密度高、擦除速度快、成本低等特点,更适合于大批量数据存储的嵌入式系统。如今Windows仍是桌面系统的主流,对FAT文件系统提供了天然的支持。然而就技术而言,FAT文件系统并不适合Flash,因为Flash设备并不是块设备[1],为了不破坏兼容性,并在NAND型闪存中应用FAT文件系统,国际上提出了闪存转译层FTL(Flash Translation Layer)的解决方案。
1 NAND Flash嵌入式存储系统结构
基于NAND Flash的存储系统的设计首先要解决坏块问题。由于NAND Flash自身存在固有坏块并在擦除和编程中又随机产生坏块,因此为了提高设备的可靠性应该将这两种操作分散在闪存不同的块中,以避免对某块的过度操作。
一般的基于NAND Flash嵌入式存储系统驱动结构分为三个层次:最底层是硬件操作接口,负责将主控芯片与Flash的控制管脚相连,这方面的固件主要实现对NAND Flash的物理操作;中间层是闪存转译层NFTL(NAND FTL),是封装在Flash驱动中的软件模块,其作用是将Flash模拟成与磁盘相类似的块设备,使对上层操作系统而言,NAND Flash就像普通磁盘一样被访问。这一层主要是封装一些特殊的复杂管理控制功能;最上面的层就是文件管理层,功能类似于普通磁盘上的通用文件系统,向上层提供标准的文件操作接口。基于NAND Flash的嵌入式系统存储结构原理图如图1所示。
根据以上两个方面,既要在驱动中实现坏块管理,又要进行块模拟,所以可用的方法有两种[2]:一是在上层文件系统中解决坏块问题,驱动层只实现本身的功能,文件系统为驱动层提供不变的接口,为上层应用程序提供可靠透明的服务。这种方法较简单,开发周期比较短,但只对特定应用的嵌入式系统有很强的适应性;第二种方法是在驱动层的NFTL中解决坏块问题,将不可靠的NAND Flash虚拟成可靠的存储设备,为上层文件系统提供可靠透明服务,这种方法较第一种更复杂,但是此法具有较强的可移植性并能彻底断绝与文件系统的联系,其他文件系统也同样适用。
本文是以Samsung的NAND Flash K9F2808U0C作为,设计了一种在NFTL上实现坏块管理并且实现连续数据读取的方法。
2 设计思想
2.1 闪存空间划分
K9F2808U0C是16 MB×8 bit的NAND Flash,共有1 024个Block,1 Block=16 KB,32 Page/Block,1 Page=528 B=(512 B+16 B),其中16 B为备用区,主要存放NAND Flash出厂坏块标记、ECC校验码以及用户自定义区。K9F2808U0C地址空间是24 bit,分三个周期依次送入NAND Flash的地址锁存器。本文使用的地址均为字节地址,数据类型为DWORD(4 B)。
将K9F2808U0C的存储空间划分为四个区:坏块映射表存放区、交换块区、坏块映射区和实际数据存放区。文件系统管理的空间就是实际的数据存放空间,如图2所示。
2.2 各分区宏定义
#define FLASH_BLOCK_SIZE 0x40000 //16 KB/Block
#define FLASH_PAGE_SIZE 0x200 //512 B/Page
#define FLASH_SECTOR_SIZE 0x200
//1Page=1Sector(only K9F2808U0C)
#define FLASH_BLOCKS_TABLE 3//坏块映射表存放块数
#define FLASH_SWAP_BLOCKS 5 //交换区的块数
#define FLASH_BAD_BLOCKS_REMAP 50
//坏簇重映区的块数
#define FLASH_MAX_ADDR 0xFFFFFF
//Flash最大字节地址
各分区首地址计算公式:
FLASH_BLOCK_TABLE_ADDR=FLASH_MAX_ADDR+
1-3*FLASH_BLOCK_SIZE);
FLASH_SWAP_BLOCK_ADDR=(FLASH_BLOCK_
TABLE_ADDR-5*FLASH_BLOCK_SIZE);
FLASH_BAD_BLOCK_REMAP_ADDR=(FLASH_SWAP_
BLOCK_ADDR-50*FLASH_BLOCK_SIZE);
FLASH_MAX_SECTOR_ADDR=(FLASH_MAX_ADDR-
3*FLASH_BLOCK_TABLE_ADDR-5*FLASH_SWAP_
BLOCK_ADDR-50*FLASH_BAD_BLOCK_REMAP_ADDR);
文件系统管理的最大字节地址。
任意地址Addr:
所在块地址:Addr&(~(FLASH_BLOCK_SIZE-1));
块内偏移地址:Addr&(FLASH_BLOCK_SIZE-1);
块中的页:(Addr&(FLASH_BLOCK_SIZE-1))/FLASH_
PAGE_SIZE;
2.3 分区功能设计
坏块映射区存放复制3份的坏块信息BBI(Bad Block Information)表。复制3份是预防系统突然断电,造成BBI表数据丢失。选择最后3个块,主要是出于固件设计。当Flash首次上电,固件程序通过读取Flash ID,获得设备的容量等信息,然后从Flash的最后一块中寻找BBI表,如果最后一块没有发现BBI表,则认为此块为坏块,继续前移寻找,依此类推,直到在预留的3个块中找到,并将其数据读入到在主控芯片为其开设的RAM中。如果还找不到,则固件认为该片Flash没有BBI表。
交换块区是对NAND Flash进行擦除或写操作时用来临时存放数据,共分配5个块。选取5块是出于可靠性设计。用一个数组FlashSwapBlockStatus[FLASH_SWAP_BLOCKS]记录交换块状态:有效还是已经损坏。初始化时,固件认为所有的交换块都是有效块,在随后对其进行擦除或写操作时,通过读Flash状态寄存器判断该交换块的真实状态,并记录在数组中。交换块的管理围绕固件请求返回当前可用交换块地址或当前正在使用的交换块地址,并判断标记当前使用的交换块状态为坏。
坏块映射区是当主机向数据区写数据时,检测到当前块(数据区)为坏块时,将数据写到坏块映射区中的相应好块中,并且将这两个块的块地址记录到BBI表中,以后主机若要对当前块(数据区)访问时,只需读BBI表就可以找到相应映射块,从而代替坏块的访问。这样就使文件系统所见逻辑块地址LBA(Logical Block Address)变成连续的,但实际上物理块地址PBA(Physical Block Address)可能并不连续。上述方法就是坏块管理的精髓。出于保守设计本文共选50块作为重映块。用数组FlashRemapBlockStatus[FLASH_BAD_BLOCKS_REMAP]标识坏块映射区的状态:未使用、已使用还是已经损坏。初始化时认为坏块映射区中所有块都是好块。
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- Nand Flash文件系统解决方案 9次下载
- NAND Flash的系统构建资料下载 11次下载
- 嵌入式监控系统硬件结构资料下载 13次下载
- 嵌入式系统设计与物联网开发资料下载 7次下载
- NAND Flash在嵌入式Linux平台下的驱动实现 2次下载
- NAND Flash存储系统解决方案 0次下载
- FLASH的特点和结构与基于FLASH介质嵌入式存储的设计 6次下载
- 嵌入式Linux下NAND存储系统的设计 76次下载
- 基于EVMS的带外虚拟存储系统结构 38次下载
- 嵌入式平台上NAND FLASH的驱动实现 19次下载
- NAND Flash在MSP430嵌入式系统中的应用 21次下载
- 嵌入式系统中Nand Flash写平衡的研究 17次下载
- 嵌入式系统中的Flash设计与分析 12次下载
- 嵌入式系统中的Flash 存储管理 15次下载
- 嵌入式Linux系统下NOR Flash的配置和使用 30次下载
- 一文了解SPI NAND Flash和SPI NOR Flash的区别 4899次阅读
- 基于S3C4510B微处理器和uClinux实现存储系统的设计 696次阅读
- 一文解析NAND闪存存储系统中实现低故障率不仅需要强大的ECC代码 3509次阅读
- NAND FLASH驱动程序实现的三个具体方面分析 2718次阅读
- Memblaze保障存储系统服务质量的核心技术及研发理念进行了解读 3272次阅读
- 基于单机存储系统故障恢复 777次阅读
- 多种嵌入式文件系统介绍:基于FLASH的文件系统 1w次阅读
- 利用Micron可管理NAND 适用嵌入式大容量存储 715次阅读
- DRAM、NAND FLASH、NOR FLASH三大存储器分析 10.9w次阅读
- VDK与嵌入式文件系统的投入使用 1668次阅读
- 基于Nand Flash 存储技术的嵌入式linux 系统设计 1366次阅读
- 基于存储系统SILT基本结构的详细解析 5297次阅读
- 基于NAND Flash的闪存转译层设计 1946次阅读
- 图像采集存储系统选择应考虑的几大要素 2112次阅读
- 嵌入式系统结构与协同性探讨 1283次阅读
下载排行
本周
- 1储能电源市场分析
- 7.99 MB | 11次下载 | 免费
- 2储能电源市场分析报告
- 2.61 MB | 7次下载 | 免费
- 3labview文档教程资料(一)
- 24.29 MB | 2次下载 | 免费
- 4第三代SiC功率半导体动态可靠性测试系统介绍
- 8.02 MB | 1次下载 | 免费
- 5用于便携可穿戴设备的RX8130CE
- 277.67 KB | 1次下载 | 免费
- 6英集芯IP5353 QFN32 规格书pdf
- 2.70 MB | 1次下载 | 免费
- 742V、5A SIMPLE SWITCHER® 特性降压稳压器LM22677/-Q1数据表
- 1.54MB | 1次下载 | 免费
- 83.5V 至 36V 输入、1V 至 20V 输出、6A 电源模块LMZM33606数据表
- 1.97MB | 1次下载 | 免费
本月
- 1STM32国内外发展现状
- 1.15 MB | 16次下载 | 免费
- 2传感芯片选型指南
- 3.60 MB | 12次下载 | 免费
- 3储能电源市场分析
- 7.99 MB | 11次下载 | 免费
- 4ATmega8芯片中文手册
- 2.45 MB | 8次下载 | 1 积分
- 5TDK电容器产品指南
- 11.88 MB | 7次下载 | 1 积分
- 62A多电池高效开关充电器AN_SY6912A中文资料规格书
- 1.43 MB | 7次下载 | 免费
- 7储能电源市场分析报告
- 2.61 MB | 7次下载 | 免费
- 816A 输出电流,高可靠、高效率 同步降压转换器PCD3201产品手册
- 0.47 MB | 6次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935091次下载 | 免费
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420050次下载 | 免费
- 3Altium DXP2002下载入口
- 未知 | 233068次下载 | 免费
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191317次下载 | 免费
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183316次下载 | 免费
- 6labview8.5下载
- 未知 | 81567次下载 | 免费
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73789次下载 | 免费
- 8NI LabVIEW中实现3D视觉的工具和技术
- 未知 | 70088次下载 | 免费
评论
查看更多