×
嵌入式开发 > 详情

嵌入式系统中Nand Flash写平衡的研究

发布时间:2020-07-07 发布时间:
|

随着嵌入式技术在电子信息等领域的快速发展,对数据存储设备容量和性能的要求也日益提高。Nand Flash在这一领域的应用越来越广泛,由于Nand Flash在写操作之前需要擦除整块且使用寿命有限,因此,如何更有效的管理好Nand Flash提高其使用寿命成为一个研究热点。就目前已经实现高效管理Nand Flash的研究成果来看,主要是在读写操作过程中引入控制机制来实现闪存各单元的均衡擦除,从而提高其使用寿命。其中ZLG/FFS是周立功公司开发的 Nand Flash通用驱动程序,虽然其很好的实现了均衡管理,但在追加文件内容时需要擦除整块,这与提高Nand Flash的使用寿命而尽量少擦除闪存块观点是相违背的,为此本文设计了一个新的FFS,其最突出的特点是尽可能保证在追加文件内容时不擦除闪存块,从而提高FLASH的使用寿命,而且根根据需要,还可改写读写接口以支持多种文件系统

1 FFS引入

由于Nand Flash的物理特性:出厂之前可能存在坏块以及操作过程中再次出现坏块,擦除次数有限,页读写块擦除,写之前须先擦除,存储器中的数据只能由1变0等,要想更有效的使用闪存,提高其使用寿命和利用率,擦除操作必须尽可能的少,并且,擦除操作必须尽可能的均匀分布在整个闪存上。为此需设计一个文件系统来高效的管理闪存,提高其使用寿命。在引言中已提过ZLG/FFS,本文是在基于ZLG/FFS的基础上来设计一个改进了的FFS,用FFS来封装底层的具体硬件操作,向上层文件系统提供一个与底层具体硬件操作无关的通用驱动接口,可以使上层文件系统更方便的访问闪存。

2 通用驱动程序FFS的设计

2.1 保存FFS硬件信息的结构体变量

根据Nand Flash 特性,需要一个变量ValidBlock来记录当前物理盘的有效块(可以保存数据的块)数;需要一个擦除次数表来记录每个物理块的擦除次数;需要一个物理块使用状况表来表示每个物理块是否使用以及是否是坏块,并且,由于上层提供给FFS是逻辑扇区,同时由于有坏块的存在,逻辑扇区与物理扇区之间不是简单的映射关系,因此需要一个逻辑块与物理块之间的映射表;最后还需一个指向硬件信息的结构体指针。FFS硬件信息的结构体如下:

const FlashDriver *Drive里包含了闪存的硬件参数(物理盘总块数、总扇区数、每块扇区数、每扇区字节数据)以及相应的闪存读写、擦除闪存和检验写入扇区数据函数。

2.2 FFS物理盘存储结构

2.2.1

物理盘数据结构

(1)系统区。由于坏块表是与Nand Flash存储器相对应的,它必须保存在芯片上。而Nand Flash的第0块比较特殊,它在出厂时一定是有效块,并且可以保证在擦除一定的次数后还是有效块。因此,将坏块表保存于第0块比较合适。此块不保存有效数据,称为系统区,其它块为数据区,真正保存坏块表的是第0块每扇区的前512字节,第0扇区的备用16字节是系统标志。

(2)数据区。在一般的文件系统里,存储数据用的每扇区字节数为512,在这里,用每扇区的备用16字节来存逻辑块索引、物理擦块除次数、物理状态等信息是比较合适的,该区域称为属性域,每扇区前512字节称为数据域。物理盘数据结构图

2.2.2系统标志、属性域数据结构和坏块表

(1) 系统标志域。该域值现设定为“NANDFFS”,占据备用数据区的前8个字节,不足部分和保留区域置为0。

(2)坏块表。根据Nand Flash的性质,可以将“1”写为“0”,所以将物理坏块表设置成位表,一位对应一个物理块的状况。如果某一块是坏块,则将第0块对应位置为0。位与物理块的对应关系为:第0扇区第0字节位0对应第0块,位1对应第1块,位2对应第3块,以此类推。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Diodes 推出单闸逻辑设备.助力ADAS 等车用产品应用