NORFLASH中文件的存储和读取方法、装置及存储介质与流程

文档序号:17856589发布日期:2019-06-11 22:36阅读:516来源:国知局

本发明涉及数据存取技术领域,尤其涉及一种norflash中文件的存储和读取方法、装置及计算机可读存储介质。



背景技术:

norflash是一种非易失闪存技术,norflash存储器一直被公认为是比较稳定的存储媒介,然而近期研究发现,norflash同样存在着位翻转的问题,这和芯片供应商的制造工艺以及文件的存取次数有关,而目前的norflash控制器芯片,很少有支持ecc校验的,因此导致norflash中文件的存储和读取的可靠性较低。



技术实现要素:

本发明实施例所要解决的技术问题在于,提供一种norflash中文件的存储和读取方法、装置及计算机可读存储介质,能够解决norflash的位翻转问题,从而提高norflash中文件的存储和读取的可靠性。

为了解决上述技术问题,本发明实施例提供了一种norflash中文件的存储和读取方法,包括:

当需要在norflash中存储文件时,根据预设的第一bch循环码对待存储文件的长度信息进行编码,并根据预设的第二bch循环码对所述待存储文件的内容信息进行编码;

根据编码后的文件存储所述待存储文件;

当需要在norflash中读取文件时,根据预设的第三bch循环码对待读取文件的长度信息进行译码,并根据预设的第四bch循环码对所述待读取文件的内容信息进行译码;其中,所述第三bch循环码、所述第四bch循环码分别为在存储时对所述待读取文件的长度信息、内容信息进行编码所使用的循环码;

根据译码后的文件获取所述待读取文件。

进一步地,所述方法通过以下步骤根据所述第一bch循环码对所述待存储文件的长度信息进行编码:

为所述待存储文件添加x1个字节的头域;其中,所述头域的前x1个字节用于存放所述待存储文件的实际长度,x1>x1≥1;

根据所述第一bch循环码对所述待存储文件的长度信息进行编码,相应获得第一bch码;

将所述第一bch码存放在所述头域的后x1-x1个字节中。

进一步地,所述方法通过以下步骤根据所述第二bch循环码对所述待存储文件的内容信息进行编码:

将所述待存储文件的内容数据按照每y1个字节一组划分为y1组内容数据;其中,若第y1组内容数据不足y1个字节则补零,y1≥1,y1≥1;

根据所述第二bch循环码分别对每一组内容数据进行编码,相应获得y1个第二bch码;

将y1个所述第二bch码按照编码顺序存放在所述待存储文件的尾部。

进一步地,所述方法通过以下步骤根据所述第三bch循环码对所述待读取文件的长度信息进行译码:

读取所述待读取文件的预设的x2个字节的头域;其中,x2>1;

根据所述第三bch循环码对所述头域进行译码,相应获得所述待读取文件的长度信息。

进一步地,所述方法通过以下步骤根据所述第四bch循环码对所述待读取文件的内容信息进行译码:

根据所述待读取文件的长度信息将所述待读取文件的内容数据按照预设的y2个字节一组划分为y2组内容数据;其中,若第y2组内容数据不足y2个字节则补零,y2≥1,y2≥1;

读取所述待读取文件的尾部的y2个第二bch码;

将每一组内容数据及其对应的所述第二bch码进行拼接,相应获得y2组拼接内容数据;

根据所述第四bch循环码分别对每一组拼接内容数据进行译码。

为了解决上述技术问题,本发明实施例还提供了一种norflash中文件的存储和读取装置,包括:

文件编码模块,用于当需要在norflash中存储文件时,根据预设的第一bch循环码对待存储文件的长度信息进行编码,并根据预设的第二bch循环码对所述待存储文件的内容信息进行编码;

文件存储模块,用于根据编码后的文件存储所述待存储文件;

文件译码模块,用于当需要在norflash中读取文件时,根据预设的第三bch循环码对待读取文件的长度信息进行译码,并根据预设的第四bch循环码对所述待读取文件的内容信息进行译码;其中,所述第三bch循环码、所述第四bch循环码分别为在存储时对所述待读取文件的长度信息、内容信息进行编码所使用的循环码;以及,

