一种管理坏列地址的方法及其装置
技术领域
本发明属于集成电路存储技术领域,尤其涉及一种管理坏列地址的方法及其装置。
背景技术
非线性闪存Nand Flash是闪存(Flash Memory)的一种,因其具有擦写速度快、储存容量大、单位成本低的优点,得到广泛应用,例如,嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等。
Nand Flash在物理上分为块(Block)、页(Page)、列(Column)或物理单元(Cell),Nand Flash由若干块组成,而其中每个块由若干个页组成,而其中每个页则由若干列(或物理单元)组成。不同类型的Flash,其一个列(物理单元)可以存储1个bit或2个bit,甚至更多个bit的数据。
其中,Nand Flash的读写操作单位是页,擦除操作则是以块为单位,并且NandFlash的物理单元在写操作(Program)时只能由1变为0,所以写过的单元也只能通过擦除(Erase)的方法来恢复。Nand Flash的列经过一定的擦除和写入操作之后,1或0的状态变得不稳定,存储数据出现错误,这些列就认为已经损坏。
由于一个页中的若干个列损坏时,该页还有很多列可以用于存储,因此需要记录坏列信息,以避免在坏列中存储数据。
现有技术中,通常通过存储坏列地址记录坏列信息。如果Nand Flash中每多一个坏列,需要多存储一个16比特bit的坏列地址,所以N个坏列地址就需要N*16bit的存储空间。占用的坏列信息存储空间。当坏列越多,占用的存储空间越多,降低内存利用率。
发明内容
本发明提供一种管理坏列地址的方法及其装置,能够节省存储环列信息所占用的存储空间,提高其内存利用率。
为解决上述问题,本发明第一方面提供一种管理坏列地址的方法,所述管理坏列地址的方法包括:
获取非线性闪存中所有列地址对应的列地址标识;其中,所述列地址标识用于表示所述列地址对应的存储空间是否损坏;所述列地址标识为单个列地址标识顺序组合后形成的列地址标识序列;
根据所述列地址标识确定与所述列地址标识匹配的目标编码方式;通过所述目标编码方式对所述列地址标识进行编码;
当第一数据长度大于第二数据长度时,存储编码后的所述列地址标识;其中,所述第一数据长度为编码前的所述列地址标识对应的数据长度;所述第二数据长度为编码后的所述列地址标识对应的数据长度;
当所述第一数据长度小于所述第二数据长度时,存储编码前的所述列地址标识。
为解决上述问题,本发明提供第二方面提供一种管理坏列地址的装置,所述装置包括:
获取模块,用于获取非线性闪存中所有列地址对应的列地址标识;其中,所述列地址标识用于表示所述列地址对应的存储空间是否损坏;所述列地址标识为单个列地址标识顺序组合后形成的列地址标识序列;
确定模块,用于根据所述列地址标识确定与所述列地址标识匹配的目标编码方式;
编码模块,用于若确定到与所述列地址标识匹配的目标编码方式,则通过所述目标编码方式对所述列地址标识进行编码;
第一存储模块,用于当第一数据长度大于第二数据长度时,存储编码后的所述列地址标识;其中,所述第一数据长度为编码前的所述列地址标识对应的数据长度;所述第二数据长度为编码后的所述列地址标识对应的数据长度;
第二存储模块,用于当所述第一数据长度小于所述第二数据长度时,存储编码前的所述列地址标识。
上述方案,管理坏列地址的装置获取非线性闪存中所有列地址对应的列地址标识;其中,列地址标识用于表示列地址对应的存储空间是否损坏;根据列地址标识确定与所述列地址标识匹配的目标编码方式;通过目标编码方式对列地址标识进行编码;当编码前的所述列地址标识对应的第一数据长度大于编码后的所述列地址标识对应的第二数据长度时,存储编码后的所述列地址标识;当该第一数据长度小于该第二数据长度时,存储编码前的所述列地址标识。由于管理坏列地址的装置能够通过列地址标识能够识别坏列地址,且管理坏列地址的装置存储占用内存小的列地址标识,节省存储坏列信息所占用的存储空间,提高其内存利用率。
附图说明
图1是本发明管理坏列地址的方法一实施例的流程图;
图2是本发明管理坏列地址的方法另一实施例的流程图;
图3是本发明管理坏列地址的装置一实施例的结构示意图;
图4是本发明管理坏列地址的装置另一实施例的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参阅图1,图1是本发明管理坏列地址的方法一实施例的流程图。本实施例中的管理坏列地址的方法的执行主体为管理坏列地址的装置,管理坏列地址的装置可以为电脑,但并不限于此,也可以为其他可以编码的终端,此处不做限制。本实施例中的管理坏列地址的方法包括以下步骤:
S101:获取非线性闪存中所有列地址对应的列地址标识;其中,所述列地址标识用于表示所述列地址对应的存储空间是否损坏。
当Nand Flash存储装置与管理坏列地址的装置建立通信连接时,管理坏列地址的装置扫描非线性闪存Nand Flash中所有列地址,并根据列地址对应的存储空间是否损坏获取所有列地址对应的列地址标识。列地址标识按扫描列地址的先后顺序依次排列。
其中,Nand Flash存储装置可以为数码相机、MP3随身听记忆卡、体积小巧的U盘等。
具体地,管理坏列地址的装置可以为Nand Flash存储装置中Nand Flash的所有列地址都分配1比特(bit)的列地址标识(表示该列的好坏),得到一个原始的列信息表,列信息表可以包括列地址标识、以及列地址与列地址标识的对应关系。
其中,列地址标识用于表示该列地址对应的存储空间是否损坏。列地址标识可以包括0、1,本实施例中可以用0表示该列地址对应的存储空间损坏,用1标识该列地址对应的存储空间未损坏。
可以理解的是,在其他实施例中,也可以用1表示该列地址对应的存储空间损坏,用0标识该列地址对应的存储空间未损坏,此处不做限制。也可以用其他标识表示列地址对应的存储空间是否损坏。
S102:根据所述列地址标识确定与所述列地址标识匹配的目标编码方式。
管理坏列地址的装置可以根据所有列地址对应的列地址标识,按该列地址标识对应的先后顺序,在数据库中确定与列地址标识匹配的目标编码方式。列地址标识对应的先后顺序由扫描列地址时对应的顺序确定。
其中,管理坏列地址的装置可以选择采用第一类编码方式和/或第二类编码方式对该列地址标识进行编码。第一类编码方式包括“只对连续的0编码”、“只对连续的1编码”;第二类编码方式包括“对连续的0和1都编码”。
“只对连续的0编码”、“只对连续的1编码”“对连续的0和1都编码”这三种编码方式均包括多种预设的编码方式,并预先存储在管理坏列地址的装置的数据库中。预设编码方式可根据实际需要进行设置,不做限制。
管理坏列地址的装置根据所有列地址对应的列地址标识即可获取到与其匹配的目标编码方式。
可以理解的是,管理坏列地址的装置可以根据第一类编码方式包含的多种编码方式确定目标编码方式,也可以根据第二类编码方式包含的多种编码方式确定目标编码方式。目标编码方式可以包括一种编码方式,也可以包括至少两种编码方式,此处不做限制。
S103:通过所述目标编码方式对所述列地址标识进行编码。
管理坏列地址的装置在确定与列地址标识匹配的目标编码方式时,通过目标编码方式对列地址标识进行编码,以对列地址标识进行编码,以压缩列地址标识,并记录编码前的列地址标识对应的第一数据长度以及记录编码后的列地址标识对应的第二数据长度。数据长度可以用比特数进行衡量。
可以理解的是,管理坏列地址的装置当从第一类编码方式中确定目标编码方式时,记录编码后的列地址标识对应的第一比特数;当目标编码方式是对应管理坏列地址的装置当从第二类编码方式中确定目标编码方式时,记录编码后的列地址标识对应的第二比特数。
管理坏列地址的装置比较第一数据长度与第二数据长度,当第一数据长度大于第二数据长度时,执行步骤S104;当第一数据长度小于第二数据长度时,执行步骤S105。
S104:当第一数据长度大于第二数据长度时,存储编码后的所述列地址标识;其中,所述第一数据长度为编码前的所述列地址标识对应的数据长度;所述第二数据长度为编码后的所述列地址标识对应的数据长度;
管理坏列地址的装置在确认第一数据长度大于第二数据长度时,存储编码后的列地址标识。第一数据长度为编码前的列地址标识对应的数据长度;所述第二数据长度为编码后的列地址标识对应的数据长度。
S105:所述第一数据长度小于所述第二数据长度时,存储编码前的所述列地址标识。
管理坏列地址的装置在确认第一数据长度小于第二数据长度时,存储编码前的所述列地址标识。
可以理解的是,当第一数据长度等于第二数据长度时,可以存储码前的列地址标识,也可存储编码后的列地址标识。
可以理解的是,管理坏列地址的装置能够采用目标编码方式对应的解码方式对存储编码后的列地址标识进行解编码/解码,以还原得到编码前的列地址标识。由于管理坏列地址的装置能够获取到列地址与列地址标识的对应关系/映射关系,因此,管理坏列地址的装置在得到还原后的列地址标识,即可获知坏列信息/坏列地址。
可以理解的是,管理坏列地址的装置还可以将存储的列地址标识发送至NandFlash存储装置,以便Nand Flash存储装置管理环列信息。
上述方案,管理坏列地址的装置获取非线性闪存中所有列地址对应的列地址标识;其中,列地址标识用于表示列地址对应的存储空间是否损坏;根据列地址标识确定与列地址标识匹配的目标编码方式;通过目标编码方式对列地址标识进行编码;编码前的列地址标识对应的第一数据长度大于编码后的列地址标识对应的第二数据长度时,存储编码后的列地址标识;当该第一数据长度小于该第二数据长度时,存储编码前的列地址标识。由于管理坏列地址的装置能够通过列地址标识能够识别坏列地址,且管理坏列地址的装置存储占用内存小的列地址标识,节省存储坏列信息所占用的存储空间,提高其内存利用率。
请参阅图2,图2是本发明管理坏列地址的方法另一实施例的流程图。本实施例中的管理坏列地址的方法的执行主体为管理坏列地址的装置,管理坏列地址的装置可以为电脑,但并不限于此,也可以为其他可以编码的终端,此处不做限制。本实施例中的管理坏列地址的方法包括以下步骤:
S201:获取非线性闪存中所有列地址对应的列地址标识;其中,所述列地址标识用于表示所述列地址对应的存储空间是否损坏。
当Nand Flash存储装置与管理坏列地址的装置建立通信连接时,管理坏列地址的装置扫描非线性闪存Nand Flash中所有列地址,并根据列地址对应的存储空间是否损坏获取所有列地址对应的列地址标识。列地址标识按扫描列地址的先后顺序依次排列。
其中,Nand Flash存储装置可以为数码相机、MP3随身听记忆卡、体积小巧的U盘等。
具体地,管理坏列地址的装置可以为Nand Flash存储装置中Nand Flash的所有列地址都分配1比特(bit)的列地址标识(表示该列的好坏),得到一个原始的列信息表,列信息表可以包括列地址标识、以及列地址与列地址标识的对应关系。
其中,列地址标识用于表示该列地址对应的存储空间是否损坏。列地址标识可以包括0、1,本实施例中可以用0表示该列地址对应的存储空间损坏,用1标识该列地址对应的存储空间未损坏。
可以理解的是,在其他实施例中,也可以用1表示该列地址对应的存储空间损坏,用0标识该列地址对应的存储空间未损坏,此处不做限制。也可以用其他标识表示列地址对应的存储空间是否损坏。
其中,管理坏列地址的装置可以选择采用第一类编码方式和/或第二类编码方式对该列地址标识进行编码。第一类编码方式包括“只对连续的0编码”、“只对连续的1编码”;第二类编码方式包括“对连续的0和1都编码”。
“只对连续的0编码”、“只对连续的1编码”“对连续的0和1都编码”这三种编码方式均包括多种预设的编码方式,并预先存储在管理坏列地址的装置的数据库中。预设编码方式可根据实际需要进行设置,不做限制。
S202:计算连续且相同的单个列地址标识的数目;其中,所述数目包括第一数目和/或第二数目;所述第一数目对应第一列地址标识的数目,所述第二数目对应第二列地址标识的数目。
管理坏列地址的装置在获取到所有列地址对应的列地址标识之后,计算所有列地址对应的列地址标识中,连续且相同的单个列地址标识的数目。
管理坏列地址的装置可以计算连续且相同的第一列地址标识对应的第一数目,或者计算连续且相同的第二列地址标识对应的第二数目,还可以分别计算连续且相同的第一列地址标识对应的第一数目以及计算连续且相同的第二列地址标识对应的第二数目。
例如,管理坏列地址的装置可以计算连续且相同的第一列地址标识0对应的第一数目,和/或计算连续且相同的第二列地址标识1对应的第二数目。可以理解的是,在本实施例中,数据库中存储有两类编码方式,每类编码方式各包括七种编码方式。管理坏列地址的装置选择其中一类编码方式进行压缩编码,以能够直接存储编码后的列地址标识;也可以分别采用两类编码方式进行编码,并比较分别两类编码方式进行编码后得到的列地址标识对应的数据长度,以能够将数据长度小的压缩编码后得到的列地址标识进行存储。
其中,第一类编码方式是对连续且相同的第一列地址标识进行编码,或者连续且相同的第二列地址标识进行编码;第二类编码方式是对连续且相同的第一列地址标识,以及连续且相同的第二列地址标识进行编码。
管理坏列地址的装置当采用第一类编码方式进行编码时,计算连续且相同的第一列地址标识对应的第一数目,或者计算连续且相同的第二列地址标识对应的第二数目。
例如,管理坏列地址的装置在选择第一类编码方式,且“只对连续的0编码”时,按列地址标识的预设顺序依次计算连续且相同的第一列地址0对应的第一数目。
管理坏列地址的装置在选择第一类编码方式,且“只对连续的1编码”时,按列地址标识的预设顺序依次计算连续且相同的第二列地址1对应的第二数目。
管理坏列地址的装置当采用第二类编码方式进行编码时,分别计算连续且相同的第一列地址标识对应的第一数目以及计算连续且相同的第二列地址标识对应的第二数目。
例如,管理坏列地址的装置在选择第二类编码方式(“对连续的0和1都编码”)时,按列地址标识的预设顺序依次计算连续且相同的第一列地址标识0对应的第一数目,以及计算连续且相同的第二列地址标识1对应的第二数目。
S203:根据所述数目确定与所述列地址标识系列匹配的目标编码方式。
管理坏列地址的装置根据第一列地址标识对应的第一数目,和/或第二列地址标识对应的第二数目,确定与所有列地址对应的列地址标识序列匹配的目标编码方式。
管理坏列地址的装置可以根据第一列地址标识对应的第一数目,或第二列地址标识对应的第二数目,在第一类编码方式中确定与第一数目或第二数目匹配的目标编码方式。
管理坏列地址的装置可以根据第一列地址标识对应的第一数目,以及第二列地址标识对应的第二数目,在第一类编码方式中确定与第一数目以及第二数目匹配的目标编码方式。
可以理解的是,与所有列地址对应的列地址标识匹配的目标编码方式可以包括一种编码方式,也可以包括至少两种编码方式,此处不做限制。
进一步地,步骤S203可以包括:判断所述数目所属的预设区间;根据所述数目所属的预设区间确定与所述列地址标识序列匹配的目标编码方式。
例如,管理坏列地址的装置在得到第一列地址标识对应的第一数目,和/或第二列地址标识对应的第二数目时,判断第一数目和/或第二数目各自所属的预设区间,根据其所属的预设区间确定与第一数目和/或第二数目匹配的目标编码方式。
其中,当管理坏列地址的装置采用第一类编码方式(第一类编码方式的编码格式为:Head(2~5bit)+data(2/4/5/7/9/15bit),data是列信息)进行编码时,管理坏列地址的装置在得到第一列地址标识对应的第一数目,或第二列地址标识对应的第二数目后,确定与第一数目或第二数目匹配的目标编码方式。
第一类编码方式的预设区间包括:
第一预设区间【0,3】,表示“0”或“1”的个数大于或等于0且小于等于3落入第一区间,第一预设区间对应预设的第一编码方式,其编码格式为Head(2bit)+data(4bit);其中,Head=00,占2bit,此时data为未压缩/编码的列信息占4bit;
第二预设区间【4,7】,表示“0”或“1”的个数大于或等于4且小于等于7落入第二区间,第二预设区间对应预设的第二编码方式,其编码格式为编码格式:Head(2bit)+data(2bit),其中,Head=01,data(00~11)=0/1的连续个数减4;
第三预设区间【8,23】,表示“0”或1的个数大于或等于8且小于等于23落入第三区间,第三预设区间对应预设的第三编码方式,其编码格式为编码格式:Head(2bit)+data(2bit),其中,Head=10,data(0000~1111)=0/1的连续个数减8;
第四预设区间【24,55】,第四预设区间对应预设的第四编码方式,其编码格式为编码格式:Head(3bit)+data(5bit),其中,Head=110,data(00000~11111)=0/1的连续个数减24;
第五预设区间【56,183】,表示“0”或“1”的个数大于或等于56且小于等于183落入第五区间,第五预设区间对应预设的第五编码方式,其编码格式为编码格式:Head(4bit)+data(7bit),其中,Head=1110,data(0000000~1111111)=0/1的连续个数减56;
第六预设区间【184,695】,表示“0”或“1”的个数大于或等于184且小于等于695落入第六区间,第六预设区间对应预设的第六编码方式,其编码格式为编码格式:Head(5bit)+data(9bit),其中,Head=11110,data(000000000~111111111)=0/1的连续个数减184;
第七预设区间【696,32767】,表示“0”或“1”的个数大于或等于696且小于等于32767落入第七区间,第七预设区间对应预设的第七编码方式,其编码格式为编码格式:Head(5bit)+data(15bit),其中,Head=11111,data(000000000000000~111111111111111)=0/1的连续个数减696。
其中,32767为一个计数周期,当连续的“0”或“1”的个数大于32767时,前32767个落入第七预设区间,采用第七编码方式进行编码;从第32768个数重新计算连续的个数。然后从第32768个数据开始重新统计连续的0/1连续的个数。
比如,当所有列地址对应的列地址标识序列为00100001时,由于其首先出现了两个连续的“0”,因此,第一数目属于第一预设区间【0,3】,第一预设区间对应的第一编码方式为目标编码方式。
当所有列地址对应的列地址标识序列为00000100001时,由于其首先出现了五个连续的“0”,因此,第一数目属于第二预设区间【4,7】,第二预设区间对应的第二编码方式为目标编码方式。
当所有列地址对应的列地址标识序列为00000000001000000001时,由于其首先出现了十个连续的“0”,因此,第一数目属于第三预设区间【8,23】,第三预设区间对应的第三编码方式为目标编码方式。
当所有列地址对应的列地址标识序列为25{0}_100001(标识100001前面有25个0)时,由于其首先出现了25个连续的“0”,然后出现了4个连续的0,因此,第一数目中的25属于第四预设区间【24,55】,第一数目中的4属于第二预设区间,第四预设区间对应的第四编码方式、以及第二预设区间对应的第二编码方式均为目标编码方式。
当所有列地址对应的列地址标识序列为100{0}_1(标识1前面有100个0)时,由于其首先出现了100个连续的“0”,因此,第一数目属于第五预设区间【56,183】,第五预设区间对应的第五编码方式为目标编码方式。
当所有列地址对应的列地址标识序列为200{0}_1(标识1前面有200个0)时,由于其首先出现了200个连续的“0”,因此,第一数目属于第六预设区间【184,695】,第六预设区间对应的第六编码方式为目标编码方式。
当所有列地址对应的列地址标识序列为700{0}_1(标识1前面有700个0)时,由于其首先出现了700个连续的“0”,因此,第一数目属于第七预设区间【696,32767】,第七预设区间对应的第七编码方式为目标编码方式。
当所有列地址对应的列地址标识序列中总共有连续的32771个0,那么采用第七编码方式对前32767个“0”编码后,剩下连续的32771-32767=4个“0”,那么剩下的4个“0”落入第二预设区间,剩下的4个“0”采用第二编码方式。目标编码方式为第七编码方式以及第二编码方式。
当管理坏列地址的装置采用第二类编码方式(第二类编码方式的编码格式为:Head(2~5bit)+data(2/4/5/7/9/15bit)+id(1bit),data是列信息,id表示编码的是“0”还是“1”)进行编码时,管理坏列地址的装置在得到第一列地址标识对应的第一数目,以及第二列地址标识对应的第二数目后,确定与第一数目匹配的第一目标编码方式以及与第二数目匹配的第二目标编码方式。
其中,管理坏列地址的装置可以参考下表的取值区间确定第一数目匹配的第一目标编码方式以及与第二数目匹配的第二目标编码方式。
Head |
data |
id |
预设区间 |
00 |
00001~11110 |
-- |
【0,4】 |
01 |
00~11 |
0/1 |
【5,8】 |
10 |
0000~1111 |
0/1 |
【9,24】 |
110 |
00000~11111 |
0/1 |
【25,56】 |
1110 |
0000000~1111111 |
0/1 |
【57,184】 |
11110 |
000000000~111111111 |
0/1 |
【185,696】 |
11111 |
000000000000000~111111111111111 |
0/1 |
【697,32767】 |
其中,如上表所示,第二类编码方式的预设区间包括:
第一预设区间【0,4】,表示“0”或“1”的个数大于或等于0且小于等于4落入第一区间,第一预设区间对应预设的第一编码方式,其编码格式为Head(2bit)+data(4bit)+id(1bit);其中,Head=00,占2bit,此时data为未压缩/编码的列信息占4bit,id占1bit;
第二预设区间【5,8】,表示“0”或“1”的个数大于或等于5且小于等于5落入第二区间,第二预设区间对应预设的第二编码方式,其编码格式为编码格式:Head(2bit)+data(2bit)+id(1bit),其中,Head=01,data(00~11)=0/1的连续个数减5;
第三预设区间【9,24】,表示“0”或“1”的个数大于或等于9且小于等于24落入第三区间,第三预设区间对应预设的第三编码方式,其编码格式为编码格式:Head(2bit)+data(2bit)+id(1bit),其中,Head=10,data(0000~1111)=0/1的连续个数减9;
第四预设区间【25,56】,表示连续的“0”或“1”的个数大于等于25且小于等于56落入第四区间,第四预设区间对应预设的第四编码方式,其编码格式为编码格式:Head(3bit)+data(5bit)+id(1bit),其中,Head=110,data(00000~11111)=0/1的连续个数减25;
第五预设区间【57,184】,表示“0”或“1”的个数大于或等于57且小于等于184落入第五区间,第五预设区间对应预设的第五编码方式,其编码格式为编码格式:Head(4bit)+data(7bit)+id(1bit),其中,Head=1110,data(0000000~1111111)=0/1的连续个数减57;
第六预设区间【185,696】,表示“0”或“1”的个数大于或等于185且小于等于696落入第六区间,第六预设区间对应预设的第六编码方式,其编码格式为编码格式:Head(5bit)+data(9bit),其中,Head=11110,data(000000000~111111111)=0/1的连续个数减185;
第七预设区间【697,32767】,表示“0”或“1”的个数大于或等于696且小于等于32767落入第七区间,第七预设区间对应预设的第七编码方式,其编码格式为编码格式:Head(5bit)+data(15bit)+id(1bit),其中,Head=11111,data(000000000000000~111111111111111)=0/1的连续个数减697。
其中,32767为一个计数周期,当连续的“0”或“1”的个数大于32767时,前32767个落入第七预设区间,前32767个落入第七预设区间,采用第七编码方式进行编码;从第32768个数重新计算连续的个数。
比如,当所有列地址对应的列地址标识序列中总共有连续的32771个“0”,那么采用第七编码方式对前32767个“0”编码后,剩下连续的32771-32767=4个“0”,那么剩下的4个“0”落入第二预设区间,剩下的4个“0”采用第二编码方式。目标编码方式为第七编码方式以及第二编码方式。
S204:通过所述目标编码方式对所述列地址标识序列进行编码。
管理坏列地址的装置在确定到与列地址标识序列匹配的目标编码方式时,通过目标编码方式对列地址标识进行编码,以对列地址标识序列进行编码。
进一步地,步骤S204可以包括:通过所述目标编码方式对第一数目对应的列地址标识进行编码,和/或通过所述目标编码方式对第二数目对应的列地址标识进行编码。
例如,当管理坏列地址的装置采用第一类编码方式列地址标识序列进行编码时:
当所有列地址对应的列地址标识为00100001时,由于其首先出现了两个连续的“0”,因此,第一数目属于第一预设区间【0,3】,目标编码方式为第一预设区间对应的第一编码方式,采用第一预设区间对应的第一编码方式进行编码。由于第一编码方式的编码格式为:Head(2bit)+data(4bit),Head=00,管理坏列地址的装置以4个bit的列地址标识为单位进行编码,其编码后得到:000010_000001。其中,下划线前面的000010中的前两个00表示Head=00,0010是未编码的列地址标识;下划线后面的000001中的后4位0001是未编码的列地址标识。
当所有列地址对应的列地址标识序列为00000100001时,由于其首先出现了五个连续的“0”,因此,第一数目属于第二预设区间【4,7】,目标编码方式为第二预设区间对应的第二编码方式,采用第二预设区间对应的第二编码方式进行编码。由于第二编码方式的编码格式为:Head(2bit)+data(2bit),Head=01,000001减4个“0”处理后得到01,00001减4个“0”处理后得到1个“1”,管理坏列地址的装置对其编码后得到:0101_0100。其中,下划线前面的0101中的前两位01表示Head=01,01是用二进制形式表示减去4个“0”后还有1个“0”,并默认在其后跟着1个“1”;下划线后面的0100中的后两位00是用二进制形式表示减去4个“0”后没有多余的“0”,并默认在4个“0”后跟着1个“1”。
当所有列地址对应的列地址标识序列为00000000001000000001时,由于其首先出现了十个连续的“0”,因此,第一数目属于第三预设区间【8,23】,目标编码方式为第三预设区间对应的第三编码方式,采用第三预设区间对应的第三编码方式进行编码,由于第三编码方式的编码格式为:Head(2bit)+data(4bit),Head=10,00000000001减去8个0处理后得到001,000000001减去8个0处理后得到1,管理坏列地址的装置对其编码后得到:10 0010_10 0000。其中,下划线前面的10 0010中的前两位10表示Head=10,0010是用二进制形式表示减去8个“0”后还有2个“0”,并默认在其后还跟着1个“1”;下划线后面的10 0000中的后四位0000是用二进制形式表示减去8个“0”后没有剩下多余的“0”,并默认在8个“0”后跟着1个“1”。
当所有列地址对应的列地址标识序列为25{0}_100001(标识100001前面有25个0)时,由于其首先出现了25个连续的“0”,然后出现了4个连续的0,因此,第一数目中的25属于第四预设区间【24,55】,第一目标编码方式为第四预设区间对应的第四编码方式,第一数目中的4属于第二预设区间,第二目标编码方式为第二预设区间对应的第二编码方式,管理坏列地址的装置采用第四预设区间对应的第四编码方式对25{0}_1进行编码,以及采用第二预设区间对应的第二编码方式对00001进行编码。由于第四编码方式的编码格式为:Head(3bit)+data(5bit),Head=110,25{0}_1减去24个“0”处理后得到01,00001减去4个“0”处理后得到1个“1”,第二编码方式的编码格式为:Head(2bit)+data(2bit),Head=01;因此,管理坏列地址的装置对其编码后得到:110 00001_0100。其中,下划线前面的110 00001中的前三位110表示Head=110,00001是用二进制形式表示减去24个“0”后还剩下1个“0”,并默认在其后跟着1个“1”;下划线后面的0100中的前两位01表示Head=01,00是用二进制形式表示减去4个“0”后没有多余的“0”,并默认在4个“0”后跟着1个“1”。
当所有列地址对应的列地址标识序列为100{0}_1(标识1前面有100个0)时,由于其首先出现了100个连续的“0”,因此,第一数目属于第五预设区间【56,183】,目标编码方式为第五预设区间对应的第五编码方式,采用第五预设区间对应的第五编码方式进行编码。由于第五编码方式的编码格式为:Head(4bit)+data(4bit),Head=1110,100{0}_1减去56个0处理后得到44{0}1,管理坏列地址的装置对其编码后得到:1110_0101100。其中,下划线前面的1110表示Head=1110,下划线后面的0101100是用二进制形式表示减去56个“0”后还有44个“0”,并默认在44个“0”后跟着1个“1”。
当所有列地址对应的列地址标识序列为200{0}_1(标识1前面有200个0)时,由于其首先出现了200个连续的“0”,因此,第一数目属于第六预设区间【184,695】,目标编码方式为第六预设区间对应的第六编码方式,采用第六预设区间对应的第六编码方式进行编码。由于第六编码方式的编码格式为:Head(5bit)+data(9bit),Head=11110,200{0}_1减去184个0处理后得到16{0}1,管理坏列地址的装置对其编码后得到:11110_000010000。其中,下划线前面的11110表示Head=11110,下划线后面的000010000是用二进制形式表示减去184个“0”后还有16个“0”,并默认在16个“0”后还跟着1个“1”。
当所有列地址对应的列地址标识序列为700{0}_1(标识1前面有700个0)时,由于其首先出现了700个连续的“0”,因此,第一数目属于第七预设区间【696,32767】,目标编码方式为第七预设区间对应的第七编码方式,采用第七预设区间对应的第七编码方式进行编码。由于第七编码方式的编码格式为:Head(5bit)+data(15bit),Head=11111,700{0}_1减去696个0处理后得到00001,管理坏列地址的装置对其编码后得到:11111_000000000000100。其中,下划线前面的11111表示Head=11111,下划线后面的000000000000100是用二进制形式表示减去696个“0”后还有4个“0”,并默认在4个“0”后还跟着1个“1”。
当采用第一类编码方式对所有的列地址对应的列地址标识序列进行编码时,需要注意以下几点:
1、列地址标识序列中连续的0/1达到32767个时,需要清零,即从第32768bit重新开始计数,并且对前32767个连续的0/1采用第七编码方式进行编码;
2、当对第一列地址标识0进行编码时,除了Head=00时,其他情况默认跟着第二列地址标识1(达到解压数据长度32767后除外);因此搜索时跳过这个1继续搜索;
3、当剩下最后少于4个列地址标识时,直接输出未编码的列地址标识;比如,当所有列地址对应的列地址标识为:1010_00001_{9{0},1}_{25{0},1}_{58{0},1}_{185{0},1}_{700{0},1}_100,管理坏列地址的装置对其采用第一类编码方式中的第一编码方式、第二编码方式、第三编码方式、第四编码方式、第五编码方式、第六编码方式以及第七编码方式对其进行编码得到:001010_0100_100001_110 00001_1110 0000010_11110 000000001_11111 000000000000100_100。其中,编码的最后剩下“100”,少于4bit,直接把'100'拼在最后;
4、数据最前面的18bit是辅助信息,从第19bit后起算的第1~2bit用来指示地址数据是否经过编码,以及编码时采用的编码模式;第3~18bit用来表示解压后的数据长度,最长为65535bit。其中,00表示不经过编码,01表示只对‘0’编码;10表示只对‘1’编码;11表示对‘0’和‘1’都编码。
当管理坏列地址的装置采用第二类类编码方式列地址标识序列进行编码时:管理坏列地址的装置在得到第一列地址标识对应的第一数目,以及第二列地址标识对应的第二数目后,按照与第一类编码方式向类似的方法确定与第一数目以及第二数目匹配的目标编码方式,并采用目标编码方式编码列地址标识。
第二类编码方式与第一类编码方式类似,采用第二类编码方式对列地址标识进行编码,与采用第一类编码方式对列地址标识进行编码的区别在于,采用第二类编码方式还包括用于指示对第一列地址标识“0”或第二列地址标识“1”进行编码的标志位。
例如,当采用第二类编码方式进行编码,且所有列地址对应的列地址标识序列为000001111110时,由于连续出现了5(第一数目)个“0”,以及连续出现了6(第二数目)个“1”,因此,第一数目以及第二数目均属于第二预设区间【5,8】,采用第二类编码方式中第二预设区间对应的第二编码方式进行编码,由于第二编码方式的编码格式为:Head(2bit)+data(2bit)+id(1bit),Head=01,000001减去5个“0”处理后得到1个“1”,111110减去5个“1”处理后得到1个“0”,管理坏列地址的装置对其编码后得到:01000_01001。其中,下划线前面的01010中的前2位01表示Head=10,第3~4位01是用二进制形式表示减去5个“0”还有1个“0”,并默认在“0”后还跟着1个“1”,第5位为0用于标识对“0”进行编码;下划线后面的01001中的001是用二进制形式表示减去5个“1”后没有多余的“0”,且对“1”进行编码。
可以理解的是,当所有列地址对应的列地址标识序列为其他值时,采用第二类编码方式对列地址标识进行编码的方式可参考上述例子,此处不一一举例说明。
当采用第二类编码方式对所有的列地址对应的列地址标识序列进行编码时,需要注意以下几点:
1、由于第二类编码方式需要增加一个标示位,因此连续0或者1的个数大于等于5才开始编码。因此,与第一类编码方式不同的是,此时是当剩下最后少于5个地址时,直接按未编码的地址输出。
2、第二类编码方式与第一类编码方式类似,第二类编码方式中除了Head=00时,其他编码后面默认跟着1/0,对0编码时默认后面跟着1;对1编码时,后面默认跟着0;(达到解压数据长度32767时除外)因此搜索时跳过这个0/1继续搜索。
管理坏列地址的装置记录编码前的列地址标识对应的第一数据长度以及记录编码后的列地址标识对应的第二数据长度。数据长度可以用比特数进行衡量。
可以理解的是,管理坏列地址的装置当从第一类编码方式中确定目标编码方式时,记录编码后的列地址标识对应的第一比特数;当目标编码方式是对应管理坏列地址的装置当从第二类编码方式中确定目标编码方式时,记录编码后的列地址标识对应的第二比特数。
管理坏列地址的装置比较第一数据长度与第二数据长度,当第一数据长度大于第二数据长度时,执行步骤S205;当第一数据长度小于第二数据长度时,执行步骤S206。
S205:当第一数据长度大于第二数据长度时,存储编码后的所述列地址标识;其中,所述第一数据长度为编码前的所述列地址标识对应的数据长度;所述第二数据长度为编码后的所述列地址标识对应的数据长度;
管理坏列地址的装置在确认第一数据长度大于第二数据长度时,存储编码后的列地址标识。第一数据长度为编码前的列地址标识对应的数据长度;所述第二数据长度为编码后的列地址标识对应的数据长度。
由第一类编码方式以及第二类编码方式可知,连续的坏列或者好列越多,对坏列信息的压缩率就越高。其中:
连续个数达到7个时,压缩率为4/7(采用第一类编码方式)或5/7(采用第二类编码方式);
连续个数达到23个时,压缩率为6/23(采用第一类编码方式)或7/23(采用第二类编码方式);
连续个数达到55个时,压缩率为8/55(采用第一类编码方式)或9/55(采用第二类编码方式);
连续个数达到183个时,压缩率为11/183(采用第一类编码方式)或12/183(采用第二类编码方式);
连续个数达到695个时,压缩率为14/695(采用第一类编码方式)或15/695(采用第二类编码方式);
连续个数达到32767个时,压缩率为20/32767(采用第一类编码方式)或21/32767(采用第二类编码方式)。
进一步地,步骤S205可以为:存储编码后且占用内存最小的所述列地址标识。
具体地,管理坏列地址的装置计算采用第一类编码方式中匹配的目标编码方式对所有列地址对应的列地址标识进行编码后,得到的第一比特值,以及计算采用第二类编码方式中匹配的目标编码方式对所有列地址对应的列地址标识进行编码后,得到的第二比特值;并比较第一比特值与第二比特值的大小,将编码后比特值小的列地址标识识别为占用内存最小的列地址标识,管理坏列地址的装置存储编码后比特值小的列地址标识。
其中,第一比特值为“只对连续的0编码”得到的编码后的列地址标识的比特值,或“只对连续的1编码”得到的编码后的列地址标识的比特值。
管理坏列地址的装置可以分别比较“只对连续的0编码”、“只对连续的1编码”“对连续的0和1都编码”各自对应的数据长度值,并数据长度值最小,则占用内存最小。管理坏列地址的装置存储编码后占用内存最小的列地址标识。
S206:所述第一数据长度小于所述第二数据长度时,存储编码前的所述列地址标识。
管理坏列地址的装置在确认第一数据长度小于第二数据长度时,存储编码前的所述列地址标识。
可以理解的是,当第一数据长度等于第二数据长度时,可以存储码前的列地址标识,也可存储编码后的列地址标识。
可以理解的是,管理坏列地址的装置能够采用目标编码方式对应的解码方式对存储编码后的列地址标识进行解码,以还原得到编码前的列地址标识。由于管理坏列地址的装置能够获取到列地址与列地址标识的对应关系/映射关系,因此,管理坏列地址的装置在得到还原后的列地址标识,即可获知坏列信息/坏列地址。
可以理解的是,管理坏列地址的装置还可以将存储的列地址标识发送至NandFlash存储装置,以便Nand Flash存储装置管理环列信息。
上述方案,管理坏列地址的装置获取非线性闪存中所有列地址对应的列地址标识;其中,列地址标识用于表示列地址对应的存储空间是否损坏;根据列地址标识确定与列地址标识匹配的目标编码方式;通过目标编码方式对列地址标识进行编码;编码前的列地址标识对应的第一数据长度大于编码后的列地址标识对应的第二数据长度时,存储编码后的列地址标识;当该第一数据长度小于该第二数据长度时,存储编码前的列地址标识。由于管理坏列地址的装置能够通过列地址标识能够识别坏列地址,且管理坏列地址的装置存储占用内存小的列地址标识,节省存储坏列信息所占用的存储空间,提高其内存利用率。
存储编码后且占用内存最小的列地址标识,能够有效的节省存储坏列信息的空间。
请参阅图3,图3是本发明管理坏列地址的装置一实施例的结构示意图。管理坏列地址的装置所包括的各模块用于执行图1对应的实施例中的各步骤,具体请参阅图1以及图1对应的实施例中的相关描述,此处不赘述。本实施例的对码装置包括获取模块310、确定模块320、编码模块330、第一存储模块340、以及第二存储模块350。
获取模块310用于获取非线性闪存中所有列地址对应的列地址标识;其中,所述列地址标识用于表示所述列地址对应的存储空间是否损坏;所述列地址标识为单个列地址标识顺序组合后形成的列地址标识序列。
比如,获取模块310获取非线性闪存中所有列地址对应的列地址标识;其中,所述列地址标识用于表示所述列地址对应的存储空间是否损坏。
获取模块310将列地址标识向确定模块320发送。
确定模块320用于接收获取模块310发送的列地址标识,根据所述列地址标识确定与所述列地址标识匹配的目标编码方式。
比如,确定模块320接收获取模块310发送的列地址标识,根据所述列地址标识确定与所述列地址标识匹配的目标编码方式。
确定模块320将匹配的目标编码方式向编码模块330发送。
编码模块330用于接收确定模块320发送的匹配的目标编码方式,通过所述目标编码方式对所述列地址标识进行编码。
比如,编码模块330接收确定模块320发送的匹配的目标编码方式,若确定结果为确定到与所述列地址标识匹配的目标编码方式,则通过所述目标编码方式对所述列地址标识进行编码。
编码模块330将编码后的列地址标识向第一存储模块340以及第二存储模块350发送。
第一存储模块340用于接收编码模块330发送的编码后的列地址标识,当第一数据长度大于第二数据长度时,存储编码后的所述列地址标识;其中,所述第一数据长度为编码前的所述列地址标识对应的数据长度;所述第二数据长度为编码后的所述列地址标识对应的数据长度。
比如,第一存储模块340接收编码模块330发送的编码后的列地址标识,用于当第一数据长度大于第二数据长度时,存储编码后的所述列地址标识;其中,所述第一数据长度为编码前的所述列地址标识对应的数据长度;所述第二数据长度为编码后的所述列地址标识对应的数据长度。
第二存储模块350用于接收编码模块330发送的编码后的列地址标识,当所述第一数据长度小于所述第二数据长度时,存储编码前的所述列地址标识。
比如,第二存储模块350接收编码模块330发送的编码后的列地址标识,当所述第一数据长度小于所述第二数据长度时,存储编码前的所述列地址标识。
上述方案,管理坏列地址的装置获取非线性闪存中所有列地址对应的列地址标识;其中,列地址标识用于表示列地址对应的存储空间是否损坏;根据列地址标识确定与列地址标识匹配的目标编码方式;通过目标编码方式对列地址标识进行编码;编码前的列地址标识对应的第一数据长度大于编码后的列地址标识对应的第二数据长度时,存储编码后的列地址标识;当该第一数据长度小于该第二数据长度时,存储编码前的列地址标识。由于管理坏列地址的装置能够通过列地址标识能够识别坏列地址,且管理坏列地址的装置存储占用内存小的列地址标识,节省存储坏列信息所占用的存储空间,提高其内存利用率。
请参阅图4,图4是本发明管理坏列地址的装置另一实施例的结构示意图。管理坏列地址的装置所包括的各模块用于执行图2对应的实施例中的各步骤,具体请参阅图2以及图2对应的实施例中的相关描述,此处不赘述。本实施例的对码装置包括获取模块410、确定模块420、编码模块430、第一存储模块440、以及第二存储模块450。其中,确定模块420包括计算单元421以及确定单元422。
获取模块410用于获取非线性闪存中所有列地址对应的列地址标识;其中,所述列地址标识用于表示所述列地址对应的存储空间是否损坏;所述列地址标识为单个列地址标识顺序组合后形成的列地址标识序列。
比如,获取模块410获取非线性闪存中所有列地址对应的列地址标识;其中,所述列地址标识用于表示所述列地址对应的存储空间是否损坏。
获取模块410将列地址标识序列向确定模块420发送。
确定模块420的计算单元421用于接收获取模块410发送的列地址标识,计算连续且相同的单个列地址标识的数目;其中,所述数目包括第一数目和/或第二数目;所述第一数目对应第一列地址标识的数目,所述第二数目对应第二列地址标识的数目;确定单元422用于根据所述数目确定与所述列地址标识序列匹配的目标编码方式。
比如,确定模块420的计算单元421接收获取模块410发送的列地址标识序列,计算连续且相同的单个列地址标识的数目;其中,所述数目包括第一数目和/或第二数目;所述第一数目对应第一列地址标识的数目,所述第二数目对应第二列地址标识的数目;确定单元422根据所述数目确定与所述列地址标识系列匹配的目标编码方式。
进一步地,确定单元422具体用于判断所述数目所属的预设区间;根据所述数目所属的预设区间确定与所述列地址标识序列匹配的目标编码方式。
确定模块420的确定单元422将编码模块430发送。编码模块430用于接收确定单元422发送的确定结果,若确定结果为确定到与所述列地址标识序列匹配的目标编码方式,则通过所述目标编码方式对所述列地址标识序列进行编码。
比如,编码模块430接收确定单元422发送的确定结果,若确定结果为确定到与所述列地址标识匹配的目标编码方式,则通过所述目标编码方式对所述列地址标识进行编码。
进一步地,编码模块430具体用于通过所述目标编码方式对第一数目对应的列地址标识进行编码,和/或通过所述目标编码方式对第二数目对应的列地址标识进行编码。
编码模块430将编码后的列地址标识向第一存储模块440以及第二存储模块450发送。
第一存储模块440用于接收编码模块430发送的编码后的列地址标识,当第一数据长度大于第二数据长度时,存储编码后的所述列地址标识;其中,所述第一数据长度为编码前的所述列地址标识对应的数据长度;所述第二数据长度为编码后的所述列地址标识对应的数据长度。
比如,第一存储模块440接收编码模块430发送的编码后的列地址标识,用于当第一数据长度大于第二数据长度时,存储编码后的所述列地址标识;其中,所述第一数据长度为编码前的所述列地址标识对应的数据长度;所述第二数据长度为编码后的所述列地址标识对应的数据长度。
进一步地,第一存储模块440还具体用于存储编码后且占用内存最小的所述列地址标识。
第二存储模块450用于接收编码模块430发送的编码后的列地址标识,当所述第一数据长度小于所述第二数据长度时,存储编码前的所述列地址标识。
比如,第二存储模块450接收编码模块440发送的编码后的列地址标识,当所述第一数据长度小于所述第二数据长度时,存储编码前的所述列地址标识。
上述方案,管理坏列地址的装置获取非线性闪存中所有列地址对应的列地址标识;其中,列地址标识用于表示列地址对应的存储空间是否损坏;根据列地址标识确定与列地址标识匹配的目标编码方式;通过目标编码方式对列地址标识进行编码;编码前的列地址标识对应的第一数据长度大于编码后的列地址标识对应的第二数据长度时,存储编码后的列地址标识;当该第一数据长度小于该第二数据长度时,存储编码前的列地址标识。由于管理坏列地址的装置能够通过列地址标识能够识别坏列地址,且管理坏列地址的装置存储占用内存小的列地址标识,节省存储坏列信息所占用的存储空间,提高其内存利用率。
存储编码后且占用内存最小的列地址标识,能够有效的节省存储坏列信息的空间。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。