一种ECC数据存储方法、系统及存储介质
技术领域
本发明涉及存储器技术领域,尤其涉及一种ECC数据存储方法、系统及存储介质。
背景技术
随着NorFlash工艺发展,稳定性逐渐降低,为了保证NorFlash的准确性,需要采用ECC来进行纠错以及判断数据是否正确,一旦出错可以通过ECC进行纠正,即使纠正不过来,也可以提前知道数据出错,进行相关出错处理,避免后期出现更严重的问题。
但是Nor Flash内部也没有像Nand Flash一样有冗余空间用于存放ECC纠错码,所以需要将Flash页内有效数据空间作为冗余空间,存放ECC纠错码。
如图1-2所示,NorFlash一旦使用有效空间模拟冗余空间,就会导致数据出现512B不对齐情况,为了方便驱动以及文件系统的处理,通常将1024的页只保存512B有效数据,剩余512B只保留大约不超过20B的ECC纠错码,导致一个页内其他492B空间浪费,对客户只能提供一半容量。
发明内容
本发明提供了一种ECC数据存储方法,包括依次执行如下步骤:
计算步骤:控制器内部的ECC硬件模块根据用户数据计算并生成ECC parity,所述ECC parity用于后续进行检测和修正校验码;
发送步骤:申请一个空闲的数据页地址,发送整页编程命令,将用户数据写入Flash;
第一判断步骤:判断编程是否正常,如果是那么执行写入步骤,否则执行用户数据写入步骤;
写入步骤:根据空闲的数据页地址找到对应的ecc保存地址,发送单字节编程命令,将ECC parity数据写入Flash;
第二判断步骤:判断编程是否正常,如果是那么退出,否则执行用户数据写入步骤;
用户数据写入步骤:换一个物理块发送整页编程命令,将用户数据写入Flash,然后执行第三判断步骤;
第三判断步骤:判断编程是否正常,如果是执行写入步骤,否则退出。
作为本发明的进一步改进,在所述计算步骤之前还执行如下步骤:
用户数据发送步骤:主机发送用户数据;
用户数据接收步骤:从主机接收用户数据。
作为本发明的进一步改进,ECC数据存储方法中每个物理块最后两个物理页作为物理块的冗余区域,用于存放物理块内其他物理页的纠错码,通过页号计算纠错码在页内的偏移。
作为本发明的进一步改进,ECC数据存储方法中物理页N的纠错码存放于N*14开始地址,一旦超过1024Byte,则存放下一个物理页;读写数据时,纠错码的地址不需要额外保存,只需要通过N*14+物理页126对应地址即可计算。
本发明还提供了一种ECC数据存储系统,包括:
计算单元:用于控制器内部的ECC硬件模块根据用户数据计算并生成ECC parity,所述ECC parity用于后续进行检测和修正校验码;
发送单元:申请一个空闲的数据页地址,用于发送整页编程命令,将用户数据写入Flash;
第一判断单元:用于判断编程是否正常,如果是那么执行写入单元,否则执行用户数据写入单元;
写入单元:根据空闲的数据页地址找到对应的ecc保存地址,用于发送单字节编程命令,将ECC parity数据写入Flash;
第二判断单元:用于判断编程是否正常,如果是那么退出,否则执行用户数据写入单元;
用户数据写入单元:用于换一个物理块发送整页编程命令,将用户数据写入Flash,然后执行第三判断单元;
第三判断单元:用于判断编程是否正常,如果是执行写入单元,否则退出。
作为本发明的进一步改进,在所述计算单元之前还执行如下单元:
用户数据发送单元:用于主机发送用户数据;
用户数据接收单元:用于从主机接收用户数据。
作为本发明的进一步改进,ECC数据存储系统的每个物理块最后两个物理页作为物理块的冗余区域,用于存放物理块内其他物理页的纠错码,通过页号计算纠错码在页内的偏移。
作为本发明的进一步改进,ECC数据存储系统的物理页N的纠错码存放于N*14开始地址,一旦超过1024Byte,则存放下一个物理页;读写数据时,纠错码的地址不需要额外保存,只需要通过N*14+物理页126对应地址即可计算。
本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序配置为由处理器调用时实现所述的方法的步骤。
本发明的有益效果是:1.将用户数据与ECC纠错码分开存放,通过内在地址关联,简单的计算就可以计算出用户数据所对应的ECC纠错码。同时用户空间损失较少,无效空间占比由50%降为(2/128=)1.56%,极大提高用户可见空间;2.采用数据页存放ECC partiy数据,比flash的冗余空间大,可以对Flash采用更大的ECC模式,保证数据的稳定性,同时具有高扩展性。
附图说明
图1是用户数据带ECC数据图。
图2是全部存放用户数据图。
图3是本发明的方法流程图。
图4是本发明闪存数据存储图。
图5是本发明的Flash内部数据存储图。
具体实施方式
如图3所示,本发明公开了一种ECC数据存储方法,包括依次执行如下步骤:
计算步骤:控制器内部的ECC硬件模块根据用户数据计算并生成ECC parity,所述ECC parity用于后续进行检测和修正校验码;
发送步骤:申请一个空闲的数据页地址,发送整页编程命令,将用户数据写入Flash;
第一判断步骤:判断编程是否正常,如果是那么执行写入步骤,否则执行用户数据写入步骤;
写入步骤:根据空闲的数据页地址找到对应的ecc保存地址,发送单字节编程命令,将ECC parity数据写入Flash;
第二判断步骤:判断编程是否正常,如果是那么退出,否则执行用户数据写入步骤;
用户数据写入步骤:换一个物理块(block)发送整页编程命令,将用户数据写入Flash,然后执行第三判断步骤;
第三判断步骤:判断编程是否正常,如果是执行写入步骤,否则退出。
在所述计算步骤之前还执行如下步骤:
用户数据发送步骤:主机发送用户数据;
用户数据接收步骤:从主机接收用户数据。
ECC数据存储方法的每个物理块最后两个物理页(page)作为物理块的冗余区域,用于存放物理块内其他物理页的纠错码,通过页号计算纠错码在页内的偏移。
ECC数据存储方法的物理页N的纠错码存放于N*14开始地址,一旦超过1024Byte,则存放下一个物理页;读写数据时,纠错码的地址不需要额外保存,只需要通过N*14+物理页126对应地址即可计算。
如图4所示,假设闪存有512个block,每个block内有128个page,每个page内可以存放1024个Byte。由于不同的ECC对应的纠错码长度是不一样的,假如采用8bit/1024,对应的纠错码长度为14Byte。
每个block最后两个page作为block的冗余区域,专门用于存放block内其他物理页的纠错码,通过页号计算纠错码在页内的偏移,例如:page 0写入1024BYTE用户数据,对应的ECC纠错码存放于126page的offset 0开始,长度14Byte。Page N的纠错码存放于N*14开始地址,一旦超过1024Byte,则存放下一个页,ECC纠错能力越强,对应的纠错码越多,但是对应算法只需要每个block保留多一个页,即可完美支持。
ECC的全称是Erro Checking and Correction or Error correction Coding,是一种用差错检测和修正的算法。
用户数据经过ECC硬件模会产生一定长度的ECC parity数据,数据长度由ECC纠错bit数据决定。
读写数据时,纠错码的地址不需要额外保存,只需要通过N*14+page126对应地址即可计算,减少嵌入式的RAM开销,提高系统响应速度。
本发明还公开了一种ECC数据存储系统,包括:
计算单元:用于控制器内部的ECC硬件模块根据用户数据计算并生成ECC parity,所述ECC parity用于后续进行检测和修正校验码;
发送单元:申请一个空闲的数据页地址,用于发送整页编程命令,将用户数据写入Flash;
第一判断单元:用于判断编程是否正常,如果是那么执行写入单元,否则执行用户数据写入单元;
写入单元:根据空闲的数据页地址找到对应的ecc保存地址,用于发送单字节编程命令,将ECC parity数据写入Flash;
第二判断单元:用于判断编程是否正常,如果是那么退出,否则执行用户数据写入单元;
用户数据写入单元:用于换一个物理块发送整页编程命令,将用户数据写入Flash,然后执行第三判断单元;
第三判断单元:用于判断编程是否正常,如果是执行写入单元,否则退出。
在所述计算单元之前还执行如下单元:
用户数据发送单元:用于主机发送用户数据;
用户数据接收单元:用于从主机接收用户数据。
ECC数据存储系统的每个物理块最后两个物理页作为物理块的冗余区域,用于存放物理块内其他物理页的纠错码,通过页号计算纠错码在页内的偏移。
ECC数据存储系统的物理页N的纠错码存放于N*14开始地址,一旦超过1024Byte,则存放下一个物理页;读写数据时,纠错码的地址不需要额外保存,只需要通过N*14+物理页126对应地址即可计算。
本发明还公开了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序配置为由处理器调用时实现所述的方法的步骤。
本发明的有益效果是:1.将用户数据与ECC纠错码分开存放,通过内在地址关联,简单的计算就可以计算出用户数据所对应的ECC纠错码。如图5所示,同时用户空间损失较少,无效空间占比由50%降为(2/128=)1.56%,极大提高用户可见空间;2.采用数据页存放ECC partiy数据,比flash的冗余空间大,可以对Flash采用更大的ECC模式,保证数据的稳定性,同时具有高扩展性。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。