一种用于nandflash的系统掉电保护实现方法

文档序号:9826167阅读:885来源:国知局
一种用于nand flash的系统掉电保护实现方法
【技术领域】
[0001 ]本发明涉及数据存储领域,特别是涉及一种基于NAND FLASH的数据存储系统掉电保护方法。
【背景技术】
[0002]NAND FLASH芯片的结构一般分为两级:块和页。块是NAND FLASH内部的基本单元,由于NAND FLASH自身结构的特点,芯片中往往存在坏块而导致物理地址不连续。为了有效使用NAND FLASH内部的存储空间,以NAND FLASH为载体的存储设备一般会采用FTL(FlashTranslat1n Layer)算法。FTL算法通过对逻辑地址与物理地址的映射,达到对系统中坏块的管理。FTL内部大量的地址映射信息是整个系统正常工作的基础。当系统意外掉电时,若系统内部正在进行地址映射信息的更新操作,则会破坏映射信息数据的完整性,导致系统不能工作或数据丢失。Flash为闪存。
[0003]在现有技术中系统一般采用备用电源的设计方案,系统正常工作时使用主电源,当系统检测到异常断电时自动切换为备用电源,从而保障系统完成关键数据的保存。但这种解决方案增加了系统的硬件成本和复杂度。同时由于备用电源也会产生意外失效的问题,仍然存在破坏数据完整性的可能。因此这种方案只能降低意外掉电而导致数据破坏的几率,并不能从根本上保证系统关键数据的完整性。

【发明内容】

