一种对压缩数据进行纠错编码的方法和装置与流程

    专利2022-07-08  83


    本发明一般涉及数据管理和完整性领域,尤其涉及压缩数据中的纠错,以及闪存中纠错的方法和装置。



    背景技术:

    信息化时代每时每刻都在创建各种电子数据,因此数据存储需求极速增长。目前已经开发了各种技术和装置来存储数据。数据存储器常常包括硬件组件和存储数据的存储介质。存储介质的实例包括穿孔卡片、硬盘、软盘、磁带、光盘及半导体。在基于半导体的存储介质当中,闪存(flashmemory)是一种可电擦除和重新编程的非易失性存储器,在许多应用中得到了广泛的应用。闪存的一个普遍应用是固态驱动器(ssd,俗称固态硬盘),其可以极小的尺寸容纳庞大数量的数据,从而为许多工业级乃至消费级用户提供各种新的应用。

    闪存的问题之一是由于存储器磨损、读干扰、写干扰、过度编程、电荷泄露等引起的数据错误。随着nand(与非型)闪存技术的发展和多层级单元(mlc)技术的进步,尤其是纳米级工艺几何结构的发展,这些错误越来越引起人们的关注。纠错码(errorcorrectioncodeorerrorcorrectingcode,简称ecc)普遍应用于nand闪存,以检测和校正闪存中可能出现的误码。然而,闪存的误码率随着编程/擦除周期的数目及技术的扩展而增加。因此,需要使用更有效的错误检测和纠正方案(edc)来应用在闪存中。在不添加额外成本或不影响操作性能的情况下,还需要一种技术,该技术可轻松用于支持更高的误码率,并提高nand闪存的寿命。

    为了增加存储容量,数据最好在存储到闪存介质之前被压缩。为了更有效地将edc过程应用于压缩数据,还需要一种在应用edc过程之前组织或预处理所述压缩数据的技术。



    技术实现要素:

    本部分的目的在于概述本发明的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本申请的说明书摘要和发明名称中可能会做些简化或省略以避免使本部分、说明书摘要和发明名称的目的模糊,而这种简化或省略不能用于限制本发明的范围。

    本发明一般涉及用于压缩数据的误码检测和校正(edc)的方法和装置。根据本发明的一个方面,数据在存储到不可靠环境前,将数据以一种压缩方法执行压缩,处理成固定大小的数据堆后进行一维或多维ecc编码,其中所述固定大小与flash颗粒的页大小有关。相应地,在应用错误检测和校正后,压缩数据段被完全恢复。随后,恢复的压缩数据被解压缩以恢复原始数据。

    根据本发明的另一个方面,压缩后的数据段被分配到预定义大小的数据包中,并沿一个维度计算一组ecc(编码)并补充到预留空间中。这些数据包还被进一步地沿另一个维度计算ecc编码,以方便在数据恢复时,可以在多个维度的上进行纠错。

    根据本发明的另一个方面,可以通过补充已知值、或者拼接压缩数据段等不同的方法得到等长的数据包。

    根据本发明的另一个方面,设计一个闪存控制器来执行一组固件,以生成大小相等的数据包,并对数据进行多个维度的编码。

    本发明可实施为一种装置、方法及系统的一部分。不同实施方案可产生不同益处、目标和优点。在一个实施例中,本发明是一种存储压缩数据的装置,该装置包括:用于从主机设备接收数据流的接口;用于维护一组固件和一个或多个映射表的内存空间;处理器,耦合到内存空间,执行固件完成以下操作:根据压缩算法将数据流压缩成长度不同的多个数据段;将数据段整理成多个符合预定义第一长度的数据包,其中所述多个数据包被二维排布;和用第一预定义的纠错码方案沿着第一维方向对每一数据包编码。所述操作进一步包括:用第二预定义的纠错码方案沿着第二维度方向对每一数据包中的每个数据位编码;和,通过第一预定义的纠错码编码和第二预定义的纠错码编码,创建了一个包括所述数据包和冗余位在内的数据阵列。

    在另一实施例中,本发明是一种存储压缩数据的方法,该方法包括:从与主机设备通信的接口接收数据流;根据压缩算法将数据流压缩成长度不同的多个数据段;将数据段整理成多个符合预定义第一长度的数据包,其中所述多个数据包被二维排布;用第一预定义的纠错码方案沿着第一维方向对每一数据包编码。所述操作进一步包括:用第二预定义的纠错码方案沿着第二维度方向对每一数据包中的每个数据位编码;和通过第一预定义的纠错码编码和第二预定义的纠错码编码,创建了一个包括所述数据包和冗余位在内的数据阵列。

    关于本发明的其他目的,特征以及优点,下面将结合附图在具体实施方式中详细描述。

    附图说明

    接下来的具体实施方式、后面的权利要求以及附图将有助于了解本发明的具体特征,各实施例以及优点,其中:

    图1示出了一个典型的固态硬盘(ssd)架构,包括了1个ssd控制器,1个ram缓冲器,1个闪存封装以及一个接口;

    图2a示出了一个本发明实施例中典型的flash控制器的逻辑框图;

    图2b示出了一种应用预定义的二维ecc的示例;

    图2c根据本发明的一个实施例,展示了一种用ecc编码原始数据位的示例性方法;

    图2d根据本发明的一个实施例,展示了另一种用ecc编码原始数据位的示例性方法;

    图3a根据本发明的一个实施例,展示了将数据流写入闪存阵列的流程图或过程;

    图3b展示了图3a的操作中提到的关于如何整理和放置压缩数据段到一个页的示意;

    图3c展示了一个默认页空间分配和一个存储压缩数据和冗余位的相应页分配示例;

    图3d展示了如何基于图3c形成图3a操作中提到的二维数据阵列;

    图3e根据本发明的一个实施例,展示了被存储的数据的处理和纠错流程图或过程。

    具体实施方式

    本发明的详细描述主要通过程序、步骤、逻辑块、过程或其他象征性的描述来直接或间接地模拟本发明技术方案的运作。为透彻的理解本发明,在接下来的描述中陈述了很多特定细节。而在没有这些特定细节时,本发明则可能仍可实现。所属领域内的技术人员使用此处的这些描述和陈述向所属领域内的其他技术人员有效的介绍他们的工作本质。换句话说,为避免混淆本发明的目的,由于熟知的方法和程序已经容易理解,因此它们并未被详细描述。

    此处所称的“一个实施例”或“实施例”是指可包括于本发明至少一个实现方式中的特定特征、结构或特性。在本说明书中不同地方出现的“在一个实施例中”并非均指同一个实施例,也不是单独的或选择性的与其他实施例互相排斥的实施例。此外,表示一个或多个实施例的方法、流程图或功能框图中的模块顺序并非固定的指代任何特定顺序,也不构成对本发明的限制。

    本发明中的重要目的、优点和益处之一是保障数据完整性和提高数据在通信或存储单元中尤其在nand闪存单元中的可靠性。图1示出了包括ssd控制器102、ram缓冲器104、闪存阵列106及主机接口108的固态装置(ssd,也可以称之为固态硬盘或固态驱动器)100的示例性架构。ssd控制器102管理存储在所述闪存阵列(或称闪存封装)106上的数据并与主机装置通信。当主机装置需要从ssd100中读取数据或将数据写入到所述ssd100中时,其将与ssd控制器102通信。通过主机接口108(例如,esata、usb、emmc、cf卡、sd/microsd卡及pcie),来自主机装置(图中未示)的数据在ssd控制器102中被耦合、处理,且存储在存储介质中,即存储在闪存阵列106中。各种映射表由ssd控制器102维护,以记录所述数据如何在闪存阵列106上分布的位置,其中一张或多张映射表记录数据或数据位(databits,或称数据比特)在闪存阵列106中存储的位置。在一些高性能的ssd中,所述ram缓冲器104被提供以增加实时可用的映射表数据的量并且高速缓存已经主机装置写入的数据。

    ssd控制器102包括闪存控制器110、处理器112和缓冲器管理器114。在处理器112的控制下,闪存控制器110和缓冲器管理器114执行某一固件以管理所述数据在所述闪存阵列106中的确切的存储位置及存储方式,以及当主机装置需要所述数据中的一些或全部时可以有选择性地定位并读出存储的数据。根据本发明的一个实施例,一个版本的固件设计用于实现存储压缩数据到闪存阵列106中,另一个版本的固件设计用于在存储的数据中嵌入纠错码,在需要数据的情况下,可以有效地检测和纠正对存储数据中可能存在的错误。

    图2a显示了一个示例性逻辑框图200,可以根据本发明的一个实施例在闪存控制器110或处理器112中实现。一个数据压缩引擎202,用于压缩传入的数据流210。数据压缩可以减少要表示的数据位数,因此压缩数据可以节省存储空间,加快文件传输速度,以及降低存储硬件和网络带宽的成本。压缩是按照公式或算法来确定如何缩小数据的大小。不同的算法可能会导致不同的压缩结果。所属领域内的技术人员应当了解现有技术中有许多压缩算法,因此,压缩细节将不会在此进一步描述。数据流210被压缩后,数据压缩引擎202将产生许多不同的长度的数据段。

    一个数据整合引擎203被用来将所述数据段整理成数据包。通常,根据每个原始数据段可以被压缩的多少,压缩的数据段长度会不同。正如下面将描述的那样,最好在将数据发送到数据编码引擎204以添加ecc代码或冗余数据位之前,将所有数据包长度保持一致。所述数据整合引擎203将输出许多数据包。根据本发明的一个实施例,每个数据包是预定义长度(例如,8kb或16kb长)的数据位线性阵列。正如下面将进一步描述的那样,数据包是基于一个或多个带或不带填充位的数据段生成的。

    在ecc编码引擎204中,数据包将以预定义的ecc方案执行编码,编码后的数据将被存储到所述闪存阵列106中。当存储的数据被主机请求,需要从所述闪存阵列106中读出时,首先通过映射表(未作详细描述)找到被存储的数据在闪存阵列106中的位置,然后在译码引擎206中继续ecc译码。译码完成后的数据被送入压缩数据恢复引擎207以恢复所述数据段,即剥离被压缩的数据。然后经过数据解压缩引擎208将所述数据段再解压缩恢复成原始数据,最后传输给数据流208。

    本发明中的目的、优点和益处之一是对压缩数据进行编码。所属领域内的技术人员应当了解如果需要的话,相同的编码和译码技术可以同样应用于未压缩的数据。由于nand内存固有的不可靠性质,存储在nandflash中的数据可能无法保持其正确的值,即数据位意外翻转。从统计学上来讲,数据比特的数量受影响较小且容易描述,因此处理器或闪存控制器可以利用ecc的协调水平来提高数据的可靠性。

    如本领域已知的,纠错码(ecc)是以二进制数字形式传输数据的编码方案,以至于即使一些位被错误地翻转,所述数据也可被恢复。几乎所有数据传输情况都有使用不同的ecc方法,尤其时在数据存储时,ecc防止数据损坏。在一个实施方案中,ecc是一种算法,表示在数据序列中嵌入或添加一些冗余信息,以至于可基于冗余信息检测并校正被意外地翻转(例如,从“0”到“1”或从“1”到“0”)的有限数目的数据位。当数据存储在非易失性存储器中时,拥有能够检测和纠正一定数量错误的机制是至关重要的。

    纠错码(ecc)可将k个数据位编码为被称作码字的n位的块。块码(线性或非线性)在固定的数据长度下有效地工作,获取k个数据位并且计算m个校验位,其中m=n-k。一般来说,m越大,那么ecc能够校正的错误越多。为了最大化给定的闪存阵列中的数据存储容量,长度m实际上是有限的。本文中的错误通常指一个或多个其值被意外翻转的数据位或数据比特。

    图2b示出了在水平方向及垂直方向两个维度上应用ecc编码的实例。与简单的将ecc编码应用于一连串数据位(也可称为一个数据比特序列)一次的传统使用不同,根据一个实施例,ecc编码首先水平地应用于所述数据,然后垂直地应用于所述数据,反之亦可以。在操作中,沿着水平方向的原始数据首先运用预定义ecc方案来编码,从而产生若干行码字r1、r2……rn(原始数据 ecc的校验位或其它比特)。

    根据一个实施例,使用基于汉明码(hammingcode)的ecc方案。汉明码是一组纠错码,其可用于检测并校正被引入到编码数据的错误。举例来说,如果数据位(也可称数据比特)的数目是7,那么冗余位(也可称冗余比特)的数目是4,从而满足2^r≥m r 1,其中r=冗余位,m=数据位。在所述数据位用所述冗余位编码之后,码字的长度是11个位。图2b示出了在每一行中,数据位为d1位或宽度为x,校验或冗余位为e1位。即使所述冗余位被集中地、图形化地显示在所述数据位的末尾,所属领域的技术人员可了解,这e1个冗余位常常在d1个数据位内编码。

    在垂直地应用预定义ecc方案后,现在存在n行码字。尽管垂直地应用的ecc方案不必与已经水平地应用的ecc方案相同,但在本文中假设垂直应用的ecc和水平应用的ecc都是相同的。一个差异是沿着垂直方向(第二维度)的数据位并非来自一行的数据位。这些数据位是来自各行码字,并按照ecc方案通过一组冗余码进行编码。所属领域的技术人员应理解,如上文所描述的ecc操作可首先垂直地应用,接着水平地被应用。

    图2d示出了根据本发明的一个实施例的运用ecc对原始数据位进行编码的另一方式。在操作中,预定义的ecc操作同时或依次应用于水平及垂直数据位。在冗余位嵌入于原始数据位中的状况下,它们可被放置到一排数据位的端部,以确保原始数据位均通过ecc进行编码。

    图3a示出了根据本发明的一个实施例的将数据流写入到闪存阵列中的流程300。可结合图2a到2d来较佳地了解所述流程300,所述流程300可以以硬件或软件(例如,固件)与硬件的组合的方式来实施。所述流程300在302处接收或耦合数据流时开始。所述数据流可以是来自主机装置(例如,笔记本电脑)的文件、相片及音频/视频。当用户希望将文件存储到存储装置(例如,ssd固态装置100)中时,接收所述数据流。

    在304处,根据压缩方案压缩所述数据流。这里可以应用很多数据压缩方案,例如lz77算法或者霍夫曼算法。lz77算法可参考“auniversalalgorithmforsequentialdatacompression”,ieeetransactionsoninformationtheory,vol.it-23,no.3,may1977。霍夫曼算法资料可参考维基百科(https://en.wikipedia.org/wiki/huffman_coding)。数据流经压缩后,流程300将执行到306,在306处,根据所选择的ecc(例如,汉明码或bch码)进行预处理形成数据包的二维阵列。

    如本文中所使用的,数据包的二维阵列是由一些列固定长度的数据行组成的。根据本发明的实施例,这些行的数据刚好放入到所述闪存阵列中的一页(page),而这些页刚好放入到所述闪存阵列中的块中。应注意,块是闪存中可被擦除的最小单元,而页是闪存中可被编程(即,被写入其中)的最小单元。块大小通常在4到8mb的范围内,页大小通常在8到16kb的范围内。nand闪存的架构意味着数据通常以页的形式被写入或读取,其典型的大小在4kb与16kb之间,但仅可在由多个页组成的整个块的层级上被擦除,其大小时以mb为单位。

    在304执行数据压缩后,被压缩的数据段通常拥有不同的长度。根据序列中有多少连续重复位,压缩数据序列的长度(这里称为数据段)是非常不同的。一般来说,数据序列中的连续重复位越多,数据段就越短。在306处,在整理形成数据包的二维阵列时,根据本发明的一个实施例,操作307和308被执行。图3b进一步展示了关于操作307中如何整理和放置压缩数据段到一个页的过程。

    如图3b所示,传入的数据流320被视为多个数据序列322,这些数据序列可以按照协议规定是等长的。经过图3a的数据压缩后,每一个数据序列322都被压缩,产生(压缩)数据段324,这些数据段通常是不等长的。当将数据段324写入闪存中的固定页时,还需要附加来自ecc的冗余位。页中的任何额外单元应在图3a的过程300之前使用。

    根据本发明的一个实施例,闪存中的每个页应容纳尽可能多的数据段324,以获得最大容量。假设需要一个闪存块来容纳这些由数据段(例如kxm),这些数据段来自压缩数据段324的数据页,其中k或m是整数。应当指出,形成一页数据并不意味着在此阶段将数据写入闪存的页。如上所述,页是闪存中可以编程(即写)的最小单元,形成一页数据只是在将数据写入闪存之前的准备。根据实际情况,可以通过ram或数据通道进行预处理。

    如326的阵列所示,在页中放置1个数据段(数据段1或简称cd1)后,仍有额外的空间。根据本发明的一个实施例,除了预留一段预定大小的空间用来存储ecc冗余位,页中剩余的空间可以用来容纳更多的数据段,如cd2和cd3(如示例1)。在容纳cd2和cd3后,页中可能仍有一些空间,但却不够再容纳下一个数据段。这段空间可以填补一些已知值,如全“0”或者全“1”。换句话说,一页的空间应当尽可能容纳更多的完整的数据段,剩下的空间将填充已知值。对后续的页也执行同样的操作,直至所有的数据段324被消耗完。通常,1个块包括预定义大小的页,假设1个块中包括k页,且足够容纳数据段324。在页中尽可能多得容纳完整的数据段,但仍可能在这个块中会有一定的页被省下来没有被填充数据。根据本发明的一个实施例,这些被剩下的页同样被填充已知值。一个块也可能没办法容纳全部的数据段324,此时需要分配第2个块。同样的,任何被留下的页都将被填充已知值。

    不同的制造商可能会生产不同大小的页的闪存,通常一页的大小为千字节(kb或1024b)或兆字节(mb或1024kb)。无论如何,页面大小通常略大于nkb或nmb(n是整数),例如8.2kb,其中额外的位容量(200字节)是用来存储ecc代码或来自ecc方案的冗余代码。图3c显示了默认页空间分配330的示例。它有一个用于存储数据的第一数据区域332和一个用于存储ecc代码或冗余位的第二数据区域。如果需要更多的恢复能力,就需要更多的冗余代码。因此将原始数据序列直接存储到第330中的页,其数据制恢复能力将受限,因为330种第二个数据区域是有限的。而在压缩数据的情况下,数据段通常比原始数据序列短,因此在第一个数据区域中将有更多的可用空间。这些可用空间可以用来容纳一些ecc代码或冗余位,也就是说,第二个数据区域可以扩展到第一个数据区域。图3c中也展示了一种相应的压缩数据在页中的分配示意336。由于要存储在页面中的数据已经被压缩,所以在第一个数据区域中有一些未占用的空间。因此,第二数据区域可以根据需要扩展到第一数据区域,以提高数据恢复(检测和校正错误码)能力。

    重新回到图3b,这里还展示了另外一种页容纳多个数据段的示例。区别于第一个示例,第二个示例允许将段分解为两个部分,其中第一个部分与其他完整段一起填充整个页。在操作中,一个页被填充了几个完整的数据段,占用了页在中的大部分空间,根据页中留下多少空间,随后的数据段可以被分成两块,第一块用于接在页中的剩余部分,第二块则从下一页开始。如块328所示,第一页填充了两个完整的数据段cd1和cd2,但仍有一些空间未使用。如果直接容纳第三段cd3,这对页中的剩余空间来说太大了。根据第二个例子,将第三段cd3按页中剩余空间分成两部分。因此,数据段cd3的第一部分被切割只是为了填充第1页的剩余空间,数据段cd3的第二部分,即段cd3的剩余部分,则用于先填充第2页,然后是其他完整的数据段。从本质上讲,大多数页面都被填充了数据段324。最后,块328中剩余的可用页用已知位填充。

    现在参考图3d,它展示了如何基于图3c形成图3a中操作308提到的二维数据阵列。1个数据页350种包括了实际数据(压缩后)和预留的冗余位,被整理成一个数据阵列。根据本发明的一个实施例,将第一个数据区域中的数据重新排列成两个维度jxk,其中j和k根据页大小(或长度)预先设置好。冗余位的保留空间也降平均分配给j行。每行被分配一部分空间,用于存储应用于该行的ecc编码计算的冗余位。冗余位的预留大小是固定的或预先分配的,这取决于该行的ecc算法。

    现返回参考图3a,在309处,当306生成数据包的二维阵列的同时,将创建或更新映射表。在310处,预定义的ecc被应用在行数据或新形成的数据包上。在操作中,这些数据位被编码并计算冗余位。第一数据区域中的数据和来自ecc的冗余位被一起写到闪存阵列(如页)。操作310可以在两个维度中对数据的每一行重复,或者在整个块的一个维度上进行。

    在312处,流程300选择另一个维度方向,返回执行310。根据本发明的一个实施例,在一个实施例中,维度是2,即水平及垂直。如果第一遍是用于水平维度,那么第二遍用于垂直维度。如上文所描述,水平编码是跨整个数据包执行的。沿垂直编码的细微差别是,操作310是在水平形成的每个数据包中选择一个数据位上进行的。图3d里用1条扫描线354来指示垂直编码方向,即在每个水平形成的数据包中取一个数据位,进行垂直编码。

    现返回参考图3a,数据包(码字)存储在已分配的闪存阵列空间中,并且由一个或多个映射表管理。一旦数据被水平且垂直地编码,那么过程300执行到314以将数据全部写入到所述闪存阵列中。

    图3e示出了根据本发明的一个实施例的检测及校正所存储的数据中的错误的流程360。可结合图2a-2d及图3a-3d较佳地了解所述流程360,所述流程360以硬件或以软件(例如,固件)与硬件的组合来实施。在存在来自主机装置(例如,媒体播放器)的文件的数据请求时,所述流程360开始,其中所述文件的数据存储在所述闪存阵列中。在接收所述请求后,所述闪存控制器检查可存储在单独的存储器(例如,ram)或所述闪存阵列中的映射表。基于给定映射表,所请求文件的数据被在所述闪存阵列中定位,数据位被读出以在其被发出或变得可用于主机装置之前首先被错误检测及校正。

    所述映射表是为了方便将来自文件系统的逻辑地址转换为所述闪存阵列的物理地址。当所述文件被写入或保存在所述闪存中时,创建或更新映射表。在364处,访问存储的映射表,以在366处基于所述映射表读出与所请求文件相关的数据位。然而,存储的一些数据位可能已损坏,例如“1”到“0”或“0”到“1”。

    在368处,根据记录的ecc检查这些数据位以查看是否存在任何错误。如果存在一些错误,根据错误的数目,它们可以很容易地被纠正或通过额外的努力来纠正。对于每次ecc,如果错误的数目超过阈值(校正极限),那么无法校正所述错误且将报告错误。假设错误的数量低于阈值(例如,数据包或页存在5或20个错误位),通过368和370的ecc过程可以检测和纠正读出数据位中可能存在的错误。如上文描述,ecc基于两个维度进行编码,因此可以重复应用以纠正更多的错误或隔离一个或多个不可纠正的错误群,或者通过额外的方法(例如,排除给定填充已知值的错误数目及其在数据段中的位置)。根据本发明的另一个实施例,不可纠正的矩阵中的所有值都是反向的,其细节在共同拥有与和共同待决的专利(其美国申请号为16/827,192)中,在此作为参考资料引用。

    在372处,移除所有已知的所填补数据位。如上文所描述,所填补数据位均为已知值。根据本发明的另一个实施例,这些所填补数据位的位置也用于促进在368处校正这些位置中的一些或全部处的可能错误以进一步缩减错误。还应注意,一些填补数据位用作参数,以指示闪存中的下一页中的后续内容。当一个压缩数据段被分成两个或多个片段,分布在一个或多个页面上时,可能需要一些参数或符号来指示下一个片段在哪里,以便于来自多个页面的数据段的恢复。读出解码后的数据,并假设可纠正的错误已被纠正。

    数据段被读出,并假定可纠正的错误已经被纠正。在374处,压缩数据段被解压以恢复所请求的文件的原始数据。

    虽然已参考特定实施例描述本发明,但描述说明本发明并且不应被理解为限制本发明。所属领域的技术人员可在不脱离如所附权利要求书限定的本发明的真实精神和范围的情况下对优选实施例做出本发明的各种修改。因此,本发明的范围由所附权利要求书而非前文实施例的描述限定。


    技术特征:

    1.一种用于存储压缩数据的装置,其特征在于,该装置包括:

    用于从主机设备接收数据流的接口;

    用于维护一组固件和一个或多个映射表的内存空间;

    处理器,耦合到内存空间,执行固件完成以下操作:

    根据压缩算法将所述数据流压缩成长度不同的多个数据段;

    将所述数据段整理成多个符合预定义第一长度的数据包,其中所述多个数据包被二维排布;和

    用第一预定义的纠错码方案沿着第一维方向对每一数据包编码。

    2.一种存储压缩数据的方法,其特征在于,该方法包括:

    从与主机设备通信的接口接收数据流;

    根据压缩算法将数据流压缩成长度不同的多个数据段;

    将数据段整理成多个符合预定义第一长度的数据包,其中所述多个数据包被二维排布;

    用第一预定义的纠错码方案沿着第一维方向对每一数据包编码。

    3.根据权利要求1或2所述的装置或方法,其特征在于,所述操作或所述方法进一步包括:

    用第二预定义的纠错码方案沿着第二维度方向对每一数据包中的每个数据位编码;和

    通过第一预定义的纠错码编码和第二预定义的纠错码编码,创建了一个包括所述数据包和冗余位在内的数据阵列。

    4.根据权利要求3所述的装置或方法,其特征在于,第一预定义的纠错码编码和第二预定义的纠错码编码是相同的。

    5.根据权利要求1或2所述的装置或方法,其特征在于,所述将数据段整理成多个符合预定义第一长度的数据包,进一步包括:

    预留固定长度的空间,用于存储由第一预定义的纠错码方案形成的冗余位;

    将一些已知值填充到每个数据包中以满足所述预定义第一长度。

    6.根据权利要求5所述的装置或方法,其特征在于,填充数据位的位置是预先确定的,填充数据位用于在恢复所述数据段时,检测和纠正引入的错误。

    7.根据权利要求5所述的装置或方法,其特征在于,所述数据包包括至少一个数据段、由第一预定义的纠错码方案编码形成的冗余位以及填充数据位。

    8.根据权利要求7所述的装置或方法,其特征在于,所述操作或所述方法进一步还包括以下操作:

    维护一个或多个映射表,以记录所述数据包的位置、第一预定义的纠错码方案产生的冗余位和填充数据位的物理位置。

    9.根据权利要求1或2所述的装置或方法,其特征在于,所述将数据段整理成多个符合预定义第一长度的数据包进一步包括:

    将所述数据段按顺序添加到所述数据包中;和

    将一个数据段分解成至少两个部分,当前一个数据段计算冗余位长度后仍不满足预定义第一长度时,其中一个部分用于填充前一个数据包中的剩余空间。

    10.根据权利要求8所述的装置或方法,其特征在于,所述操作或所述方法进一步还包括以下操作:

    维护一个或多个映射表,以记录所述数据段如何被分解成至少两个部分,所述数据包的位置以及第一预定义的纠错码方案产生的冗余位。

    11.根据权利要求9所述的装置或方法,其特征在于,所述数据包及第一预定义的纠错码方案产生的冗余位都将完整得写入闪存阵列中的一个页里。

    技术总结
    本发明介绍了用于存储压缩数据的装置和方法。所述用于存储压缩数据的装置,该装置包括:用于从主机设备接收数据流的接口;用于维护一组固件和一个或多个映射表的内存空间;处理器,耦合到内存空间,执行固件完成以下操作:根据压缩算法将数据流压缩成长度不同的多个数据段;将数据段整理成多个符合预定义第一长度的数据包,所述多个数据包被二维排布;和,用第一预定义的纠错码方案沿着第一维方向对每一数据包编码。上述装置和方法被设计用来将不同大小的压缩数据段构造成预定义大小的数据包,并且将这些数据包用ECC进行二维编码。当数据包被读出时,通过二维的ECC译码来检测和纠正可以纠正的错误,也可以重复执行纠错。

    技术研发人员:骆建军;刘海銮;陈华月;楚传仁
    受保护的技术使用者:杭州华澜微电子股份有限公司
    技术研发日:2020.11.16
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-22823.html

    最新回复(0)