文件读取模块,用于根据译码后的文件获取所述待读取文件。

进一步地,所述文件编码模块具体包括:

头域添加单元,用于为所述待存储文件添加x1个字节的头域;其中,所述头域的前x1个字节用于存放所述待存储文件的实际长度,x1>x1≥1;

长度编码单元,用于根据所述第一bch循环码对所述待存储文件的长度信息进行编码,相应获得第一bch码;以及,

第一bch码存放单元,用于将所述第一bch码存放在所述头域的后x1-x1个字节中。

进一步地,所述文件编码模块还包括:

第一内容划分单元,用于将所述待存储文件的内容数据按照每y1个字节一组划分为y1组内容数据;其中,若第y1组内容数据不足y1个字节则补零,y1≥1,y1≥1;

内容编码单元,用于根据所述第二bch循环码分别对每一组内容数据进行编码,相应获得y1个第二bch码;以及,

第二bch码存放单元,用于将y1个所述第二bch码按照编码顺序存放在所述待存储文件的尾部。

本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序;其中,所述计算机程序在运行时控制所述计算机可读存储介质所在的设备执行上述任一项所述的norflash中文件的存储和读取方法。

本发明实施例还提供了一种norflash中文件的存储和读取装置,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器在执行所述计算机程序时实现上述任一项所述的norflash中文件的存储和读取方法。

与现有技术相比,本发明实施例提供了一种norflash中文件的存储和读取方法、装置及计算机可读存储介质,当需要在norflash中存储文件时,根据第一bch循环码对待存储文件的长度信息进行编码,并根据第二bch循环码对待存储文件的内容信息进行编码,从而根据编码后的文件存储该待存储文件;当需要在norflash中读取文件时,根据第三bch循环码对待读取文件的长度信息进行译码,并根据第四bch循环码对待读取文件的内容信息进行译码,从而根据译码后的文件获取该待读取文件,能够解决由制造工艺及存取次数造成的norflash的位翻转问题,使norflash具有自动修复能力,从而提高了norflash中文件的存储和读取的可靠性。

附图说明

图1是本发明提供的一种norflash中文件的存储和读取方法的一个优选实施例的流程图;

图2是本发明提供的一种norflash中文件的存储和读取装置的一个优选实施例的结构框图;

图3是本发明提供的一种norflash中文件的存储和读取装置的另一个优选实施例的结构框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本技术领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

参见图1所示,是本发明提供的一种norflash中文件的存储和读取方法的一个优选实施例的流程图,所述方法包括步骤s11至步骤s14:

步骤s11、当需要在norflash中存储文件时,根据预设的第一bch循环码对待存储文件的长度信息进行编码,并根据预设的第二bch循环码对所述待存储文件的内容信息进行编码;

步骤s12、根据编码后的文件存储所述待存储文件;

步骤s13、当需要在norflash中读取文件时,根据预设的第三bch循环码对待读取文件的长度信息进行译码,并根据预设的第四bch循环码对所述待读取文件的内容信息进行译码;其中,所述第三bch循环码、所述第四bch循环码分别为在存储时对所述待读取文件的长度信息、内容信息进行编码所使用的循环码;

步骤s14、根据译码后的文件获取所述待读取文件。

本发明实施例主要分为存储文件编码阶段和读取文件译码阶段,具体的,在存储文件编码阶段,首先获取待存储文件的实际长度信息,并根据预先设置的第一bch循环码对待存储文件的实际长度信息进行编码,接着获取待存储文件的内容数据信息,并根据预先设置的第二bch循环码对待存储文件的内容数据信息进行编码,最后根据待存储文件的实际长度、长度信息对应的编码、内容数据以及内容信息对应的编码生成相应的编码文件,从而根据该编码文件对待存储文件进行存储;在读取文件译码阶段,首先获取待读取文件的长度信息对应的编码,并根据预先设置的第三bch循环码对待读取文件的长度信息进行译码,接着获取待读取文件的内容信息对应的编码,并根据预先设置的第四bch循环码对待读取文件的内容信息进行译码,最后根据译码获得的待读取文件的实际长度信息和内容数据信息组织成译码文件,从而根据该译码文件对待读取文件进行读取。

