发明内容
鉴于上述现有技术的不足,本发明的目的在于提供一种Flash数据写入方法及装置,旨在解决现有技术中Nand Flash纠错算法纠错时间长,增加时间成本的技术问题。
本发明的技术方案如下:
一种Flash数据写入方法,所述方法包括:
通过第一硬件算法对Flash的品质进行检测,判断Flash的品质是否满足第一硬件设备的预设的硬件要求;
若检测到Flash的品质不满足第一硬件设备的预设的硬件要求,则将Flash参数信息写入Flash的指定位置;
通过第二硬件算法读取Flash的指定位置的Flash参数信息,将Flash参数信息写入第二硬件设备中。
进一步地,所述若检测到Flash的品质不满足第一硬件设备的预设的硬件要求,则将Flash参数信息写入Flash的指定位置,包括:
若检测到Flash的品质不满足第一硬件设备的预设的硬件要求,则将Flash参数信息进行加扰处理后生成加扰数据,将加扰数据写入Flash的指定位置。
进一步优选地,所述将Flash参数信息进行加扰处理后生成加扰数据,将加扰数据写入Flash的指定位置,包括:
通过随机数字生成器对Flash参数信息进行加扰处理生成加扰数据;
对加扰数据进行ecc编码生成编码后的加扰数据,将编码后的加扰数据通过USB接口写入Flash的指定位置。
进一步优选地,所述通过第二硬件算法读取Flash的指定位置的Flash参数信息,将Flash参数信息写入第二硬件设备中,包括:
通过第二硬件算法读取Flash的指定位置的编码后的加扰数据,对编码后的加扰数据进行ecc解码,将解码后的加扰数据发送给随机数字生成器;
通过随机数字生成器对加扰数据进行去扰处理,获取Flash参数信息,将Flash参数信息写入第二硬件设备。
优选地,所述对编码后的加扰数据进行ecc解码,将解码后的加扰数据发送给随机数字生成器,包括:
对编码后的加扰数据进行ecc解码,判断解码过程中是否存在错误字节;
若解码过程不存在错误字节,则将解码后的加扰数据发送给随机数字生成器;
若解码过程中存在错误字节,且错误字节在纠错范围内,则计算错误字节位置,并对错误字节进行纠错处理,在完成纠错处理后将解码后的加扰数据发送给随机数字生成器。
进一步地,所述对加扰数据进行ecc编码生成编码后的加扰数据,包括:
获取加扰数据中一个字节的数据,对所述字节进行取反保存到数组中;
将数组与生成的BCH表进行异或处理;
循环处理完加扰数据的所有字节后,生成BCH加密数据,将BCH加密数据添加至加扰数据的数据尾部,生成编码后的加扰数据。
进一步地,所述对编码后的加扰数据进行ecc解码,包括:
对编码后的加扰数据进行syndrm计算生成第一解码数据;
对第一解码数据进行elp计算生成第二解码数据;
对第二解码数据进行chien搜索及纠错处理后,生成解码后的加扰数据。
本发明的另一实施例提供了一种Flash数据写入装置,所述装置包括至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的Flash数据写入方法。
本发明的另一实施例还提供了一种非易失性计算机可读存储介质,所述非易失性计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行时,可使得所述一个或多个处理器执行上述的Flash数据写入方法。
本发明的另一种实施例提供了一种计算机程序产品,所述计算机程序产品包括存储在非易失性计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被处理器执行时,使所述处理器执行上述的Flash数据写入方法。
有益效果:本发明实施例通过在软件层面进行数据写入,在第一种算法上处理后如果Nand Flash品质达不到该硬件要求,则会把flash相关信息写入flash的指定位置,换到第二套硬件算法中直接读出已经写入的算法进行加密后写入到新的硬件中,耗时2-10分钟,通过软件算法处理即可完成节省时间成本。
具体实施方式
为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。以下结合附图对本发明实施例进行介绍。
本发明实施例提供了一种Flash数据写入方法。请参阅图1,图1为本发明一种Flash数据写入方法较佳实施例的流程图。如图1所示,其包括步骤:
步骤S100、通过第一硬件算法对Flash的品质进行检测,判断Flash的品质是否满足第一硬件设备的预设的硬件要求,如果是,则执行步骤S400,如果否,则执行步骤S200;
步骤S200、Flash参数信息写入Flash的指定位置;
步骤S300、通过第二硬件算法读取Flash的指定位置的Flash参数信息,将Flash参数信息写入第二硬件设备中;
步骤S400、将Flash参数信息写入第一硬件设备中。
具体实施时,本发明实施例的算法是通过软件进行处理,在第一种硬件算法上处理后如果Nand Flash品质达不到该硬件要求,则会把flash相关信息写入flash的指定位置,换到第二套硬件算法中直接读出已经写入的算法进行加密后写入到新的硬件中(耗时2-10分钟),通过软件算法处理即可完成节省时间成本。
以第一硬件设备为USB3.0,第二硬件设备为USB2.0为例,本发明实施例在批量加工Nand Flash成品过程中可节约一倍的时间,即同一个型号的Nand Flash会存在品质差异,一些能做USB3.0产品,另外一些只能做USB2.0产品,这样在批量加工时只需要在USB3.0的硬件方案上处理(耗时2-8小时),不能做USB3.0的产品切换为USB2.0的硬件后使用该算法则不需要进行再次处理(耗时2-8小时)就能得到USB2.0产品。
进一步地,若检测到Flash的品质不满足第一硬件设备的预设的硬件要求,则将Flash参数信息写入Flash的指定位置,包括:
若检测到Flash的品质不满足第一硬件设备的预设的硬件要求,则将Flash参数信息进行加扰处理后生成加扰数据,将加扰数据写入Flash的指定位置。
具体实施时,若检测到Flash的品质不满足第一硬件设备的预设的硬件要求,对Flash参数进行加密,加密操作可通过Flash参数信息进行加扰处理实现,将加扰数据写入Flash的指定位置后,方便下一步直接从Flash中读取。
进一步地,将Flash参数信息进行加扰处理后生成加扰数据,将加扰数据写入Flash的指定位置,包括:
通过随机数字生成器对Flash参数信息进行加扰处理生成加扰数据;
对加扰数据进行ecc编码生成编码后的加扰数据,将编码后的加扰数据通过USB接口写入Flash的指定位置。
具体实施时,ecc全称为:Error Checking and Correction or Errorcorrection Coding,是一种用于差错检测和修正的算法,下文都用缩写形式ecc代替。
通过随机数字生成器randomizer对Flash参数信息进行加扰处理生成加扰数据,randomizer将加扰之后的数据发送给ecc模块进行编码。Ecc模块为用于对加扰数据进行ecc编码的功能模块,ecc将这些数据通过USB写入Flash中。待编码数据(data+spare)长度可配置,来自dma_wth_spare模块;dma_wth_spare模块用于对数据长度data_len和spare长度spare_len进行配置。待编码数据送入完毕,ecc编码同步完成,无需等待,即刻送出ecc_code。Spare:是用来放Ecc编码数据的,在Nand Flash中有这样的专门的区域;ecc_code是ecc编码标识符。
通过随机数字生成器randomizer对Flash参数信息进行加扰处理生成加扰数据的具体处理算法如下:
输入一个2字节长的加密密码Passwd,把Passwd扩展到4个字节得到新密码dwPasswd,然后dwPasswd异或上dwPasswd除以2取整在与上固定数据0x3fff,得到一个数据Temp。
把dwPasswd除以2的8次方或上Temp数据乘以2的7次方得到Passwd为了计算下一个数据。
输入数据异或上Temp数据得到加密后的数据;
循环上述步骤,直到输入数据都处理完成。
具体地,对加扰数据进行ecc编码生成编码后的加扰数据,包括:
获取加扰数据中一个字节的数据,对所述字节进行取反保存到数组中;将数组与生成的BCH表进行异或处理;循环处理完加扰数据的所有字节后,生成BCH加密数据,将BCH加密数据添加至加扰数据的数据尾部,生成编码后的加扰数据。
具体实施时,ecc编码的具体算法如下:
设输入信息多项式I(x)=I0+I1x+…+Ik-1xk-1,校验多项式P(x)=P0+P1x+P2x2+Pn-k- 1xn-k-1,则x2tI(x)对生成多项式g(x)求模得到的余式就是校验多项式P(x),即P(x)=x2tI(x)(mod g(x)),那么生成码子的多项式为C(x)=x2tI(x)+P(x)。所以BCH码编码的实质就是以生成多项式g(x)为模的除法问题。通常采用LFSR(线性反馈移位寄存器)来实现。具体编码算法如下:
因此编码的关键为:计算对应t的生成多项式,然后根据以上算法完成编码。
进一步地,通过第二硬件算法读取Flash的指定位置的Flash参数信息,将Flash参数信息写入第二硬件设备中,包括:
通过第二硬件算法读取Flash的指定位置的编码后的加扰数据,对编码后的加扰数据进行ecc解码,将解码后的加扰数据发送给随机数字生成器;
通过随机数字生成器对加扰数据进行去扰处理,获取Flash参数信息,将Flash参数信息写入第二硬件设备。
具体实施时,通过第二硬件算法读取数据时,从flash指定位置中读出的编码后的加扰数据之后,送入ecc模块进行解码。去除ecc code之后将数据发送给随机数字生成器randomizer。随机数字生成器randomizer对加扰数据进行去扰处理,获取Flash参数信息,将Flash参数信息写入第二硬件设备。
进一步地,对编码后的加扰数据进行ecc解码,将解码后的加扰数据发送给随机数字生成器,包括:
对编码后的加扰数据进行ecc解码,判断解码过程中是否存在错误字节;
若解码过程不存在错误字节,则将解码后的加扰数据发送给随机数字生成器;
若解码过程中存在错误字节,且错误字节在纠错范围内,则计算错误字节位置,并对错误字节进行纠错处理,在完成纠错处理后将解码后的加扰数据发送给随机数字生成器。
具体实施时,对编码后的加扰数据进行ecc解码,获取解码结果;
若发现没有错误,无需纠错;将解码后的加扰数据发送给随机数字生成器。
若发现有错误,且错误bit数在纠错范围内,可纠错。并对错误字节进行纠错处理,在完成纠错处理后将解码后的加扰数据发送给随机数字生成器;
数据读回,发现有错误,且错误bit数超出纠错范围内,不可纠错,则不处理。
进一步地,对编码后的加扰数据进行ecc解码,包括:
对编码后的加扰数据进行syndrm计算生成第一解码数据;
对第一解码数据进行elp计算生成第二解码数据;
对第二解码数据进行chien搜索及纠错处理后,生成解码后的加扰数据。
具体实施时,ecc在解码过程中有三个步骤:1、syndrm计算;2、elp计算;3、chien搜索及纠错(算法都在文末说明)。其中第一步骤(syndrm计算)是依赖输入数据的,第二步骤仅依赖syndrm计算结果,第3步骤仅依赖elp计算结果。ecc仅支持三个步骤流水处理,即syndrm部件完成第一笔数据的计算之后,elp开始第一笔数据的计算,syndrm可以开始接收第二笔数据;elp部件完成第一笔数据的计算后,chien搜索部件开始第一笔数据的计算,elp部件开始第二笔数据的计算,syndrm开始第三笔数据的接收和计算;
待译码数据(data+spare)长度可配置,来自dma_wth_spare模块(data_len和spare_len);
从功能上,ecc解码有如下几种场景:
数据读回,发现没有错误,无需纠错。Syndrm计算完成后,即可得知是否有错;
数据读回,发现有错误,且错误bit数在纠错范围内,可纠错。是否可纠错,在chien搜索计算完成后才可明确;
数据读回,发现有错误,且错误bit数超出纠错范围内,不可纠错。是否可纠错,在chien搜索计算完成后才可明确。
计算syndrm的过程如下所示:
由输入的data R(x)计算syndrm,R(x)S=(s1,s2,…s2t)。
设错误bit位为E(x),则R(x)=C(x)+E(x)。
若数据产生t个错误,则
公式中Y
i属于有限多项式,X
Li为错误位置数,说明错误发生在R(x)中的第n-L
i位,错误值是Y
i。
R(x)=C(x)+E(x)=q(x)g(x)+r(x),由码的生成多项式g(x)=m1(x)m3(x)…
M2t-1(x),可以得出R(x)=qj(x)mj(x)+rj(x).公式中mj(x)是a的最小多项式,且mj(x)是以aj为根,因此当x=aj时,Sj=R(aj)=qj(aj)mj(aj)+rj(aj)=rj(aj),所以syndrm S=(s1,s2,…s2t)的计算转换为R(x)除以g(x)的除法运算,相除之后的余式就是syndrm,若syndrm中的任何一个数据都不为0,则输入数据R(x)有错。
计算elp过程如下:
根据syndrm求出错误位置多项式σ(x)=σtxt+σt-1xt-1+…+σ1x1+1构造错误位置多项式σ(x)=σtxt+σt-1xt-1+…+σ1x1+1,错误位置为该式的根。经过数学推演(详见《纠错码—原理与方法》P270)可知错误位置多项式的系数σ1,σ2,…,σt-1,σt和伴随式有如下关系:
求解该线性方程可得错误位置多项式的系数。工程上通过BM迭代算法求解σi。
σ(x)=σtxt+σt-1xt-1+…+σ1x1+1 (公式1)
S(x)σ(x)=ω(x)=1+ω1x+ω2x2+...(公式3)
将公式1、公式2代入公式3并经过数学推演,得到如下求σ(x)的关键方程:
S(x)σ(x)≡ω(x)(modx2t+1),BM迭代算法即求解该方程:选择一组或两组合理的初值σ(0)(x)和ω(0)(x),经过第一次迭代运算求得σ(1)(x)和ω(1)(x),依次类推,由σ(i)(x)和ω(i)(x)求得σ(i+1)(x)和ω(i+1)(x),其间一共进行2t-1次迭代。迭代过程中定义第j+1步与第j步的差值为dj,则有
式中
是第j次迭代后
中x
i的系数,
经过数学推演有下列公式成立(详见《纠错码—原理与方法》P279):
其中i是j前面的某一行,并满足i-D(i)最大,且di≠0而D(j+1)=max(D(j),j-i+D(i));
迭代步骤如下:
由初值σ(-1)(x)=1,ω(-1)(x)=0,D(1)=0,d-1=1
σ(0)(x)=1,ω(0)(x)=0,D(0)=0,d0=s1开始迭代;
由(4)计算dj,若dj=0,则有σ(j+1)(x)=σ(j)(x),ω(j+1)(x)=ω(j)(x),(j+1)-D(j+1)=j-D(j);若dj≠0,则找出j之前的某一行i,它在所有j行之前各行中的i-D(i)最大,且di≠0,然后根据(公式5)、(公式6)计算σ(j+1)(x)和ω(j+1)(x);
计算dj+1,重复(公式2)进行迭代,经过2t次迭代后得到σ(2t)(x)和ω(2t)(x)即为所求的σ(x)和ω(x)。
二进制BCH码迭代算法可以进一步简化为如下步骤:
初始值σ(-1/2)(x)=1,D(1/2)=0,d-1/2=1,
σ(0)(x)=1,D(0)=0,d0=s1开始迭代;
计算
若d
j=0,则有σ
(j+1)(x)=σ
(j)(x),D(j+1)=D(j);若d
j≠0,则找出j之前的某一行i,它的2i-D(i)最大,且d
i≠0,计算
计算dj+1,重复上述计算过程进行迭代,经过t次迭代后得到σ(t)(x)即为所求的σ(x)。
计算Chien的工作原理如下:
求解σ(x)的根(钱氏(Chien)搜索法)确定错误位置,并进行错误纠正。
求解σ(x)=0的根就是确定R(x)中哪几位发生了错误,即确定αn-i是不是错误位置数,那就需要验证α-(n-i)是不是σ(x)=0的根。若是,则第n-i位有错,否则就无错。依次对每一位n-i(i=1,2,...,n)进行检验,最后得到σ(x)=0的根,然后取反就得到相应的错误位置。这就是钱氏搜索法的基本思想。主要是判断σ(α-(n-i))=1+σ1α+σ2α2+…+σtαti是否为0来得到相应的错误位置。
由以上方法实施例可知,本发明实施例提供了一种Flash数据写入方法,在第一种算法上处理后如果Nand Flash品质达不到该硬件要求,则会把flash相关信息写入flash的指定位置,换到第二套硬件算法中直接读出已经写入的算法进行加密后写入到新的硬件中,耗时2-10分钟,通过软件算法处理即可完成节省时间成本。
需要说明的是,上述各步骤之间并不必然存在一定的先后顺序,本领域普通技术人员,根据本发明实施例的描述可以理解,不同实施例中,上述各步骤可以有不同的执行顺序,亦即,可以并行执行,变可以交换执行等等。
本发明另一实施例提供一种Flash数据写入装置,如图2所示,装置10包括:
一个或多个处理器110以及存储器120,图2中以一个处理器110为例进行介绍,处理器110和存储器120可以通过总线或者其他方式连接,图2中以通过总线连接为例。
处理器110用于完成,装置10的各种控制逻辑,其可以为通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、单片机、ARM(Acorn RISCMachine)或其它可编程逻辑器件、分立门或晶体管逻辑、分立的硬件组件或者这些部件的任何组合。还有,处理器110还可以是任何传统处理器、微处理器或状态机。处理器110也可以被实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、一个或多个微处理器结合DSP核、或任何其它这种配置。
存储器120作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本发明实施例中的Flash数据写入方法对应的程序指令。处理器110通过运行存储在存储器120中的非易失性软件程序、指令以及单元,从而执行装置10的各种功能应用以及数据处理,即实现上述方法实施例中的Flash数据写入方法。
存储器120可以包括存储程序区和存储数据区,其中,存储程序区可存储操作装置、至少一个功能所需要的应用程序;存储数据区可存储根据装置10使用所创建的数据等。此外,存储器120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器120可选包括相对于处理器110远程设置的存储器,这些远程存储器可以通过网络连接至装置10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
一个或者多个单元存储在存储器120中,当被一个或者多个处理器110执行时,执行上述任意方法实施例中的Flash数据写入方法,例如,执行以上描述的图1中的方法步骤S100至步骤S400。
本发明实施例提供了一种非易失性计算机可读存储介质,计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,例如,执行以上描述的图1中的方法步骤S100至步骤S400。
作为示例,非易失性存储介质能够包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦ROM(EEPROM)或闪速存储器。易失性存储器能够包括作为外部高速缓存存储器的随机存取存储器(RAM)。通过说明并非限制,RAM可以以诸如同步RAM(SRAM)、动态RAM、(DRAM)、同步DRAM(SDRAM)、双数据速率SDRAM(DDR SDRAM)、增强型SDRAM(ESDRAM)、Synchlink DRAM(SLDRAM)以及直接Rambus(兰巴斯)RAM(DRRAM)之类的许多形式得到。本文中所描述的操作环境的所公开的存储器组件或存储器旨在包括这些和/或任何其他适合类型的存储器中的一个或多个。
本发明的另一种实施例提供了一种计算机程序产品,计算机程序产品包括存储在非易失性计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令被处理器执行时,使处理器执行上述方法实施例的Flash数据写入方法。例如,执行以上描述的图1中的方法步骤S100至步骤S400。
以上所描述的实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际需要选择其中的部分或者全部模块来实现本实施例方案的目的。
通过以上的实施例的描述,本领域的技术人员可以清楚地了解到各实施例可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件实现。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存在于计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机装置(可以是个人计算机,服务器,或者网络装置等)执行各个实施例或者实施例的某些部分的方法。
除了其他之外,诸如"能够'、"能"、"可能"或"可以"之类的条件语言除非另外具体地陈述或者在如所使用的上下文内以其他方式理解,否则一般地旨在传达特定实施方式能包括(然而其他实施方式不包括)特定特征、元件和/或操作。因此,这样的条件语言一般地还旨在暗示特征、元件和/或操作对于一个或多个实施方式无论如何都是需要的或者一个或多个实施方式必须包括用于在有或没有输入或提示的情况下判定这些特征、元件和/或操作是否被包括或者将在任何特定实施方式中被执行的逻辑。
已经在本文中在本说明书和附图中描述的内容包括能够提供Flash数据写入方法及装置的示例。当然,不能够出于描述本公开的各种特征的目的来描述元件和/或方法的每个可以想象的组合,但是可以认识到,所公开的特征的许多另外的组合和置换是可能的。因此,显而易见的是,在不脱离本公开的范围或精神的情况下能够对本公开做出各种修改。此外,或在替代方案中,本公开的其他实施例从对本说明书和附图的考虑以及如本文中所呈现的本公开的实践中可能是显而易见的。意图是,本说明书和附图中所提出的示例在所有方面被认为是说明性的而非限制性的。尽管在本文中采用了特定术语,但是它们在通用和描述性意义上被使用并且不用于限制的目的。