在Nand闪存中生成动态分区信息的方法和装置的制作方法

文档序号:6382517阅读:176来源:国知局
专利名称:在Nand闪存中生成动态分区信息的方法和装置的制作方法
技术领域
本发明实施例涉及计算机领域,更具体地,涉及在Nand闪存中生成动态分区信息的方法和装置。
背景技术
Nand闪存是一种能够进行读写、擦除的存储介质,其容量大、擦写速度快,且具有价格低廉等优势,被广泛应用在机顶盒、数码相机、手机、平板电脑等其他电子产品上,用来存放程序、参数、媒体数据等。而大多数产品采用的操作系统中,通过抽象设备访问层,提供了一种例如MTD (MemoryTechnology Device,内存技术设备)的系统,MTD为该操作系统提供了针对闪存访问的统一、抽象的接口。
对MTD设备的使用过程来说,进行分区是其中一个重要的步骤。所谓分区,就是在闪存上划分多个区域,划分后的区域简称为分区,每一个分区都有固定的物理的起始地址和分区大小,其中分区大小通常由每个分区所包括的块(block)的数量决定,每个块的大小为默认值。分区的起始地址和块数量在本文中也称为分区信息。这些分区信息是系统在启动和运行过程,闪存上读取数据和挂载文件系统等操作的重要参数。尽管Nand闪存容量大、价格便宜,但是本身Nand闪存存在一个固有缺陷出厂时就存在坏块,而且这些坏块随机分布。Nand闪存是以块为单位进行管理的。按照本领域的经验,坏块占整个Nand闪存的块数的比例小于一定值都是可以接收的,该定值例如为2%。因此,很可能在同一分区内会连续出现多个坏块。正是由于这个缺陷,给使用中带来一定的可靠性问题,尤其是对于系统中可能出现的大小较小的分区影响较大。比如用来保存一些参数数据的分区,其大小可能才共占2 4个block,当出现连续多个坏块时,该分区将无法正常写入参数,系统启动时则也无法读出参数。为此,现有技术中通过为Nand闪存的每个分区预留若干块以解决遇到坏块时引起的问题。分区信息的块数量中包括预留的块数量。当该Nand闪存的坏块数量较少时,则预留的块中较多没有用到,而现有技术中分区信息无法更改,造成了资源浪费。