可以理解的,上述第三bch循环码与上述待读取文件在存储编码阶段对其长度信息进行编码时所使用的循环码保持一致,上述第四bch循环码与上述待读取文件在存储编码阶段对其内容信息进行编码时所使用的循环码保持一致,在译码阶段采用编码阶段所使用的循环码对应进行译码,从而可以保证译码结果的正确性。

需要说明的是,由于norflash存储器的存储容量较小,目前市场上的产品一般均不超过4gb,因此定义norflash能够存储的文件的最大长度小于4gb,即待存储文件的实际长度的最大值为2^32-1个字节。

本发明实施例所提供的一种norflash中文件的存储和读取方法,在向norflash中存储文件的时候根据bch循环码对待存储文件的长度信息和内容信息进行编码,在从norflash中读取文件的时候根据bch循环码对待读取文件的长度信息和内容信息进行译码,经过编码和译码过程,即使原文件存在位翻转错误,也可以在译码计算中自动纠正过来,译码后得到的文件即为经过位翻转校正的文件,从而解决了由制造工艺及存取次数造成的norflash的位翻转问题,使norflash具有自动修复能力,进而提高了norflash中文件的存储和读取的可靠性。

在另一个优选实施例中,所述方法通过以下步骤根据所述第一bch循环码对所述待存储文件的长度信息进行编码:

为所述待存储文件添加x1个字节的头域;其中,所述头域的前x1个字节用于存放所述待存储文件的实际长度,x1>x1≥1;

根据所述第一bch循环码对所述待存储文件的长度信息进行编码,相应获得第一bch码;

将所述第一bch码存放在所述头域的后x1-x1个字节中。

具体的,结合上述实施例,在获取待存储文件的实际长度信息之后,首先为待存储文件添加x1个字节的头域,并在x1个字节的前x1个字节存放获得的待存储文件的实际长度,接着根据预先设置的第一bch循环码对前x1个字节进行编码,生成相应的第一bch码,并将该第一bch码存放在x1个字节的后x1-x1个字节中;其中,x1和x1的具体数值可以根据实际需要进行设置。

作为上述方案的改进,x1=7,x1=4,所述第一bch循环码为bch(56,32)循环码。

具体的,为待存储文件添加7个字节的头域,并在7个字节的前4个字节存放获得的待存储文件的实际长度,预先设置根据bch循环码能纠正4比特错误,即t=4,且有k=4*8=32,由2^m-1≥32可得m最小为6,由于r=n-k≤m*t,因此选取r=m*t=6*4=24,得到码长n=r+k=24+32=56,从而得到非本源bch(56,32)码,即第一bch循环码为bch(56,32)循环码,根据bch(56,32)循环码对前4个字节进行编码,生成3个字节的第一bch码,并将第一bch码存放在后3个字节中。

需要说明的是,上述具体参数以及bch循环码的设置为一种较佳实施例,能够将算法的选取调整到最优状态,在实际应用中,通过增加或者减少添加的头域的长度、对应使用其他bch循环码进行编码,使用效率略差的相同算法等做法,均属于本发明的保护范围,本发明实施例不作具体限定。

在又一个优选实施例中,所述方法通过以下步骤根据所述第二bch循环码对所述待存储文件的内容信息进行编码:

将所述待存储文件的内容数据按照每y1个字节一组划分为y1组内容数据;其中,若第y1组内容数据不足y1个字节则补零,y1≥1,y1≥1;

根据所述第二bch循环码分别对每一组内容数据进行编码,相应获得y1个第二bch码;

将y1个所述第二bch码按照编码顺序存放在所述待存储文件的尾部。

