坏块管理方法及系统与流程

文档序号:15686087发布日期:2018-10-16 21:04阅读:544来源:国知局

本发明涉及闪存坏块管理,具体地,涉及一种坏块管理方法及系统。



背景技术:

专利文献cn102789423b公开了一种四池闪存磨损均衡方法,采用多池存储管理结构,引入磨损率的概念,用于标识某块趋于坏块的程度,能够更客观的反应块的磨损。结合可擦写次数,能够更加有效地反映出块的磨损状况,所据以确定的磨损均衡方法能够更准确的实现与非闪存的磨损均衡。但该专利文献解决的是普通块的磨损,而且实现复杂,需要维护一张坏块表,不适合循环存储的应用。



技术实现要素:

针对现有技术中的缺陷,本发明的目的是提供一种坏块管理方法及系统。

根据本发明提供的坏块管理方法,包含存储步骤;所述存储步骤包含以下步骤:

第一坏块判断步骤:读取n号块最后一页冗余区第四字节,若读出0xff,判定n号块为坏块;若未读出0xff,对n号块进行擦除,执行编程步骤;其中,n号块是指闪存中的第n块;

编程步骤:对n号块进行编程;

第二坏块判断步骤:若对n号块的一页编程失败,判断该页是否为最后一页,若是,n号块擦除,ram读指针回退到n号块开始的位置,对n号块的编程结束;若否,ram读指针回退到n号块开始的位置,判定n号块为坏块。

优选地,还包含回放步骤,所述回放步骤包含:

第三坏块判断步骤:读取n号块最后一页冗余区第四字节,若读出0xff,判定n号块为坏块;若未读出0xff,执行读取步骤;

读取步骤:将n号块数据及校验码读入cpu;

第二换块步骤:当判定n号块为坏块,或n号块数据及校验码全部读入cpu后,对n+1号块进行回放。

优选地,所述编程步骤包含:

步骤s1:将ram中数据写入闪存主区缓冲区,ram读指针递增至相应位置;

步骤s2:将ecc校验数据0x55标记写入冗余区缓冲区相应位置;

步骤s3:在n号块的一页上编程,若对该页的编程成功,返回执行步骤s1;若页编程失败,执行第二坏块判断步骤。

优选地,存储步骤还包含第一换块步骤:当判定n号块为坏块或对n号块的编程结束时,对n+1号块进行存储。

优选地,还包含坏块标记步骤:检查闪存各个块的第一页或第二页的冗余区的第一个字节,若该字节为非0xff的值,在该字节所在块的最后一页冗余区的第四个字节写入0xaa。

本发明还提供了一种坏块管理系统,包含存储模块;所述存储模块包含以下模块:

第一坏块判断模块:读取n号块最后一页冗余区第四字节,若读出0xff,判定n号块为坏块;若未读出0xff,对n号块进行擦除,执行编程模块;其中,n号块是指闪存中的第n块;

编程模块:对n号块进行编程;

第二坏块判断模块:若对n号块的一页编程失败,判断该页是否为最后一页,若是,n号块擦除,ram读指针回退到n号块开始的位置,对n号块的编程结束;若否,ram读指针回退到n号块开始的位置,判定n号块为坏块。

优选地,还包含回放模块,所述回放模块包含:

第三坏块判断模块:读取n号块最后一页冗余区第四字节,若读出0xff,判定n号块为坏块;若未读出0xff,执行读取模块;

读取模块:将n号块数据及校验码读入cpu;

第二换块模块:当判定n号块为坏块,或n号块数据及校验码全部读入cpu后,对n+1号块进行回放。

优选地,所述编程模块包含:

模块r1:将ram中数据写入闪存主区缓冲区,ram读指针递增至相应位置;

模块r2:将ecc校验数据0x55标记写入冗余区缓冲区相应位置;

模块r3:在n号块的一页上编程,若对该页的编程成功,返回执行模块s1;若页编程失败,执行第二坏块判断模块。

优选地,存储模块还包含第一换块模块:当判定n号块为坏块或对n号块的编程结束时,对n+1号块进行存储。

优选地,还包含坏块标记模块:检查闪存各个块的第一页或第二页的冗余区的第一个字节,若该字节为非0xff的值,在该字节所在块的最后一页冗余区的第四个字节写入0xaa。