发明内容
有鉴于此,本发明实施例提供一种在Nand闪存中生成动态分区信息的方法和装置,以解决为规避存储介质存在坏块随机分布的特性而为分区预留较多数量的块而引起的资源浪费的问题。第一方面,提供了一种在Nand闪存中生成动态分区信息的方法,包括解析原始分区信息,原始分区信息包括命名的η个分区和每个分区的原始块数量,其中η为正整数;根据η个分区的原始块数量和η个分区的第I个分区的原始起始地址,通过顺序检测各分区的块的状态,为η个分区生成动态分区信息,动态分区信息包括η个分区的动态起始地址和动态块数量;将动态分区信息存储到指定区域。在第一种可能的实现方式中,将η个分区的第I个分区的原始起始地址作为第I个分区的动态起始地址,从第I个分区开始直到第η个分区为止,依次检测第i个分区中的各个块的状态,其中i e U,n};当检测到当前块的状态为好,则将好块数量加I ;且当检测到当前块的状态为坏,则将坏块数量加I ;且当好块数量>第i个分区的原始块数量时,将好块数量与坏块数量的和作为第i个分区的动态块数量,且通过第i个分区的动态起始地址和第i个分区的动态块数量确定第i+Ι个分区的动态起始地址。结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,第i+Ι个分区的动态起始地址=第i个分区的动态起始地址+第i个分区的动态块数量X块大小。结合第一方面或第一方面的上述可能的实现方式,在第三种可能的实现方式中,当检测到当前块的状态为好时,则擦除当前块并写入数据;或当检测到当前块的状态为坏时,则跳过当前块且不写入数据。 结合第一方面或第一方面的上述可能的实现方式,在第四种可能的实现方式中,在解析原始分区信息前,生成原始分区信息。结合第一方面或第一方面的上述可能的实现方式,在第五种可能的实现方式中,在解析原始分区信息前,还在Nand闪存的第一个分区的第一个块中写入引导程序。第二方面,提供了一种在Nand闪存中生成分区信息的装置,包括解析单元、第一生成单元和存储单元解析单元,用于解析原始分区信息并发送到第一生成单元,原始分区信息包括命名的η个分区和每个分区的原始块数量,其中η为正整数;第一生成单元,用于根据解析单元解析的η个分区的原始块数量和η个分区的第I个分区的原始起始地址,通过顺序检测各分区的块的状态,为η个分区生成动态分区信息并发送到存储单元,动态分区信息包括η个分区的动态起始地址和动态块数量;存储单元,用于将第一生成单元生成的动态分区信息存储到指定区域。在第一种可能的实现方式中,第一生成单元包括检测模块、计数模块和确定模块检测模块,用于将η个分区的第I个分区的原始起始地址作为第I个分区的动态起始地址,从第I个分区开始直到第η个分区为止,依次检测第i个分区中的各个块的状态,其中i e {I, η};当检测模块检测到当前块的状态为好,则计数模块将好块数量加I ;且当检测模块检测到当前块的状态为坏,则计数模块将坏块数量加I ;且当好块数量>第i个分区的原始块数量时,确定模块将好块数量与坏块数量的和作为第i个分区的动态块数量,且通过第i个分区的动态起始地址和第i个分区的动态块数量确定第i+Ι个分区的动态起始地址。结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,确定模块具体用于下述公式以确定动态起始地址第i+ι个分区的动态起始地址=第i个分区的动态起始地址+第i个分区的动态块数量X块大小。结合第二方面或第二方面的上述可能的实现方式,在第三种可能的实现方式中,装置还包括擦除单元和烧写单元当检测模块检测到当前块的状态为好时,则擦除单元用于擦除当前块且烧写单元在当前块中写入数据;或当检测模块检测到当前块的状态为坏时,则擦除单元用于跳过当前块且烧写单元在当前块不写入数据。结合第二方面或第二方面的上述可能的实现方式,在第四种可能的实现方式中,装置还包括第二生成单元第二生成单元,用于在解析原始分区信息前,生成原始分区信肩、O
结合第二方面或第二方面的上述可能的实现方式,在第五种可能的实现方式中,装置还包括烧写单元烧写单元,用于在解析原始分区信息前,在Nand闪存的第一个分区的第一个块中写入引导程序。通过上述技术方案解析原始分区信息,针对每个分区中的每个块进行好坏检测,重新统计每个分区中块的数量以及起始地址,生成动态分区信息,从而可以动态改变分区信息,节省了存储介质的块资源,提高了存储介质的利用率。