具体的,结合上述实施例,在获取待存储文件的内容数据信息之后,首先将待存储文件的内容数据按照每y1个字节一组进行划分,将待存储文件划分为y1组内容数据,最后一组即第y1组内容数据若不够y1个字节则用零补充,接着根据预先设置的第二bch循环码分别对每一组内容数据进行编码,每一组内容数据对应生成一个第二bch码,相应获得y1个第二bch码,并将y1个第二bch码按照编码顺序存放在待存储文件的尾部。

需要说明的是,可以按照待存储文件的内容数据的分组组号对y1组内容数据进行编码,例如,按照第一组、第二组、······、第y1组的顺序依次对每一组内容数据进行编码,对应生成第一个、第二个、······、第y1个第二bch码,并将生成的第一个、第二个、······、第y1个第二bch码按顺序依次排列在待存储文件的尾部。

作为上述方案的改进,y1=512,所述第二bch循环码为bch(4148,4096)循环码。

具体的,将待存储文件的内容数据按照每512个字节一组进行划分,将待存储文件划分为y1组内容数据,最后一组即第y1组内容数据若不够512个字节则用零补充,按照每512个字节最多能纠正4比特错误的原则,进行bch因子匹配,可知t=4,且有k=512*8=4096,由2^m-1≥4096可得m最小为13,由于r=n-k≤m*t,因此选取r=m*t=13*4=52,得到码长n=r+k=52+4096=4148,从而选取bch(4148,4096)算法,即第二bch循环码为bch(4148,4096)循环码,根据bch(4148,4096)循环码对每一组内容数据进行编码,每一组内容数据对应生成一个7个字节的第二bch码,相应获得y1个第二bch码,并将y1个第二bch码按照编码顺序存放在待存储文件的尾部。

需要说明的是,上述具体参数以及bch循环码的设置为一种较佳实施例,能够将算法的选取调整到最优状态,在实际应用中,还可以更换其他效率略差的相同算法,例如选取1024个字节+bch(8304,8192)循环码进行编码等,均属于本发明的保护范围,本发明实施例不作具体限定。

另外,校正精度为每512个字节最多4比特的位翻转错误,可以覆盖绝大部分的norflash应用场景。

在又一个优选实施例中,所述方法通过以下步骤根据所述第三bch循环码对所述待读取文件的长度信息进行译码:

读取所述待读取文件的预设的x2个字节的头域;其中,x2>1;

根据所述第三bch循环码对所述头域进行译码,相应获得所述待读取文件的长度信息。

具体的,结合上述实施例,首先读取待读取文件的预先设置的x2个字节的头域,以获取待读取文件的长度信息对应的编码,接着根据预先设置的第三bch循环码对x2个字节的头域进行译码,从而获得待读取文件的长度信息。

需要说明的是,待读取文件的头域的字节数量x2应与待读取文件在存储编码阶段所添加的头域的字节数量保持一致。

作为上述方案的改进,x2=7,所述第三bch循环码为bch(56,32)循环码。

具体的,首先读取待读取文件的预先设置的7个字节的头域,在存储编码阶段对其长度信息进行编码时所使用的循环码对应为bch(56,32)循环码,因此第三bch循环码为bch(56,32)循环码,则根据bch(56,32)循环码对待读取文件的头域进行译码,从而获得待读取文件的长度信息。

需要说明的是,上述具体参数以及bch循环码的设置为一种较佳实施例,能够将算法的选取调整到最优状态,在实际应用中,通过增加或者减少添加的头域的长度、对应使用其他bch循环码进行译码,使用效率略差的相同算法等做法,均属于本发明的保护范围,本发明实施例不作具体限定。

在又一个优选实施例中,所述方法通过以下步骤根据所述第四bch循环码对所述待读取文件的内容信息进行译码:

根据所述待读取文件的长度信息将所述待读取文件的内容数据按照预设的y2个字节一组划分为y2组内容数据;其中,若第y2组内容数据不足y2个字节则补零,y2≥1,y2≥1;

读取所述待读取文件的尾部的y2个第二bch码;