[0004]本发明要解决的技术问题是:克服现有技术的不足之处,提供一种用于NANDFLASH的系统掉电保护实现方法,保证了系统掉电时系统关键数据的完整性,克服了传统技术中硬件设计成本和复杂度高的缺点。
[0005]本发明所采用的技术方案是:
[0006]—种用于NAND FLASH的系统掉电保护实现方法,包括以下步骤:
[0007]—、将NAND FLASH的所有数据块分为七个部分,分别为一级表区、一级表备份区、二级表区、二级表备份区、三级表区、三级表备份区和其他数据块区;在一级表区选取用于存储一级表的数据块作为一级表块,在一级表备份区选取用于存储一级表备份的数据块作为一级表备份块,在二级表区选取用于存储二级表的数据块作为二级表块,在二级表备份区选取用于存储二级表备份的数据块作为二级表备份块,在三级表区选取用于存储三级表的数据块作为三级表块,在三级表备份区选取用于存储三级表备份的数据块作为三级表备份块;
[0008]所述一级表用于存储一级表区的块地址和页地址、一级表备份区的块地址和页地址以及二级表区和二级表备份区的块地址;所述二级表用于存储三级表区和三级表备份区的块地址;所述三级表用于存储二级表区和二级表备份区的页地址、三级表区和三级表备份区的页地址及其他数据块区的块地址和页地址;
[0009]二、加载一级表、二级表和三级表;
[0010]三、当NAND Flash存储的信息发生改变时,对三级表、二级表或一级表进行更新,包括以下步骤:
[0011]I)更新三级表:将改变后的三级表记载到内存中的待写入三级表中,并将待写入三级表中的更新次数加一;若原三级表块中存在空闲页,则直接将待写入三级表写入空闲页中成为新三级表,转步骤3);若原三级表块中不存在空闲页,则在原二级表所指定的三级表区的块地址范围内重新分配一个除原三级表块的新的块,并将该新分配的块擦除;
[0012]若新分配的块擦除成功则将待写入三级表写入新分配的块中成为新三级表,该块作为新三级表块,将原三级表块擦除,转步骤3);若新分配的块擦除失败,则在其他数据块区中分配一个替换块替换该块,并在原二级表所指定的三级表区的块地址范围内再分配一个新的块,直到新分配的块擦除成功后,将待写入三级表写入新分配的块中成为新三级表,该块作为新三级表块,将原三级表块擦除,并将变化后的三级表区的块地址记载到内存中的待写入二级表,同时将待写入二级表中的更新次数加一;
[0013]2)若二级表存储的信息发生变化,则更新二级表,否则转步骤4),更新二级表的方法为:
[0014]若原二级表块中存在空闲页,则直接将待写入二级表写入空闲页中成为新二级表,转步骤I);
[0015]若二级表块中不存在空闲页且二级表区有大于一个的块,则在原一级表所指定的二级表区的块地址范围内分配一个除原二级表块的新的块,并将该新分配的块擦除;若新分配的块擦除成功则将待写入二级表写入新分配的块中成为新二级表,该块作为新二级表块,将原二级表块擦除,转步骤I);若新分配的块擦除失败,则在其他数据块区中分配一个替换块替换该块,并在原一级表所指定的二级表区的块地址范围内再分配一个新的块,直到新分配的块擦除成功后,将待写入二级表写入新分配的块中成为新二级表,该块作为新二级表块,将原二级表块擦除,并将变化后的二级表区的块地址记载到内存中的待写入一级表,同时将待写入一级表中的更新次数加一,转步骤I);
[0016]若二级表块中不存在空闲页且二级表区只有一个块,则在其他数据块区分配一个新的块,并将该新分配的块擦除;若新分配的擦除成功则将待写入二级表写入新分配的块中成为新二级表,该块作为新二级表块,将原二级表块擦除,并将变化后的二级表区的块地址记载到内存中的待写入一级表,同时将待写入一级表中的更新次数加一,转步骤I);若新分配的块擦除失败,则继续在其他数据块区中分配一个新的块,直到新分配的块擦除成功后,将待写入二级表写入新分配的块中成为新二级表,该块作为新二级表块,将原二级表块擦除,并将变化后的二级表区的块地址记载到内存中的待写入一级表,同时将待写入一级表中的更新次数加一,转步骤I);
[0017]3)若一级表存储的信息发生变化时,则更新一级表,否则转步骤4),更新一级表的方法为:
[0018]若原一级表块中存在空闲页,则直接将待写入一级表写入空闲页中成为新一级表,转步骤4);若原一级表块中不存在空闲页,贝Ij在原一级表中所指定的一级表区的块地址范围内重新分配一个除原一级表块的新的块,并将该新分配的块擦除;
[0019]若新分配的块擦除成功则将待写入一级表写入新分配的块中成为新一级表,该块作为新一级表块,将原一级表块擦除,转步骤4);若新分配的块擦除失败,则将擦除失败的块在一级表区内剔除,同时在原一级表中所指定的一级表区的块地址范围内重新分配一个新的块,直到新分配的块擦除成功后,将改变后的一级表区的块地址记载到待写入一级表中,将待写入一级表写入新分配的块中成为新一级表,将该块作为新一级表块,将原一级表块擦除,转步骤4);
[0020]4)若此前更新过二级表而没有更新过二级表备份时,则更新二级表备份,否则转步骤5),更新二级表备份的方法为:
[0021]若二级表备份块中存在空闲页,则直接将待写入二级表写入空闲页成为新二级表备份,转步骤I);若二级表备份块中不存在空闲页且二级表备份区有大于一个的块,则并在原一级表所指定的二级表备份区的块地址范围内再分配一个除原二级表备份块的新的块,并将该新分配的块擦除;若新分配的擦除成功则将待写入二级表写入新分配的块中成为新二级表备份,该块作为新二级表备份块,将原二级表备份块擦除,转步骤I);若新分配的块擦除失败,则在其他数据块区中分配一个替换块替换该块,并在原一级表所指定的二级表备份区的块地址范围内再分配一个新的块,直到新分配的块擦除成功后,将待写入二级表写入新分配的块中成为新二级备份表,该块作为新二级表备份块,将原二级表备份块擦除,并将变化后的二级表备份区的块地址记载到内存中的待写入一级表,同时将待写入一级表中的更新次数加一,转步骤I);
[0022]若二级表备份块中不存在空闲页且二级表备份区只有一个块,则在其他数据块区分配一个新的块,并将该新分配的块擦除;若新分配的擦除成功则将待写入二级表写入新分配的块中成为新二级表备份,该块作为新二级表备份块,将原二级表备份块擦除,并将变化后的二级表备份区的块地址记载到内存中的待写入一级表,同时将待写入一级表中的更新次数加一,转步骤I);若新分配的块擦除失败,则继续在其他数据块区中分配一个新的块,直到新分配的块擦除成功后,将待写入二级表写入新分配的块中成为新二级表备份,该块作为新二级表备份块,将原二级表备份块擦除,并将变化后的二级表备份区的块地址记载到内存中的待写入一级表,同时将待写入一级表中的更新次数加一,转步骤I);
[0023]5)若此前更新过一级表而没有更新过一级表备份,则更新一级表备份,否则更新结束,更新一级表备份的方法为:
[0024]若原一级表备份块中存在空闲页,则直接将待写入一级表写入空闲页,更新结束;若原一级表备份块中不存在空闲页,则在待写入一级表中所指定的一级表备份区的块地址范围内重新分配一个除原一级表备份块的新的块并将该块擦除;
[0025]若新分配的块擦除成功则将待写入一级表写入新分配的块中成为新一级表备份,该块作为新一级表备份块,将原一级表
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1