为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是现有技术中一种在Nand闪存中生成分区信息的方法的示意图。图2是现有技术另一种在Nand闪存中生成分区信息的方法的示意图。图3是现有技术的又一种在Nand闪存中生成分区信息的方法的示意图。图4是本发明实施例的在Nand闪存中生成动态分区信息的方法的示意流程图。图5是本发明实施例的在Nand闪存中生成动态分区信息的方法的示意流程图。图6是本发明实施例的生成分区信息的方法的示意原理图。图7是本发明实施例的在Nand闪存中生成动态分区信息的装置的示意框图。图8是本发明实施例的在Nand闪存中生成动态分区信息的另一装置的示意框图。图9是本发明实施例的在Nand闪存中生成动态分区信息的另一装置的示意框图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。图1是现有技术中一种在Nand闪存中生成分区信息的方法的示意图。图1中示意了 4个分区,第一分区11、第二分区12、第三分区13和第四分区14,分别用于存储引导(boot)程序、系统核心(Linux Kernel)程序、根文件系统(Root file System)和参数数据(Parameters Data)。为说明方便,此处各分区以序号命名,但其中分区的命名可以采用其他方式,例如第一分区11也可以命名为引导分区、第四分区14也可以命名为参数分区等。一块Nand闪存包括若干块。块大小为出厂缺省值。以下将一个分区中包括的块数量简称为块数量。此处,假设I个块大小为128K字节。各分区的起始地址和大小如图1所示,分别为第一分区11的起始地址为0X0,大小为512K字节,块数量为2 ;第二分区121的起始地址为O X 80000,大小为4M字节,块数量为31250 ;第三分区13的起始地址为O X 480000,大小为40M字节,块数量为312500 ;第四分区14的起始地址为O X 2C80000,大小为512K字节,块数量为2。第一分区的起始地址是已知的,可选地,可以从0X0开始;当然,也可以从指定地址开始。这样,一个分区的块数量X块大小加上起始地址得到的字节数就是下一个分区的起始地址。本文中的分区信息至少包括分区的命名和块数量。通常情况,系统上电复位后,会启动第一分区11的引导程序,然后引导程序会从第二分区12中读取系统核心程序并运行,接着系统核心程序会根据分区信息,将第三分区13挂载引导文件系统,并启动相关应用,最后将第四分区14挂载,读取相关的参数数据。由此可见,分区信息对系统的启动和运行至关重要。一种现有技术,参考图2,不考虑Nand闪存的坏块随机分布的特性,仅仅根据分区 实际用到的块数量,以及考虑到为防止分区在使用过程中可能出现坏块而预留的块数量,而进行分区。图2是现有技术另一种在Nand闪存中生成分区信息的方法的示意图。其中,图2中示出第一分区21、第二分区22和第三分区23,以第二分区22为例进行说明。第二分区22,也可以称为参数分区,用于存储参数数据(Parameter Data)。通常情况下,参数分区的数据量比较小,假设只占2个块(共2X 128K字节=256K字节)。考虑使用过程,可能会因为长时间的擦写产生坏块,因此,规划参数分区时,多预留两个2个,这样参数分区一共是4个块。由于该分区的方法中没有考虑到Nand闪存的坏块的随机分布的特性,其缺陷非常明显。以第二分区22为例,如果该分区的4个块刚好都是坏块,那么就意味着该分区将无法写入数据,系统启动时,将无法正确读写数据,导致系统异常。而现有技术中,分区信息是不能更改的,那么就意味着这块Nand闪存将无法使用,只能作为不良品。但实际上这块Nand闪存是符合要求的,只不过出场时的坏块刚好集中到该分区而已。因此,按照图2的现有技术分区,实际上会造成物料的浪费。另一种现有技术,参考图3,在分区时,充分考虑Nand闪存的坏块随机分布的特性。即在规划分区时,除了考虑正常的数据存储区域外,还要考虑因为坏块的随机分布特性,而为每个分区预留一定数量的块;按照本领域通用的做法,最可靠的是为每个分区预留Nand闪存总块数的2%,以容量为512Μ字节的Nand闪存来说,需要为每个分区至少预留80个块。图3是现有技术的又一种在Nand闪存中生成分区信息的方法的示意图。图3中示意性包括了六个分区,第一分区31至第六分区36,其中每个分区中包括的预留区域分别为 31Α 至 36Α。如果分区较多,例如有较多的分区用于存储参数数据,按照图3的技术方案,必须要为每个分区至少都预留80个块,每个块大小为128Κ字节,假设如图3示例有6个分区,那么系统中的预留区域共有6Χ80Χ128Κ = 60Μ字节。这意味着为了归避Nand闪存坏块随机分布的特性带来的风险,而导致系统中会有更多的块被作为预留区。但是在实际应用中,大部分情况下,坏块并没有那么多,而且也不会恰好都分布在参数分区。从实际出发,像参数分区本身很小,只需预留较少数量的块即可。图3所示的分区方法会造成较多数量的块被浪费掉。为了避免上述现有技术中的各种资源浪费,本发明实施例提供了一种在Nand闪存中生成动态分区信息的方法和装置,可以动态地调整分区,生成新的分区信息。图4是本发明实施例的在Nand闪存中生成动态分区信息的方法40的示意流程图,包括以下内容。
S41,解析原始分区信息,原始分区信息包括命名的η个分区和每个所述分区的原始块数量,其中η为正整数。在Nand闪存中烧写数据时,都会参考一个原始分区信息。原始分区信息可以从其他设备处获取,也可以由执行本方法40的装置生成。从原始分区信息中,可以得知Nand闪存被划分成η个分区,η个分区的名字,以及每个分区所包括的原始块数量。η个分区中的第一个分区的原始起始地址已知,因此通过每个分区所包括的原始块数量可以确定每个分区的原始大小和原始起始地址。需要提取原始分区信息中的信息,例如分区的顺序、每个分区所包括的原始块数量等。S42,根据η个分区的原始块数量和η个分区的第I个分区的原始起始地址,通过顺序检测各分区的块的状态,为η个分区生成动态分区信息,动态分区信息包括η个分区的动态起始地址和动态块数量。本发明实施例中考虑到Nand闪存的坏块是可以检测到的。通过在构造分区的时候,能够根据分区时每个分区的原始大小,对每个分区内的块做状态检查,主动跳过坏块, 使得分区中好块数量能满足每个分区的原始大小,从而动态地调整分区,生成新的分区信息即动态分区信息。S43,将所述动态分区信息存储到指定区域。生成上述动态分区信息后,需存储该动态分区信息,可以存储到指定区域。系统启动后,将读取该动态分区信息,进行数据操作,包括读取或运行核心程序、挂载文件系统、读取参数等操作。在系统核心程序启动后,还要根据该分区进行文件系统的挂载等操作。因此,对该分区信息的保存至关重要。可选的,如果可以确定以后对上述动态分区信息不做更改,可以进行一次性编程(OTP, once time program)保护。本发明实施例解决了因存储介质存在坏块随机分布的特性,为归避该问题而为分区预留较多的块而引起的资源浪费问题,也包括未考虑该特性而进行分区导致的可靠性问题,通过解析原始分区信息,针对每个分区中的每个块进行好坏检测,重新统计每个分区中块的数量以及起始地址,生成动态分区信息,从而可以动态改变分区信息,节省了存储介质的块资源,提高了存储介质的利用率。图5是本发明实施例的在Nand闪存中生成动态分区信息的方法50的示意流程图,包括以下内容。可选的,本发明实施例的方法可以应用在生产Nand闪存的过程中。在工厂生产加工时,通常需要对Nand闪存进行烧片处理。在一个实施例中,通过本发明实施例的方法,首先要先规划出原始分区信息,然后将原始分区信息传递给烧片机,烧片机解析该原始分区信息后,动态计算各个分区的块数量,依次创建新的分区并擦除和烧录数据,并将产生的新的分区信息作为动态分区信息存储到事先规划好的地方,举例来说,可以存储到Nand闪存的第一个块的指定区域中,或者也可以存储到Nand闪存的属性区中。其中Nand闪存的属性区是独立于主存储区的一块特殊的储存区域,用于存放Nand闪存的配置信息,用户使用Nand闪存进行数据的擦写不会影响属性区中的内容。可选的,作为一种实施方式,也可以将动态分区信息存储到与Nand闪存结合使用的Nor闪存中。Nor闪存同样能够进行读写、擦除,其特点是读取速度块,可靠性好,但容量小,擦写速度慢,且价格昂贵。Nor闪存没有Nand闪存固有的存在坏块随机分布的特性,因此,两种闪存可以结合使用为用户提供更可靠的存储功能。在该实施方法中,Nor闪存可以用来存储Nand闪存的引导程序或动态分区信息,从而避免由于Nand闪存中的坏块随机分布特性导致无法工作的问题。在本领域的技术中,会确保出厂时Nand闪存的第一个块是好块。因此,通常也会将引导程序存储在第一个块的指定区域中。可选的,在本发明的另一个实施例中,如果对Nand闪存的数据的烧录采用的是以下方法先烧写引导程序,然后由引导程序统一进行烧写数据到Nand闪存中,则引导程序中的应用过程同样可以使用本发明实施例的方法。首先使引导程序获取到原始分区信息,包括但不限于实现原始分区信息到引导程序中,或通过串口或网络读取原始分区信息,弓丨导程序解析该原始分区信息,然后读取烧录数据,动态计算各个分区的块数量,并擦除和烧写数据到Nand闪存,最后将新生成的分区信息作为动态分区信息存储到事先规划好的地方,举例来说,可以存储到Nand闪存的第一个块的指定区域中,或者也可以存储到Nand闪存的属性区中,或者还可以存储到与Nand闪存结合使用的Nor闪存。 S51,生成原始分区信息。原始分区信息中定义了 Nand闪存中需要顺序生成的η个分区,每个分区的名字和每个分区中包括的块数量。其中,第i个分区为η个分区中的一个,η为正整数,i e {l,n}。通过每个分区中包括的块数量,以及块大小的缺省值,可以确定每个分区的大小。可选的,作为一种实现方式,可以由实施本发明实施例方法的装置生成原始分区信息。原始分区信息包括多个分区,可以通过分区表的形式呈现。分区表中的信息包括每个分区的名字,可以任意命名,以及每个分区包括的原始块数量。作为一种实现方法,原始分区表的表项信息可以抽象为如下表示
typedef struct {
char PartName[50];/*分区的名字*./
unsigned int ulLogBlockNum; /*分区中的块数,包括实际使用到
的块数,和为预防擦写过程产生坏块而预留的块数*/
]LogPartInfor,,S52,获取原始分区信息。S52为S51的可替代方式。可选的,也可以由其他设备生成原始分区信息,通过本发明实施例的装置实现原始分区信息到引导程序中,或通过串口或网络从其他设备处读取原始分区信息。S53,解析每一个分区的原始分区信息。首先从第一个分区开始顺序确定每一个分区的原始起始地址和原始块数量。举例来说,首先指定第一分区的原始起始地址为0X0,假设I个块大小为128K字节,原始块数量为2。从第一分区开始,逐块检测,根据块状态的好与坏,存储新的也就是动态块数量,以及新的即动态起始地址。其中,第一分区的原始起始地址和动态起始地址相同。接下来,依次检测每一个分区内的块状态,直至检测完最后一个分区。S54,检测块的状态,是否是好块。如果是好块,即S54的“是”,则执行S55。S55,擦除并烧录数据,将好块数量加I。如果是坏块,即S54的“否”,则执行S56S56,跳过该坏块,将坏块数量加I。 跳过(skip)该坏块,不做任何例如擦除或烧写的处理。S57,确定好块数量是否大于等于原始块数量。在该分区中,如果好块数量>原始块数量,即S57的“是”,则执行S58。S58,存储生成的动态分区信息。将好块数量与坏块数量的和作为该分区的动态块数量,将该分区的动态起始地址和动态块数量作为该分区的动态分区信息。且通过该分区的动态起始地址和该分区的动态块数量确定下一个分区的动态起始地址。将所有分区的动态分区信息统一存储在事先规划好的地方,例如可以存储到Nand闪存的第一个块的指定区域中,或者也可以存储到Nand闪存的属性区中,或者还可以存储到与Nand闪存结合使用的Nor闪存。其中,第一分区的原始起始地址和动态起始地址相同。根据块状态的检测,各分区的原始块数量和动态块数量可能是相同的也可能是不同的;第一个分区后的分区的原始起始地址和动态起始地址可能是相同的也可能是不同的。其中,第i+Ι个分区的动态起始地址=所述第i个分区的动态起始地址+第i个分区的动态块数量X块大小。动态分区信息的表项信息,可抽象为如下表示
typedef struct {
char PartName[50];/* 分区的名字 */
unsigned int ulPhyPartAddr; /*物理分区的起始地址*/
unsigned int ulPhyBlockNum; /*物理分区的块数,包括好块和坏块
数*/
} PhyPartInfor,图6是本发明实施例的生成分区信息的方法的示意原理图。举例来说,参考图6,原始分区信息中第二分区61的原始块数量为4,即需要有4个好块62。如果通过块状态检测、确定在保证第二分区61内至少包括4个好块62前,检测出3个坏块63,则重新确定的第二分区的动态块数量为好块数量与坏块数量之和,等于7。当重新确定了第二分区的动态块数量后,第三分区的动态起始地址从第二分区结尾开始,也就是第三分区的动态起始地址=第二分区的动态起始地址+第二分区的动态块数量X块大小。在该分区中,如果好块数量<原始块数量,即S57的“否”,则执行S59。
S59,检测下一个块的状态。本发明实施例通过获取并解析原始分区信息,针对每个分区中的每个块进行好坏检测,重新统计每个分区中块的数量以及起始地址,生成动态分区信息,从而可以动态改变分区信息,节省了存储介质的块资源,提高了存储介质的利用率。由于本发明实施例是动态产生分区信息,系统启动后才进行读取该分区信息,进行数据读取和分区挂载等。因此,只要有需要重新生成分区的时候,都可以采用该方法,因此,可选的,也适用于以下情况。在本发明一个实施例中,如果在后续使用过程中,由于Nand闪存的块在多次擦写并超过寿命后,会变成坏块,最终会导致因分区上的好块数量不足,而无法使用该分区,从而造成整个系统无法使用。但基于Nand闪存大容量的特点,还有足够的空 间使用,因此只需要通过重新调整分区即可正常工作。由此,通过本发明实施例,可以改变传统的静态分区,避免了分区所在的坏块较多时导致分区无法使用,或者预留的块数量过多造成分区浪费等问题。在本发明另一个实施例中,如果生成的分区信息不幸遭到破坏,需要通过引导程序进行升级系统时,需要进行重新分区。由此,通过本发明实施例,可以改变传统的静态分区,避免了分区信息丢失时导致Nand闪存无法正常使用,或者预留的块数量过多造成分区浪费等问题。以上两种情况,都可采用本发明实施例的方法,例如方法40或50,生成动态分区信息。图7是本发明实施例的在Nand闪存中生成动态分区信息的装置70的示意框图。装置70包括解析单元71、第一生成单元72和存储单元73。解析单元71解析原始分区信息并发送到所述第一生成单元,所述原始分区信息包括命名的η个分区和每个所述分区的原始块数量,其中η为正整数。第一生成单元72根据所述解析单元解析的所述η个分区的原始块数量和所述η个分区的第I个分区的原始起始地址,通过顺序检测各分区的块的状态,为所述η个分区生成动态分区信息并发送到所述存储单元,所述动态分区信息包括所述η个分区的动态起始地址和动态块数量。存储单元73将所述第一生成单元生成的所述动态分区信息存储到指定区域。存储单元73将所有分区的动态分区信息统一存储在事先规划好的地方,例如可以存储到Nand闪存的第一个块的指定区域中,或者也可以存储到Nand闪存的属性区中,或者还可以存储到与Nand闪存结合使用的Nor闪存。本发明实施例的装置解决了因存储介质存在坏块随机分布的特性,为归避该问题而为分区预留较多的块而引起的资源浪费问题,也包括未考虑该特性而进行分区导致的可靠性问题,通过解析原始分区信息,针对每个分区中的每个块进行好坏检测,重新统计每个分区中块的数量以及起始地址,生成动态分区信息,从而可以动态改变分区信息,节省了存储介质的块资源,提高了存储介质的利用率。图8是本发明实施例的在Nand闪存中生成动态分区信息的另一装置80的示意框图。装置80包括解析单元81、第一生成单元82、存储单元83、擦除单元84、烧写单元85、以及第二生成单元85或获取单元87。装置80的获取单元81、第一生成单元82和存储单元83与装置70的获取单元71第一生成单元72和存储单元73相同或相似。不同在于,装置80的第一生成单元82可以包括检测模块821、计数模块822和确定模块823,装置80还可以包括擦除单元84和烧写单元85,以及第二生成单元86或获取单元87。解析单元81解析原始分区信息并发送到所述第一生成单元,所述原始分区信息包括命名的η个分区和每个所述分区的原始块数量,其中η为正整数。第一生成单元82根据所述解析单元解析的所述η个分区的原始块数量和所述η个分区的第I个分区的原始起始地址,通过顺序检测各分区的块的状态,为所述η个分区生成动态分区信息并发送到所述存储单元,所述动态分区信息包括所述η个分区的动态起始地址和动态块数量。 存储单元83将所述第一生成单元生成的所述动态分区信息存储到指定区域。存储单元83将所有分区的动态分区信息统一存储在事先规划好的地方,例如可以存储到Nand闪存的第一个块的指定区域中,或者也可以存储到Nand闪存的属性区中,或者还可以存储到与Nand闪存结合使用的Nor闪存。可选的,作为不同的实施例,检测模块821将所述η个分区的第I个分区的原始起始地址作为第I个分区的动态起始地址,从第I个分区开始直到第η个分区为止,依次检测第i个分区中的各个块的状态,其中i e {I, η};当所述检测模块821检测到当前块的状态为好,则所述计数模块822将好块数量加I ;且当所述检测模块821检测到当前块的状态为坏,则所述计数模块822将坏块数量加I ;且当好块数量>所述第i个分区的原始块数量时,所述确定模块823将好块数量与坏块数量的和作为所述第i个分区的动态块数量,且通过所述第i个分区的动态起始地址和所述第i个分区的动态块数量确定第i+Ι个分区的动态起始地址。其中,确定模块823具体通过下述公式以确定动态起始地址。第i+Ι个分区的动态起始地址=所述第i个分区的动态起始地址+第i个分区的动态块数量X块大小。可选的,作为不同的实施例,当所述检测模块821检测到当前块的状态为好时,则所述擦除单元84用于擦除所述当前块且所述烧写单元85在所述当前块中写入数据;或当所述检测模块821检测到当前块的状态为坏时,则所述擦除单元84跳过所述当前块且所述烧写单元85在所述当前块不写入数据。可选的,作为不同的实施例,装置80还可以包括第二生成单元86。第二生成单元86生成原始分区信息。或者,可选的,装置80还可以包括获取单元87,获取单元87可以从其他设备获取所生成的原始分区信息。装置80可以生成或获取原始分区信息后,通过解析原始分区信息后,生成动态分区信息和烧录数据。可选的,作为不同的实施例,烧写单元85可以在解析原始分区信息前,在Nand闪存的第一分区的第一个块中写入引导程序。这样,装置80先烧写好引导程序,然后由引导程序统一进行烧写数据到Nand闪存中,则引导程序中的应用过程可以使用本发明实施例的方法40或50。本发明实施例的装置解决了因存储介质存在坏块随机分布的特性,为归避该问题而为分区预留较多的块而引起的资源浪费问题,也包括未考虑该特性而进行分区导致的可靠性问题,通过获取并解析原始分区信息,针对每个分区中的每个块进行好坏检测,重新统计每个分区中块的数量以及起始地址,生成动态分区信息,从而可以动态改变分区信息,节省了存储介质的块资源,提高了存储介质的利用率。此外,本发明实施例装置改变了传统的静态分区,避免了分区所在的坏块较多时导致分区无法使用、还避免了分区信息丢失时导致Nand闪存无法正常使用。图9是本发明实施例的在Nand闪存中生成动态分区信息的另一装置90的示意框图。装置90包括处理器91和存储器92。存储器92可以是包括RAM和ROM、或任何固定的存储介质、或可移动的存储介质,用于存储可以执行本发明实施例的程序或本发明实施例中待处理的数据。处理器91用于执行存储器92存储的本发明实施例的程序。处理器91可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明 实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器92,处理器91读取存储器92中的信息,结合其硬件完成上述方法的步骤。其中,处理器91解析原始分区信息,所述原始分区信息包括命名的η个分区和每个所述分区的原始块数量,其中η为正整数;根据解析的所述η个分区的原始块数量和所述η个分区的第I个分区的原始起始地址,通过顺序检测各分区的块的状态,为所述η个分区生成动态分区信息,所述动态分区信息包括所述η个分区的动态起始地址和动态块数量;将生成的所述动态分区信息存储到指定区域。其中,处理器91将所有分区的动态分区信息统一存储在事先规划好的地方,例如可以存储到Nand闪存的第一个块的指定区域中,或者也可以存储到Nand闪存的属性区中,或者还可以存储到与Nand闪存结合使用的Nor闪存。可选的,作为不同的实施例,处理器91将所述η个分区的第I个分区的原始起始地址作为第I个分区的动态起始地址,从第I个分区开始直到第η个分区为止,依次检测第i个分区中的各个块的状态,其中ie {I,η};当检测到当前块的状态为好,则将好块数量加I ;且当检测到当前块的状态为坏,则将坏块数量加I ;且当好块数量>所述第i个分区的原始块数量时,将好块数量与坏块数量的和作为所述第i个分区的动态块数量,且通过所述第i个分区的动态起始地址和所述第i个分区的动态块数量确定第i+Ι个分区的动态起始地址。可选的,作为不同的实施例,处理器91根据以下公式确定动态起始地址第i+Ι个分区的动态起始地址=所述第i个分区的动态起始地址+第i个分区的动态块数量X块大小。可选的,作为不同的实施例,处理器91当检测到当前块的状态为好时,则擦除所述当前块并写入数据;或当检测到当前块的状态为坏时,则跳过所述当前块且不写入数据。可选的,作为不同的实施例,处理器91生成所述原始分区信息。可选的,作为不同的实施例,处理器91在所述解析原始分区信息前,还在所述Nand闪存的第一个分区的第一个块中写入引导程序。本发明实施例解决了因存储介质存在坏块随机分布的特性,为归避该问题而为分区预留较多的块而引起的资源浪费问题,也包括未考虑该特性而进行分区导致的可靠性问题,通过解析原始分区信息,针对每个分区中的每个块进行好坏检测,重新统计每个分区中块的数量以及起始地址,生成动态分区信息,从而可以动态改变分区信息,节省了存储介质的块资源,提高了存储介质的利用率。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM, Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
权利要求
1.一种在Nand闪存中生成分区信息的方法,其特征在于,包括解析原始分区信息,所述原始分区信息包括命名的η个分区和每个所述分区的原始块数量,其中η为正整数;根据所述η个分区的原始块数量和所述η个分区的第I个分区的原始起始地址,通过顺序检测各分区的块的状态,为所述η个分区生成动态分区信息,所述动态分区信息包括所述η个分区的动态起始地址和动态块数量;将所述动态分区信息存储到指定区域。
2.根据权利要求1所述的方法,其特征在于,根据所述η个分区的原始块数量和所述η 个分区的第I个分区的原始起始地址,通过顺序检测各分区的块的状态,为所述η个分区生成动态分区信息,所述动态分区信息包括η个分区的动态起始地址和动态块数量,包括将所述η个分区的第I个分区的原始起始地址作为第I个分区的动态起始地址,从第 I个分区开始直到第η个分区为止,依次检测第i个分区中的各个块的状态,其中i e {I, η};当检测到当前块的状态为好,则将好块数量加I ;且当检测到当前块的状态为坏,则将坏块数量加I ;且当好块数量>所述第i个分区的原始块数量时,将好块数量与坏块数量的和作为所述第i个分区的动态块数量,且通过所述第i个分区的动态起始地址和所述第i个分区的动态块数量确定第i+Ι个分区的动态起始地址。
3.根据权利要求2所述的方法,其特征在于,所述通过所述第i个分区的动态起始地址和所述第i个分区的动态块数量确定第i+Ι个分区的动态起始地址,包括第i+Ι个分区的动态起始地址=所述第i个分区的动态起始地址+第i个分区的动态块数量X块大小。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述方法还包括当检测到当前块的状态为好时,则擦除所述当前块并写入数据;或当检测到当前块的状态为坏时,则跳过所述当前块且不写入数据。
5.根据权利要求1至4任一项所述的方法,其特征在于,在所述解析原始分区信息前, 所述方法还包括生成所述原始分区信息。
6.根据权利要求1至4任一项所述的方法,其特征在于,在所述解析原始分区信息前, 所述方法还包括在所述Nand闪存的第一个分区的第一个块中写入引导程序。
7.—种在Nand闪存中生成分区信息的装置,其特征在于,包括解析单元、第一生成单元和存储单元所述解析单元,用于解析原始分区信息并发送到所述第一生成单元,所述原始分区信息包括命名的η个分区和每个所述分区的原始块数量,其中η为正整数;所述第一生成单元,用于根据所述解析单元解析的所述η个分区的原始块数量和所述 η个分区的第I个分区的原始起始地址,通过顺序检测各分区的块的状态,为所述η个分区生成动态分区信息并发送到所述存储单元,所述动态分区信息包括所述η个分区的动态起始地址和动态块数量;所述存储单元,用于将所述第一生成单元生成的所述动态分区信息存储到指定区域。
8.根据权利要求7所述的装置,其特征在于,所述第一生成单元包括检测模块、计数模块和确定模块所述检测模块,用于将所述η个分区的第I个分区的原始起始地址作为第I个分区的动态起始地址,从第I个分区开始直到第η个分区为止,依次检测第i个分区中的各个块的状态,其中i e U,η};当所述检测模块检测到当前块的状态为好,则所述计数模块将好块数量加I ;且当所述检测模块检测到当前块的状态为坏,则所述计数模块将坏块数量加I ;且当好块数量>所述第i个分区的原始块数量时,所述确定模块将好块数量与坏块数量的和作为所述第i个分区的动态块数量,且通过所述第i个分区的动态起始地址和所述第 i个分区的动态块数量确定第i+Ι个分区的动态起始地址。
9.根据权利要求8所述的装置,其特征在于,所述确定模块具体用于下述公式以确定动态起始地址第i+Ι个分区的动态起始地址=所述第i个分区的动态起始地址+第i个分区的动态块数量X块大小。
10.根据权利要求7至9任一项所述的装置,其特征在于,所述装置还包括擦除单元和烧写单元当所述检测模块检测到当前块的状态为好时,则所述擦除单元用于擦除所述当前块且所述烧写单元在所述当前块中写入数据;或当所述检测模块检测到当前块的状态为坏时,则所述擦除单元用于跳过所述当前块且所述烧写单元在所述当前块不写入数据。
11.根据权利要求7至10任一项所述的装置,其特征在于,所述装置还包括第二生成单元所述第二生成单元,用于在所述解析原始分区信息前,生成所述原始分区信息。
12.根据权利要求7至10任一项所述的装置,其特征在于,所述装置还包括烧写单元 所述烧写单元,用于在解析原始分区信息前,在所述Nand闪存的第一个分区的第一个块中写入引导程序。
全文摘要
本发明实施例提供了一种Nand闪存中生成分区信息的方法和装置。方法包括解析原始分区信息,原始分区信息包括命名的n个分区和每个所述分区的原始块数量,其中n为正整数;根据n个分区的原始块数量和n个分区的第1个分区的原始起始地址,通过顺序检测各分区的块的状态,为n个分区生成动态分区信息,动态分区信息包括n个分区的动态起始地址和动态块数量;将动态分区信息存储到指定区域。对应该方法还包括装置。上述技术方案解决了因存储介质存在坏块随机分布的特性,为归避该问题而为分区预留较多的块而引起的资源浪费问题,也包括未考虑该特性而进行分区导致的可靠性问题,节省了块资源,提高了存储介质的利用率。
文档编号G06F12/06GK102999436SQ20121049515
公开日2013年3月27日 申请日期2012年11月28日 优先权日2012年11月28日
发明者秦绍天 申请人:华为终端有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1