将每一组内容数据及其对应的所述第二bch码进行拼接,相应获得y2组拼接内容数据;

根据所述第四bch循环码分别对每一组拼接内容数据进行译码。

具体的,结合上述实施例,首先根据译码获得的待读取文件的长度信息将待读取文件的内容数据按照预先设置的y2个字节一组进行划分,将待读取文件划分为y2组内容数据,最后一组即第y2组内容数据若不够y2个字节则用零补充,接着读取待读取文件的尾部存放的y2个第二bch码,分别将每一组内容数据以及该组内容数据所对应的第二bch码进行拼接,对应获得y2组拼接内容数据,最后根据预先设置的第四bch循环码分别对每一组拼接内容数据进行译码,从而获得待读取文件的内容数据。

需要说明的是,对待读取文件的内容数据进行分组时,每一组内容数据对应的字节数量应与待读取文件在存储编码阶段分组时所使用的字节数量保持一致。

作为上述方案的改进,y2=512,所述第四bch循环码为bch(4148,4096)循环码。

具体的,首先根据待读取文件的长度信息将待读取文件的内容数据按照预先设置的512个字节一组进行划分,将待读取文件划分为y2组内容数据,最后一组即第y2组内容数据若不够y2个字节则用零补充,接着读取待读取文件的尾部存放的y2个第二bch码,分别将每一组内容数据以及该组内容数据所对应的7个字节的第二bch码进行拼接,对应获得y2组拼接内容数据,在存储编码阶段对其内容信息进行编码时所使用的循环码对应为bch(4148,4096)循环码,因此第四bch循环码为bch(4148,4096)循环码,则根据bch(4148,4096)循环码分别对每一组拼接内容数据进行译码,从而获得待读取文件的内容数据。

例如,在存储编码阶段每一组512个字节的内容数据,经过编码对应生成了7个字节的bch冗余码,并按顺序放在了文件尾部,需要进行译码时,将第i组内容数据text[i]和对应的第i个第二bch码bch[i]取出,然后将bch[i]放在text[i]的尾部,这样就组成了第i组512+7=519的拼接内容数据,使用bch(4148,4096)算法对每一组拼接内容数据进行译码计算,就可以得到译码后的结果,将每一组译码后的结果直接按顺序排列组合成文件,就是最终需要读取文件。

需要说明的是,上述具体参数以及bch循环码的设置为一种较佳实施例,能够将算法的选取调整到最优状态,在实际应用中,还可以更换其他效率略差的相同算法,例如选取1024个字节+bch(8304,8192)循环码进行译码等,均属于本发明的保护范围,本发明实施例不作具体限定。

本发明实施例还提供了一种norflash中文件的存储和读取装置,能够实现上述任一实施例所述的norflash中文件的存储和读取方法的所有流程,装置中的各个模块、单元的作用以及实现的技术效果分别与上述实施例所述的norflash中文件的存储和读取方法的作用以及实现的技术效果对应相同,这里不再赘述。

参见图2所示,是本发明提供的一种norflash中文件的存储和读取装置的一个优选实施例的结构框图,所述装置包括:

文件编码模块11,用于当需要在norflash中存储文件时,根据预设的第一bch循环码对待存储文件的长度信息进行编码,并根据预设的第二bch循环码对所述待存储文件的内容信息进行编码;

文件存储模块12,用于根据编码后的文件存储所述待存储文件;

文件译码模块13,用于当需要在norflash中读取文件时,根据预设的第三bch循环码对待读取文件的长度信息进行译码,并根据预设的第四bch循环码对所述待读取文件的内容信息进行译码;其中,所述第三bch循环码、所述第四bch循环码分别为在存储时对所述待读取文件的长度信息、内容信息进行编码所使用的循环码;以及,

文件读取模块14,用于根据译码后的文件获取所述待读取文件。

优选地,所述文件编码模块11具体包括:

头域添加单元,用于为所述待存储文件添加x1个字节的头域;其中,所述头域的前x1个字节用于存放所述待存储文件的实际长度,x1>x1≥1;