与现有技术相比,本发明具有如下的有益效果:

1、本发明逻辑简单,可由fpga实现;

2、本发明无需在内存中维护一张坏块表,在关机前写入fpga,避免了遇上意外断电导致坏块信息丢失的情况。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1为本发明存储步骤流程图;

图2为本发明读取步骤流程图;

图3为本发明坏块管理系统结构图。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明的保护范围。

对于不保证出厂无坏块的产品,出厂前厂商会在坏块的第一页的或第二页的冗余区的第一字节写入非0xff的值,本发明提供的坏块管理系统包含坏块标记模块,所述坏块标记模块检查闪存各个块的第一页或第二页的冗余区的第一个字节,若该字节为非0xff的值,在该字节所在块的最后一页冗余区的第四个字节写入0xaa。

如图3所示,实施例中,本发明提供的坏块管理系统还包含存储模块与回放模块。所述存储模块包含以下模块:第一坏块判断模块:读取n号块最后一页冗余区第四字节,若读出0xff,判定n号块为坏块;若未读出0xff,对n号块进行擦除,执行编程模块;其中,n号块是指闪存中的第n块;编程模块:对n号块进行编程;第二坏块判断模块:若对n号块的一页编程失败,判断该页是否为最后一页,若是,n号块擦除,ram读指针回退到n号块开始的位置,对n号块的编程结束;若否,ram读指针回退到n号块开始的位置,判定n号块为坏块。所述编程模块包含:模块r1:将ram中数据写入闪存主区缓冲区,ram读指针递增至相应位置;模块r2:将ecc校验数据0x55标记写入冗余区缓冲区相应位置;模块r3:在n号块的一页上编程,若对该页的编程成功,返回执行模块s1;若页编程失败,执行第二坏块判断模块。存储模块还包含第一换块模块:当判定n号块为坏块或对n号块的编程结束时,对n+1号块进行存储。

所述回放模块包含:第三坏块判断模块:读取n号块最后一页冗余区第四字节,若读出0xff,判定n号块为坏块;若未读出0xff,执行读取模块;读取模块:将n号块数据及校验码读入cpu;第二换块模块:当判定n号块为坏块,或n号块数据及校验码全部读入cpu后,对n+1号块进行回放。

所述坏块管理系统可以通过本发明提供的坏块管理方法的步骤流程实现,本领域技术人员可以将所述坏块管理方法理解为所述坏块管理系统的具体实施例。

本发明还提供了一种坏块管理方法,包含存储步骤与回放步骤,如图1所示,所述存储步骤包含以下步骤:第一坏块判断步骤:读取n号块最后一页冗余区第四字节,若读出0xff,判定n号块为坏块;若未读出0xff,对n号块进行擦除,执行编程步骤;其中,n号块是指闪存中的第n块;编程步骤:对n号块进行编程;第二坏块判断步骤:若对n号块的一页编程失败,判断该页是否为最后一页,若是,n号块擦除,ram读指针回退到n号块开始的位置,对n号块的编程结束;若否,ram读指针回退到n号块开始的位置,判定n号块为坏块。所述编程步骤包含:步骤s1:将ram中数据写入闪存主区缓冲区,ram读指针递增至相应位置;步骤s2:将ecc校验数据0x55标记写入冗余区缓冲区相应位置;步骤s3:在n号块的一页上编程,若对该页的编程成功,返回执行步骤s1;若页编程失败,执行第二坏块判断步骤。编程步骤还包含第一换块步骤:当判定n号块为坏块或对n号块的编程结束时,对n+1号块进行存储。如图2所示,所述回放步骤包含:第三坏块判断步骤:读取n号块最后一页冗余区第四字节,若读出0xff,判定n号块为坏块;若未读出0xff,执行读取步骤;读取步骤:将n号块数据及校验码读入cpu;第二换块步骤:当判定n号块为坏块,或n号块数据及校验码全部读入cpu后,对n+1号块进行回放。本发明提供的坏块管理方法还包含坏块标记步骤:检查闪存各个块的第一页或第二页的冗余区的第一个字节,若该字节为非0xff的值,在该字节所在块的最后一页冗余区的第四个字节写入0xaa。

本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1