长度编码单元,用于根据所述第一bch循环码对所述待存储文件的长度信息进行编码,相应获得第一bch码;以及,

第一bch码存放单元,用于将所述第一bch码存放在所述头域的后x1-x1个字节中。

优选地,所述文件编码模块11还包括:

第一内容划分单元,用于将所述待存储文件的内容数据按照每y1个字节一组划分为y1组内容数据;其中,若第y1组内容数据不足y1个字节则补零,y1≥1,y1≥1;

内容编码单元,用于根据所述第二bch循环码分别对每一组内容数据进行编码,相应获得y1个第二bch码;以及,

第二bch码存放单元,用于将y1个所述第二bch码按照编码顺序存放在所述待存储文件的尾部。

优选地,所述文件译码模块13具体包括:

头域读取单元,用于读取所述待读取文件的预设的x2个字节的头域;其中,x2>1;以及,

长度译码单元,用于根据所述第三bch循环码对所述头域进行译码,相应获得所述待读取文件的长度信息。

优选地,所述文件译码模块13还包括:

第二内容划分单元,用于根据所述待读取文件的长度信息将所述待读取文件的内容数据按照预设的y2个字节一组划分为y2组内容数据;其中,若第y2组内容数据不足y2个字节则补零,y2≥1,y2≥1;

第二bch码读取单元,用于读取所述待读取文件的尾部的y2个第二bch码;

内容拼接单元,用于将每一组内容数据及其对应的所述第二bch码进行拼接,相应获得y2组拼接内容数据;以及,

内容译码单元,用于根据所述第四bch循环码分别对每一组拼接内容数据进行译码。

本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序;其中,所述计算机程序在运行时控制所述计算机可读存储介质所在的设备执行上述任一实施例所述的norflash中文件的存储和读取方法。

本发明实施例还提供了一种norflash中文件的存储和读取装置,参见图3所示,是本发明提供的一种norflash中文件的存储和读取装置的另一个优选实施例的结构框图,所述装置包括处理器10、存储器20以及存储在所述存储器20中且被配置为由所述处理器10执行的计算机程序,所述处理器10在执行所述计算机程序时实现上述任一实施例所述的norflash中文件的存储和读取方法。

优选地,所述计算机程序可以被分割成一个或多个模块/单元(如计算机程序1、计算机程序2、······),所述一个或者多个模块/单元被存储在所述存储器20中,并由所述处理器10执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述装置中的执行过程。

所述处理器10可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,通用处理器可以是微处理器,或者所述处理器10也可以是任何常规的处理器,所述处理器10是所述装置的控制中心,利用各种接口和线路连接所述装置的各个部分。

所述存储器20主要包括程序存储区和数据存储区,其中,程序存储区可存储操作系统、至少一个功能所需的应用程序等,数据存储区可存储相关数据等。此外,所述存储器20可以是高速随机存取存储器,还可以是非易失性存储器,例如插接式硬盘,智能存储卡(smartmediacard,smc)、安全数字(securedigital,sd)卡和闪存卡(flashcard)等,或所述存储器20也可以是其他易失性固态存储器件。

需要说明的是,上述装置可包括,但不仅限于,处理器、存储器,本领域技术人员可以理解,图3结构框图仅仅是上述装置的示例,并不构成对装置的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件。

综上,本发明实施例所提供的一种norflash中文件的存储和读取方法、装置及计算机可读存储介质,在向norflash中存储文件的时候根据bch循环码对待存储文件的长度信息和内容信息进行编码,在从norflash中读取文件的时候根据bch循环码对待读取文件的长度信息和内容信息进行译码,经过编码和译码过程,即使原文件存在位翻转错误,也可以在译码计算中自动纠正过来,译码后得到的文件即为经过位翻转校正的文件,从而解决了由制造工艺及存取次数造成的norflash的位翻转问题,使norflash具有自动修复能力,进而提高了norflash中文件的存储和读取的可靠性。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

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