一种Flash闪存的写操作方法及装置与流程

文档序号:12123699阅读:557来源:国知局
一种Flash闪存的写操作方法及装置与流程

本发明涉及芯片设计领域,尤其涉及一种Flash闪存的写操作方法及装置。



背景技术:

在现有芯片设计中,通常使用Flash作为程序存储器,使用电可擦可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)作为数据存储器,这是由两类存储器各自的特点所决定的。Flash闪存与EEPROM最大的区别是:Flash闪存按扇区擦除,而EEPROM按字节擦除。由于Flash闪存是按扇区成块的擦除,所以它适用于存储一些变动较小的程序,故它适合做程序存储器。而EEPROM容量小,且可按字节擦除,因此EEPROM适用于存储一些经常变动的参数、变量等,因此适用于做数据存储器。

相比于EEPROM,Flash闪存的价格相对较低,且同样晶圆面积下Flash闪存可以得到更大的容量,为降低生产成本,一些对性能要求相对较低的小型家电产品广泛应用Flash闪存作为数据存储器。

然而,将Flash闪存作为数据存储器进行数据存储时,由于存储的数据会经常发生改变,因此需要频繁进行数据写入、擦除等操作,但Flash闪存的可擦除次数较少,使用寿命较短。



技术实现要素:

本发明解决的技术问题是如何减少Flash闪存的擦除次数,提高Flash闪存的使用寿命。

为解决上述技术问题,本发明实施例提供一种Flash闪存的写操作方法,所述Flash闪存的页为行与列的矩阵结构,每一行对应一个EEPROM地址,包括:接收对EEPROM地址的写操作指令,获取所述Flash闪存中与所述EEPROM地址对应的目标地址;判断所述目标地址是否能够写入所述写操作指令对应的待写入数据;当所述目标地址能够写入所述写操作指令对应的待写入数据时,将所述待写入数据写入所述目标地址;当所述目标地址中无法写入所述待写入数据时,在所述目标地址所处的Flash闪存的页上查找空白列地址;将所述待写入数据写入至所述空白列地址中。

可选的,所述获取所述Flash闪存中与所述EEPROM地址对应的目标地址,包括:根据预设的EEPROM地址与Flash闪存的映射关系,确定所述EEPROM地址对应所述Flash闪存中的第P页第X行;确定所述目标地址对应的目标行;根据所述目标行的行写入状态标识,以及所述目标行中所有适于写入数据的列地址所对应的列写入状态标识,确定所述目标地址对应的目标列;其中,所述目标行的行写入状态标识适于标识所述目标行是否写满;所述列写入状态标识适于标识所述适于写入数据的列地址中是否写入数据。

可选的,所述确定所述目标地址对应的目标行,包括:获取第X行的行写入状态标识;当所述第X行未写满时,确定所述目标行为所述第X行;当所述第X行写满,且所述第X行对应的本行行偏移量为0时,确定所述目标行为所述第X行;当所述第X行的行写入状态标识为写满,且所述第X行对应的本行行偏移量非0时,根据所述第X行对应的本行行偏移量查找跳转行;当所述跳转行对应的其他行行偏移量为0时,确定所述目标行为所述跳转行;当所述跳转行对应的其他行行偏移量非0时,根据所述跳转行对应的本行行偏移量继续查找下一跳转行,直至查找到的跳转行对应的其他行行偏移量为0时,确定所述目标行为其他行行偏移量为0的跳转行;其中,所述本行行偏移量为本行与所述目标行之间的间隔行数;所述其他行行偏移量为跳转至本行的其他行再次跳转后的行与本行的间隔行数。

可选的,所述确定所述目标地址对应的目标列,包括:当所述目标行未写满时,在所述所有适于写入数据的列地址所对应的列写入状态标识中,找到最低位的1,并将与所述最低位的1对应的列相邻的低位列作为所述目标列;或,在所述所有适于写入数据的列地址所对应的列写入状态标识中,找到最高位的1,并将与所述最高位的1对应的列相邻的高位列作为所述目标列;当所述目标行写满时,在所述所有适于写入数据的列地址所对应的列写入状态标识中,找到最低位的1,并将所述最低位的1对应的列作为所述目标列;若所述所有适于写入数据的列地址所对应的列写入状态标识均为1,则将最低位或最高位的1对应的列作为所述目标列。

可选的,所述目标地址包括两个字节,分别为高位字节以及低位字节,所述判断所述目标地址是否能够写入所述写操作指令对应的待写入数据,包括:读取所述目标地址的高位字节数据或低位字节数据;将读取出的字节数据与所述待写入数据进行运算,根据运算结果判断所述读取出的字节数据是否能够更新为所述待写入数据;当所述读取出的字节数据能够更新为所述待写入数据时,判定所述目标地址能够写入所述待写入数据;当所述读取出的字节数据不能够更新为所述待写入数据时,若所述读取出的字节数据为所述低位字节数据,且所述待写入数据为全1时,则判定所述目标地址中无法写入所述待写入数据;若所述读取出的字节数据为所述低位字节数据,且所述待写入数据为非全1时,则判定所述目标地址中能够写入所述待写入数据;若所述读取出的字节数据为所述高位字节数据,且所述高位字节数据无法更新为所述待写入数据时,判定所述目标地址无法写入所述待写入数据。

可选的,所述读取所述目标地址的高位字节数据或低位字节数据,包括:当所述高位字节数据以及所述低位字节数据均为全1时,从所述目标地址中读取所述低位字节数据;当所述高位字节数据为全1且所述低位字节数据为非全1时,或当所述高位字节数据以及所述低位字节数据均为非全1时,从所述目标地址中读取所述高位字节数据。

可选的,所述将读取出的字节数据与所述待写入数据进行运算,根据运算结果判断所述读取出的字节数据是否能够更新为所述待写入数据,包括:采用公式T=&(A|~B)计算所述读取出的字节数据A对应的写入状态标识;当T=1时,判定所述字节数据A能够更新为所述待写入数据;当T=0时,判定所述字节数据A无法更新为所述待写入数据;其中,B为所述待写入数据,~B为取B的反码,A|~B为将A与(~B)按位或操作,&(A|~B)为将A|~B结果中的所有位进行与操作,T的长度为1比特。

可选的,所述Flash闪存的写操作方法,还包括:当所述读取出的字节数据能够被更新为所述待写入数据时,在判定所述目标地址能够写入所述待写入数据之后,将所述待写入数据写入至所述读取出的字节数据对应的所述目标地址的字节;当所述待写入数据为非全1时,在判定所述目标地址中能够写入所述待写入数据之后,将所述待写入数据写入至所述目标地址的高位字节,并保持所述目标地址对应的列写入状态标识不变,以及保持所述目标地址对应的目标行的行写入状态标识不变。

可选的,所述在所述目标地址所处的Flash闪存的页上,查找空白列地址,包括:当所述目标行为第X行时,在所述目标行中,依次从低位至高位查找与所述目标地址相邻的低位空白列地址;当所述目标行不是第X行时,在所述目标行中,依次从高位至低位查找与所述目标地址相邻的高位空白列地址;或,当所述目标行为第X行时,在所述目标行中,依次从高位至低位查找与所述目标地址相邻的高位空白列地址;当所述目标行不是第X行时,在所述目标行中,依次从低位至高位查找与所述目标地址相邻的低位空白列地址。

可选的,所述将所述待写入数据写入至所述空白列地址中,包括:当所述空白列地址包括两个字节时,将所述待写入数据写入至所述空白列地址的低位字节,并更新写入数据后的所述空白列地址对应的所述列写入状态标识。

可选的,所述将所述待写入数据写入至所述空白列地址中,包括:当所述目标行中所有适于写入数据的列地址所对应的列写入状态标识中,仅存在一个1,且所述目标行未写满时,将所述待写入数据写入至所述列写入状态标识为1对应的空白列地址中,保持写入所述待写入数据的所述空白列地址的列写入状态标识不变,并将所述目标行的行写入状态标识更新为写满状态标识;当所述目标行中所有适于写入数据的列地址所对应的列写入状态标识中,仅存在一个1,且所述目标行写满时,从所述目标行开始,向下依次扫描与所述目标行相邻的M个其他行各自对应的适于写入数据的列地址所对应的列写入状态标识;当所述目标行为第X行时,从所述M个其他行中查找到最低N位均为1的第Z行,将所述待写入数据写入至所述第Z行的最低位列地址,并将所述第Z行的最低位列地址对应的列写入状态标识更新;当所述目标行非第X行时,从所述M个其他行中查找到最高N位均为1的第Z行,将所述待写入所述写入至所述第Z行的最高位列地址,并将所述第Z行的最高位列地址对应的列写入状态标识更新;或:当所述目标行为第X行时,从所述M个其他行中查找到最高N位均为1的第Z行,将所述待写入数据写入至所述第Z行的最高位列地址,并将所述第Z行的最高位列地址对应的列写入状态标识更新;当所述目标行非第X行时,从所述M个其他行中查找到最低N位均为1的第Z行,将所述待写入数据写入至所述第Z行的最低位列地址,并将所述第Z行的最低位列地址对应的列写入状态标识更新;其中,N≥2。

可选的,当未查找到最低N位均为1或最高N位均为1的第Z行时,所述Flash闪存的写操作方法还包括:对所述第P页的Flash闪存的页进行备份操作;在备份操作完成之后,对所述第P页的Flash闪存进行擦除操作。

本发明实施例还提供了一种Flash闪存的写操作装置,所述Flash闪存的页为行与列的矩阵结构,每一行对应一个EEPROM地址,所述Flash闪存的写操作装置包括:接收单元,用于接收对EEPROM地址的写操作指令;获取单元,用于获取所述Flash闪存中与所述EEPROM地址对应的目标地址;判断单元,用于判断所述目标地址是否能够写入所述写操作指令对应的待写入数据;查找单元,用于当所述判断单元判定所述目标地址中无法写入所述待写入数据时,在所述目标地址所处的Flash闪存的页上查找空白列地址;写入单元,用于将所述待写入数据写入至所述查找单元查找到的空白列地址中,以及用于当所述目标地址能够写入所述写操作指令对应的待写入数据时,将所述待写入数据写入所述目标地址。

可选的,所述获取单元,用于根据预设的EEPROM地址与Flash闪存的映射关系,确定所述EEPROM地址对应所述Flash闪存中的第P页第X行;确定所述目标地址对应的目标行;根据所述目标行的行写入状态标识,以及所述目标行中所有适于写入数据的列地址所对应的列写入状态标识,确定所述目标地址对应的目标列;其中:所述目标行的行写入状态标识适于标识所述目标行是否写满;所述列写入状态标识适于标识所述适于写入数据的列地址中是否写入数据。

可选的,所述获取单元,用于获取第X行的行写入状态标识;当所述第X行未写满时,确定所述目标行为所述第X行;当所述第X行写满,且所述第X行对应的本行行偏移量为0时,确定所述目标行为所述第X行;当所述第X行的行写入状态标识为写满,且所述第X行对应的本行行偏移量非0时,根据所述第X行对应的本行行偏移量查找跳转行;当所述跳转行对应的其他行行偏移量为0时,确定所述目标行为所述跳转行;当所述跳转行对应的其他行行偏移量非0时,根据所述跳转行对应的本行行偏移量继续查找下一跳转行,直至查找到的跳转行对应的其他行行偏移量为0时,确定所述目标行为其他行行偏移量为0的跳转行;其中,所述本行行偏移量为本行与所述目标行之间的间隔行数;所述其他行行偏移量为跳转至本行的其他行再次跳转后的行与本行的间隔行数。

可选的,所述获取单元,用于当所述目标行未写满时,在所述所有适于写入数据的列地址所对应的列写入状态标识中,找到最低位的1,并将与所述最低位的1对应的列相邻的低位列作为所述目标列;或,在所述所有适于写入数据的列地址所对应的列写入状态标识中,找到最高位的1,并将与所述最高位的1对应的列相邻的高位列作为所述目标列;当所述目标行写满时,在所述所有适于写入数据的列地址所对应的列写入状态标识中,找到最低位的1,并将所述最低位的1对应的列作为所述目标列;若所述所有适于写入数据的列地址所对应的列写入状态标识均为1,则将最低位或最高位的1对应的列作为所述目标列。

可选的,当所述目标地址包括高位字节以及低位字节时,所述判断单元,用于读取所述目标地址的高位字节数据或低位字节数据;将读取出的字节数据与所述待写入数据进行运算,根据运算结果判断所述读取出的字节数据是否能够更新为所述待写入数据;当所述读取出的字节数据能够更新为所述待写入数据时,判定所述目标地址能够写入所述待写入数据;当所述读取出的字节数据不能够更新为所述待写入数据时,若所述读取出的字节数据为所述低位字节数据,且所述待写入数据为全1时,则判定所述目标地址中无法写入所述待写入数据;若所述读取出的字节数据为所述低位字节数据,且所述待写入数据为非全1时,则判定所述目标地址中能够写入所述待写入数据;若所述读取出的字节数据为所述高位字节数据,且所述高位字节数据无法更新为所述待写入数据时,判定所述目标地址无法写入所述待写入数据。

可选的,所述判断单元,用于当所述高位字节数据以及所述低位字节数据均为全1时,从所述目标地址中读取所述低位字节数据;当所述高位字节数据为全1且所述低位字节数据为非全1时,或当所述高位字节数据以及所述低位字节数据均为非全1时,从所述目标地址中读取所述高位字节数据。

可选的,所述判断单元,用于采用公式T=&(A|~B)计算所述读取出的字节数据A对应的写入状态标识;当T=1时,判定所述字节数据A能够更新为所述待写入数据;当T=0时,判定所述字节数据A无法更新为所述待写入数据;其中,B为所述待写入数据,~B为取B的反码,A|~B为将A与(~B)按位或操作,&(A|~B)为将A|~B结果中的所有位进行与操作,T的长度为1比特。

可选的,所述写入单元,还用于当所述读取出的字节数据能够被更新为所述待写入数据时,在判定所述目标地址能够写入所述待写入数据之后,将所述待写入数据写入至所述读取出的字节数据对应的所述目标地址的字节;当所述待写入数据为非全1时,在判定所述目标地址中能够写入所述待写入数据之后,将所述待写入数据写入至所述目标地址的高位字节,并保持所述目标地址对应的列写入状态标识不变,以及保持所述目标地址对应的目标行的行写入状态标识不变。

可选的,所述查找单元,用于当所述目标行为第X行时,在所述目标行中,依次从低位至高位查找与所述目标地址相邻的低位空白列地址;当所述目标行不是第X行时,在所述目标行中,依次从高位至低位查找与所述目标地址相邻的高位空白列地址;或,当所述目标行为第X行时,在所述目标行中,依次从高位至低位查找与所述目标地址相邻的高位空白列地址;当所述目标行不是第X行时,在所述目标行中,依次从低位至高位查找与所述目标地址相邻的低位空白列地址。

可选的,所述写入单元,用于当所述空白列地址包括两个字节时,将所述待写入数据写入至所述空白列地址的低位字节,并更新写入数据后的所述空白列地址对应的所述列写入状态标识。

可选的,所述写入单元,用于当所述目标行中所有适于写入数据的列地址所对应的列写入状态标识中,仅存在一个1,且所述目标行未写满时,将所述待写入数据写入至所述列写入状态标识为1对应的空白列地址中,保持写入所述待写入数据的所述空白列地址的列写入状态标识不变,并将所述目标行的行写入状态标识更新为写满状态标识;当所述目标行中所有适于写入数据的列地址所对应的列写入状态标识中,仅存在一个1,且所述目标行写满时,从所述目标行开始,向下依次扫描与所述目标行相邻的M个其他行各自对应的适于写入数据的列地址所对应的列写入状态标识;当所述目标行为第X行时,从所述M个其他行中查找到最低N位均为1的第Z行,将所述待写入数据写入至所述第Z行的最低位列地址,并将所述第Z行的最低位列地址对应的列写入状态标识更新;当所述目标行非第X行时,从所述M个其他行中查找到最高N位均为1的第Z行,将所述待写入所述写入至所述第Z行的最高位列地址,并将所述第Z行的最高位列地址对应的列写入状态标识更新;或:当所述目标行为第X行时,从所述M个其他行中查找到最高N位均为1的第Z行,将所述待写入数据写入至所述第Z行的最高位列地址,并将所述第Z行的最高位列地址对应的列写入状态标识更新;当所述目标行非第X行时,从所述M个其他行中查找到最低N位均为1的第Z行,将所述待写入数据写入至所述第Z行的最低位列地址,并将所述第Z行的最低位列地址对应的列写入状态标识更新;其中,N≥2。

可选的,所述Flash闪存的写操作装置还包括:备份单元,用于当未查找到最低N位均为1或最高N位均为1的第Z行时,对所述第P页的Flash闪存的页进行备份操作;擦除单元,用于在备份操作完成之后,对所述第P页的Flash闪存进行擦除操作。

与现有技术相比,本发明实施例的技术方案具有以下有益效果:

在接收到对EEPROM地址的写操作指令时,获取EEPROM地址对应的Flash闪存中的目标地址,当目标地址中无法写入待写入数据时,在目标地址所处的Flash页上查找空白列地址,并将待写入数据写入到空白列地址中。也就是说,当EEPROM地址对应的目标地址中无法写入数据时,通过查找当前页的空白列地址,进行待写入数据的写入操作,从而可以充分利用Flash闪存的存储空间,减少Flash闪存的擦除次数,故可以提高Flash闪存的使用寿命。

进一步,每一个列地址中包括两个字节,当低位字节数据无法更新为待写入数据,且高位字节数据可以更新为待写入数据时,将待写入数据写入至高位字节,从而可以充分利用Flash闪存的存储空间,进一步减少了Flash闪存的擦除次数。

附图说明

图1是本发明实施例中的一种Flash闪存的写操作方法的流程图;

图2是本发明实施例中的一种Flash闪存的页的结构示意图;

图3是本发明实施例中的一种Flash闪存的页中的一行的结构示意图;

图4是本发明实施例中提供的一种图3中的列地址7的结构示意图;

图5是本发明实施例中的一种寻址方法的流程图;

图6是本发明实施例中的一种Flash闪存的写操作装置的结构示意图。

具体实施方式

在将Flash闪存作为数据存储器进行数据存储时,由于存储的数据会经常发生改变,因此需要频繁进行数据写入、擦除等操作。在现有技术中,鉴于Flash闪存的工艺特点,导致Flash闪存的可擦除次数有限,通常Flash闪存的可擦除次数为10万次,远小于EEPROM的100万次的可擦除次数。因此,Flash闪存的使用寿命较短。

在本发明实施例中,当目标地址中无法写入待写入数据时,在目标地址所处的Flash页上查找空白列地址,并将待写入数据写入到空白列地址中。也就是说,当EEPROM地址对应的目标地址中无法写入数据时,通过查找当前页的空白列地址,进行待写入数据的写入操作,从而可以充分利用Flash闪存的存储空间,减少Flash闪存的擦除次数,故可以提高Flash闪存的使用寿命。

为使本发明的上述目的、特征和有益效果能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。

本发明实施例提供了一种Flash闪存的写操作方法,参照图1,以下通过具体步骤进行详细说明。

步骤S101,接收对EEPROM地址的写操作指令,获取所述Flash闪存中与所述EEPROM地址对应的目标地址。

在具体实施中,可以预先将Flash闪存的页划分成行与列的矩阵结构。参照图2,给出了本发明实施例中的一种Flash闪存的页的结构示意图。图2中,预先将Flash闪存的页划分成M行N列的矩阵结构。行地址1表示为第1行,行地址M表示为第M行,列地址1表示为第1列,列地址N表示为第N列。Flash闪存中的每一行对应一个EEPROM地址,因此,划分出的列数越大,Flash闪存的可擦除次数也就越大,一页Flash闪存对应的EEPROM地址的个数越小。

例如,Flash闪存的一页有256个半字,每个半字对应2个字节,则可以将Flash闪存的一页划分成16行×16列的矩阵结构。此时,Flash闪存的一页对应16个EEPROM地址。可以理解的是,也可以将Flash闪存的一页划分成8行×32列的矩阵结构。此时,Flash闪存的一页对应32个EERPOM地址。还可以将Flash闪存的一页划分成其他的矩阵结构,此处不做赘述。

在具体实施中,在采用Flash闪存模拟EEPROM时,对EEPROM地址进行读写操作,实质上是对Flash闪存进行读写操作。在实际应用中,可以预先设置EEPROM地址与Flash闪存的映射关系,在接收到对EEPROM地址的写操作指令或者读操作指令后,即可获知对应的Flash闪存中的目标地址。

例如,在接收到对EEPROM地址address_1的写操作指令时,根据预设的映射关系,将address_1映射到Flash闪存的第P页第X行。

需要注意的是,根据EEPROM地址映射得到的Flash闪存的第P页第X行并不一定是目标行。例如,对address_1进行写入操作,若第X行中无法写入数据,则只能将待写入数据写入到其他行,而不是写入到第X行。

因此,在将address_1映射到Flash闪存的第P页第X行之后,可以先判断第X行是否为目标行。

在对确定目标行的过程进行描述之前,先对本发明实施例中提供的Flash闪存的行结构进行说明。

在具体实施中,针对Flash闪存的每一行,均可以设置一一对应的行写入状态标识。每一行的行写入状态标识用于表征该行是否写满,可以通过设置不同的值来区分写满状态和未写满状态。通过读取每一行的行写入状态标识,即可获知该行对应的写入状态。

例如,当第X行的行写入状态标识为1时,判定第X行没有写满;当第X行的行写入状态标识为0时,判定第X行已写满。

在具体实施中,可以从每一行中选择一个列地址,用来存储本行的相关信息,例如,本行的行写入状态标识。除去存储本行的相关信息的列地址之外的其他列地址,均可以用于写入数据。在存储本行的相关信息的列地址中,还可以存储有其他用于写入数据的列地址的列写入状态标识。通过列写入状态标识,来标识所有适于写入数据的列地址中是否写入数据。通过读取第X行对应的列写入状态标识,即可获知第X行中所有的列的写入状态。

在本发明实施例中,可以选取每一行中的最高位列地址,用来存储本行的相关信息。例如,选取每一行中的最高位列地址,用来存储本行的行写入状态标识以及所有适于写入数据的列地址对应的列写入状态标识。可以理解的是,在本发明其他实施例中,也可以选择每一行中的其他列地址来存储本行的相关信息。

参照图3,给出了本发明实施例中的一种Flash闪存中的行结构图。

图3中,Flash闪存的每一行包括8个列地址,依次为列地址7~0。在8个列地址中,选取列地址7来存储本行的相关信息,列地址6~0中可以写入数据或读出数据。列地址6~0中,每个列地址包括2个字节,且每个列地址的低8位为低位字节word_l,高8位为高位字节word_h。

参照图4,给出了本发明实施例中的一种列地址7的结构示意图。

图4中,列地址7总共包括16个比特,依次为比特15~0。将最高位比特15的值TAG[15]作为行写入状态标识,将第14位~第11位的值TAG[14:11]的反码作为本行行偏移量,将第10位~第7位的值TAG[10:7]的反码作为其他行行偏移量,将第6位~第0位的值TAG[6:0]作为列地址6~0的列写入状态标识。

在本发明实施例中,本行行偏移量为:本行与目标行之间的间隔行数,其他行行偏移量为:跳转至本行的其他行再次跳转后的行与本行的间隔行数。例如,目标行为第20行,本行为第10行,则本行行偏移量为十进制数10。又如,第10行跳转至第20行后,又跳转到第23行,则第20行的其他行行偏移量为3。

也就是说,每一行的最高位列地址中存储的本行的相关信息包括本行写入状态、本行行偏移量、其他行行偏移量以及其他用于写入数据的列地址的列写入状态标识等信息。

当TAG[15]=1时,判定本行当前未写满;当TAG[15]=0时,判定本行写满。

当TAG[6:0]中存在多个1时,TAG[6:0]中的1对应的列地址表示为未写入数据的列地址。当TAG[6:0]中的1的个数为1时,若TAG[15]=0,则TAG[6:0]中的1对应的列地址已写入数据;若TAG[15]=1,则TAG[6:0]中的1对应的列地址未写入数据。

例如,TAG[6:0]=0011000,则列地址0、列地址1、列地址2以及列地址5、列地址6中已写入数据,列地址3、列地址4中未写入数据。

又如,TAG[6:0]=0010000,且TAG[15]=0,则列地址4中已写入数据。TAG[6:0]=0010000,且TAG[15]=1,则列地址4中未写入数据。

需要说明的是,在本发明其他实施例中,每一行对应的本行行偏移量、其他行行偏移量所占用的比特数也可以为其他值,可以根据实际的应用场景来分别选择本行行偏移量以及其他行行偏移量所占用的比特数。

例如,在本发明一实施例中,每一行对应的本行行偏移量占用列地址7中的第14~10位,其他行行偏移量占用列地址7的第9~7位。在本发明另一实施例中,每一行对应的本行行偏移量占用列地址7中的低14~12位,其他行行偏移量占用列地址7中的第11~7位。

在对本发明实施例中提供的Flash闪存的行结构进行说明之后,下面结合图2~图4,参照图5对步骤S101中的目标地址的寻址流程进行说明。

参照图5,给出了本发明实施例中的一种目标地址的寻址方法。

步骤S501,将EEPROM地址映射到Flash闪存的第P页第X行。

步骤S502,判断第X行是否写满。

在具体实施中,由于EEPROM地址映射到Flash闪存的第P页第X行,因此,可以先判断第X行是否为目标行。

在判断第X行是否为目标行时,可以获取第X行的行写入状态标识。

在本发明实施例中,第X行的行写入状态标识为X.TAG[15]。当X.TAG[15]=1时,判定第X行未写满,也即第X行中可以继续写入数据,执行步骤S507;当X.TAG[15]=0时,判定第X行写满,执行步骤S503。

步骤S503,判断第X行的本行行偏移量是否为0。

当第X行写满时,可以先获取第X行对应的本行行偏移量。当第X行的本行行偏移量为0时,可以判定第X行为目标行。当第X行的本行行偏移量非0时,可以判定第X行并不是目标行,且第X行与目标行之间的间隔行数为第X行对应的本行行偏移量。

在本发明一实施例中,参照图4,读取列地址7的第14位~11位的X.TAG[14:11]来获知第X行的本行行偏移量。在获取到X.TAG[14:11]之后,取X.TAG[14:11]的反码,得到的值即为第X行的本行行偏移量。

例如,第X行的X.TAG[14:11]=1111,则取反码之后得到的值为0000,也即第X行的本行行偏移量为十进制数0。又如,第X行的X.TAG[14:11]=0011,则取反码之后得到的值为1100,也即第X行的本行行偏移量为十进制数12。

当第X行的本行行偏移量为0时,执行步骤S507;当第X行的本行行偏移量非0时,执行步骤S504。

步骤S504,根据第X行的本行行偏移量,查找跳转行。

在获知第X行的本行行偏移量非0后,可以根据X以及第X行的本行行偏移量,查找出跳转行。当X与第X行的本行行偏移量之和大于Flash闪存页的总行数时,可以将X与第X行的本行行偏移量求和,将得到的和值对总行数取模,得到的值作为跳转行的行数。

例如,当第X行的X.TAG[14:11]=0011时,则取X.TAG[14:11]的反码,得到第X行的本行行偏移量为十进制数12,也即跳转行为第X行之间的间隔行数为12。X=10,则查找出的跳转行为第22行。

又如,X=24,第24行的本行行偏移量为十进制数10,由于24+10=34,而Flash闪存的第P页的总行数仅为32,因此,可以将34对32取模,得到的模值为2,也即跳转行为第2行。

在查找到跳转行后,执行步骤S505。

步骤S505,判断跳转行的其他行行偏移量是否为0。

在本发明实施例中,跳转行的其他行行偏移量为步骤S504中查找到的跳转行的TAG[10:7]的反码。当跳转行的其他行行偏移量为0时,判定跳转行为目标行,执行步骤S507;反之,当跳转行的其他行行偏移量为非0时,执行步骤S506。

例如,跳转行为第Y行,第Y行对应的Y.TAG[10:7]=1111,则取第Y行对应的Y.TAG[10:7]的反码,即可获知第Y行对应的其他行行偏移量为0,因此可以判定第Y行为目标行。

又如,第Y行对应的Y.TAG[10:7]=1010,则取其反码,即可获知第Y行对应的其他行行偏移量为十进制数10,因此,需要执行步骤S506。

步骤S506,根据跳转行的本行行偏移量以及跳转行的行数,继续查找下一跳转行。

在本发明实施例中,在继续查找下一跳转行之后,可以重新执行步骤S505,判断查找到的跳转行的其他行行偏移量是否为0。循环执行步骤S505~步骤S506,直至查找到的跳转行对应的其他行行偏移量为0时,确定其他行行偏移量为0的跳转行作为目标行。

例如,步骤S504中,查找到的跳转行为第Y行,第Y行对应的其他行行偏移量非0,则将Y与第Y行对应的本行行偏移量相加,得到跳转行Z。之后,判断第Z行对应的其他行行偏移量是否为0。当第Z行对应的其他行行偏移量非0时,将Z与第Z行对应的本行行偏移量相加,得到跳转行第K行,并判断第K行对应的其他行行偏移量是否为0。依次类推,直至查找到其他行行偏移量为0的跳转行。

需要说明的是,在继续查找跳转行的过程中,若检测到查找到的跳转行出现重复的情况,则结束寻址操作并报错。

在确定目标地址对应的目标行之后,执行步骤S507。

步骤S507,确定目标地址对应的目标列。

在具体实施中,当目标行未写满时,可以获取目标行对应的所有适于写入数据的列地址对应的列写入状态标识。从所有适于写入数据的列地址对应的列写入状态标识中,找到最低位的1,将与最低位的1对应的列地址相邻的低位列作为目标列。也可以从所有适于写入数据的列地址对应的列写入状态标识中,找到最高位的1,将与最高位的1对应的列地址相邻的高位列作为目标列。

从本发明上述实施例中可知,目标行可能为EEPROM地址直接映射得到的第P页第X行,也可能为第P页的第Y行。在本发明实施例中,若无特殊描述,均设定第X行为根据EEPROM地址直接映射的行,第Y行、第Z行等非第X行均为根据EEPROM地址间接映射的行。

当目标行为第X行时,可以从所有适于写入数据的列地址对应的列写入状态标识中,找到最低位的1,将与最低位的1对应的列地址相邻的低位列作为目标列。当目标行为第Y行时,可以从所有适于写入数据的列地址对应的列写入状态标识中,查找到最高位的1,将与最高位的1对应的列地址相邻的高位列作为目标列。

相应地,当目标行为第X行时,还可以从所有适于写入数据的列地址对应的列写入状态标识中,找到最高位的1,将与最高位的1对应的列地址相邻的高位列作为目标列。当目标行为第Y行时,还可以从所有适于写入数据的列地址对应的列写入状态标识中,查找到最低位的1,将与最高位的1对应的列地址相邻的低位列作为目标列。

也就是说,直接映射得到的目标行所对应的目标列的查找规则,与间接映射得到的目标行所对应的目标列的查找规则不同,可以根据目标行是否为直接映射得到的,来分别预先设定两种不同情况下的目标列的查找规则。

结合图4,第X行为目标行,第X行的所有写入数据的列对应的列写入状态标识为X.TAG[6:0]=0011100。从低位向高位查找,找到的最低位的1对应的列为列地址2。与列地址2相邻的低位列地址为列地址1,因此,将列地址1作为目标列。

当第Y行为目标行时,第Y行的所有写入数据的列对应的列写入状态标识为Y.TAG[6:0]=0011100。此时,从高位向低位查找,找到的最高位的1对应的列地址为列地址4,与列地址4相邻的高位列地址为列地址5,因此,将列地址5作为目标列。

在具体实施中,当目标行写满时,可以在目标行的所有适于写入数据的列地址所对应的列写入状态标识中,找到最低位的1,并将最低位的1对应的列作为目标列。

例如,结合图4,第X行对应的X.TAG[15]=0,且第X行的所有适于写入数据的列对应的列写入状态标识X.TAG[6:0]=0001000,此时,列地址3对应的列写入状态标识为1,因此,将列地址3作为目标列。

在具体实施中,还可能存在目标行的所有适于写入数据的列所对应的列写入状态标识均为1的情况,也即目标行为新行,且目标行未写入数据。

针对上述情况,当目标行为第X行时,可以将列地址0作为目标列;当目标行不是第P页第X行时,可以将列地址6作为目标列。当目标行为第X行时,也可以将列地址6作为目标列;当目标行不是第X行时,也可以将列地址0作为目标列。也就是说,当目标行为直接映射得到时所确定的目标地址,与目标行为间接映射得到时所确定的目标地址并不相同。

例如,第X行为目标行,且X.TAG[6:0]=1111111,则选取列地址0作为目标列。而当第Y行为目标行,且Y.TAG[6:0]=1111111时,则选取列地址6作为目标列。

通过步骤S501~步骤S507,完成目标地址的寻址流程。

在寻址操作结束后,即可获知EEPROM地址对应的Flash闪存中的目标地址。在获取到EEPROM地址对应的Flash闪存中的目标地址后,执行步骤S102。

步骤S102,判断所述目标地址是否能够写入所述写操作指令对应的待写入数据。

在具体实施中,在获取到目标地址之后,可以先读取出目标地址中的数据。在本发明实施例中,判断目标地址是否能够写入待写入数据时,是判断读取出的目标地址中的字节数据是否能够被直接更新为待写入数据。

在本发明实施例中,目标地址中可以包括两个字节,分别为高位字节和低位字节。参照图3,高位字节对应word_h,低位字节对应word_l。可以根据高位字节数据的具体数值以及低位字节数据的具体数值,来判定读取出的字节数据是高位字节数据还是低位字节数据。

当高位字节数据与低位字节数据均为全1时,从目标地址中读取出的数据A为低位字节数据;当高位字节数据为全1,且低位字节数据为非全1时,从目标地址中读取出的数据A为低位字节数据;当高位字节数据为非全1,且低位字节数据为非全1时,从目标地址中读取出的数据A为高位字节数据。

例如,高位字节的对应的word_h=11111111,低位字节对应的word_l=11111111,则读取出的数据A=11111111。又如,word_h=11111111,word_l=11110000,则读取出的数据A=11110000。又如,word_h=11000011,word_l=11110000,则读取出的数据A=11000011。

在读取出字节数据后,可以将读取出的字节数据与待写入数据进行运算,根据运算得到的结果判断读取出的字节数据是否能够被直接更新为待写入数据。当从目标地址中读取出的字节数据能够被直接更新为待写入数据时,判定能够将待写入数据写入至目标地址中。

在本发明实施例中,读取出的字节数据为A,待写入数据为B,采用公式T=&(A|~B)计算所述目标地址中的字节数据A对应的写入标识T。当写入标识T=1时,判定字节数据A能够被直接更新为待写入数据B;当写入标识T=0时,判定字节数据A无法被直接更新为待写入数据B。

在公式T=&(A|~B)中,~B为取B的反码,A|~B为将A与(~B)按位或操作,&(A|~B)为A|~B结果中的所有位进行相互与操作,T的长度为1比特,也即&(A|~B)得到的结果的长度为1比特。

例如,读取出的字节数据A=01010101,待写入数据B=00010001,则~B=11101110,A|~B=11111111,&(A|~B)=1&1&1&1&1&1&1&1=1,也即T=1。因此,读取出的字节数据A能够被直接更新为待写入数据B。

在Flash闪存中,当Flash闪存中未写入数据时,Flash闪存中的数据为全1。因此,在对Flash闪存进行写操作的实质是将Flash闪存中的1更新为0,而不能将Flash闪存中的0更新为1。因此,可以通过公式T=&(A|~B)来判断A是否能够直接更新为B,即判断能够将B写入A对应的存储空间。

在具体实施中,当读取出的字节数据为低位字节数据,且低位字节数据能够被直接更新为待写入数据时,判定可以将待写入数据写入至目标地址中。

当读取出的字节数据为低位字节数据,且低位字节数据无法被直接更新为待写入数据时,可以分以下两种情况讨论:1)若待写入数据为全1,则判定目标地址中的高位字节数据无法被直接更新为待写入数据,也即待写入数据无法写入至目标地址中;2)若待写入数据为非全1数据,则判定可以将待写入数据写入至目标地址中。

例如,目标地址为列地址1。列地址1的低位字节数据为11110000,高位字节数据为11111111,则读取出的字节数据为低位字节数据11110000。低位字节数据无法被直接更新为待写入数据B,且待写入数据B为非全1的数据,因此,可以将待写入数据B写入至目标地址中。

当读取出的字节数据为高位字节数据,且高位字节数据无法被直接更新为待写入数据时,判定目标地址无法写入待写入数据。

当判定无法将待写入数据写入至目标地址中时,执行步骤S103;当判定可以将待写入数据写入至目标地址中时,执行步骤S105。

步骤S103,在所述目标地址所处的Flash闪存的页上查找空白列地址。

在具体实施中,在从目标地址所处的Flash闪存的页上查找空白列地址时,可以先在目标地址所处的目标行上查找空白列地址。当在目标行上没有找到空白列地址时,可以在目标地址所处的Flash闪存的页的其他行上查找空白列地址。

在本发明实施例中,查找空白列地址的实质,是查找列写入状态标识为1的列地址。

在具体实施中,当目标行为直接映射得到时,查找与目标地址相邻的高位空白列地址;当目标行为间接映射得到时,查找与目标地址相邻的低位空白列地址。当目标行为直接映射得到时,也可以查找与目标地址相邻的低位空白列地址;当目标行为间接映射得到时,查找与目标地址相邻的高位空白列地址。

也就是说,根据目标行的获取方式的不同,查找到的空白列地址也不相同。

例如,目标行为第P页第X行,目标地址为第X行的列地址0,第X行的X.TAG[6:0]=0011110。当待写入数据B无法写入至列地址0时,则查找到的空白列地址为第X行中的列地址1。而当目标行为第P页第Y行时,第Y行的Y.TAG[6:0]=0011110,则目标地址为第X行的列地址5,查找到的空白列地址为第X行的列地址4。

步骤S104,将所述待写入数据写入至所述空白列地址中。

在具体实施中,在查找到空白列地址后,即可将待写入数据写入至空白列地址。在本发明实施例中,在将待写入数据写入至空白列地址时,将待写入数据写入至空白列地址的低位字节。

在将待写入数据写入至空白列地址之后,可以将写入数据的空白列地址对应的列写入状态标识更新。

由于目标行可能是根据EEPROM地址直接映射得到的第X行,也可能是间接映射得到的第Y行,因此,在本发明一实施例中,当目标行为直接映射得到的,则查找到的空白列地址为目标地址相邻的高位列;当目标行为间接映射得到的,则查找到的空白列地址为目标地址相邻的低位列。

例如,目标行为第X行,第X行的所有适于写入数据的列地址所对应的写入状态的标识X.TAG[6:0]=0011100。在X.TAG[6:0]中,从低位向高位查找到第一个1对应的列地址为列地址2,因此,目标地址为列地址1。

列地址1中的高位字节数据为11110000,低位字节位11001100,从列地址1中读取出的数据为列地址1的高位字节数据。待写入数据B为11110011,因此判定列地址1中的高位字节数据无法被直接更新为待写入数据B,故,查找与列地址1相邻的高位空白列地址。列地址2与列地址1相邻且为空白列地址,因此,将待写入数据B写入到列地址2中的低位字节,也即将待写入数据B写入至列地址2的word_l中。同时,将目标行对应的X.TAG[6:0]更新为0011000。

又如,目标行为EEPROM地址间接映射得到的第Y行,第Y行对应的Y.TAG[6:0]=0011100。在Y.TAG[6:0]中,从高位向低位查找到第一个1对应的列地址为列地址4,因此,目标地址为列地址5。若列地址5中无法写入待写入数据B,则将待写入数据写入至列地址4中,并将第Y行对应的Y.TAG[6:0]更新为0001100。

在具体实施中,由于目标地址可能是EEPROM地址直接映射得到的,也可能是EEPROM地址间接映射得到的,因此,每一行中可能会存在两个EEPROM地址对应的数据。

为区分两个不同的EEPROM地址对应的数据,可以在目标行中所有适于写入数据的列地址所对应的列写入状态标识中,设置一个列地址对应的列写入状态标识保持为1,以此来区分两个不同的EEPROM地址对应的数据。即使该列地址中写入了数据,该列地址对应的列写入状态标识仍保持为1,而不是更新为0。因此,在查找到目标行中存在列写入状态标识为1的列地址时,该列地址并不一定是空白列地址,还需要根据目标行的行写入状态标识,来进一步判断该列地址是否为空白列地址。

当目标行中所有适于写入数据的列地址所对应的列写入状态标识中仅存在一个1时,1对应的列地址的所有高位列地址中存储的是一个EEPROM地址对应的数据,1对应的列地址的所有低位列地址中存储的是另一个EEPROM地址对应的数据。

例如,TAG[6:0]=0010000,则无论列地址4中是否写入数据,列地址4对应的列写入状态标识始终为1。列地址5、列地址6存储的是间接映射的EEPROM地址对应的数据,列地址0~3存储的是直接映射的EEPROM地址对应的数据。

当目标行中所有适于写入数据的列地址所对应的列写入状态标识中仅存在一个1时,若目标行未写满,判定列写入状态标识为1的列地址为空白列地址,可以将待写入数据写入,并保持列写入状态标识为1的列地址对应的列写入状态标识不变。之后,将目标行的写入状态更新为写满。

例如,目标行为第X行,且第X行的X.TAG[6:0]=0010000,目标地址为列地址3。在判定列地址3中无法写入待写入数据B时,获取第X行的X.TAG[15]。当第X行的X.TAG[15]=1时,判定第X行未写满,因此,将B写入至列地址4的低位字节,并保持列地址4的列写入状态标识为1不变,也即在将B写入至列地址4后,第X行的X.TAG[6:0]仍为0010000。之后,将第X行的X.TAG[15]由1更新为0,也即将第X行的写入状态从未写满更新为写满。

当目标行中所有适于写入数据的列地址所对应的列写入状态标识中仅存在一个1,且目标行写满时,意味着列写入状态标识为1的列地址中已写入数据。此时,可以在目标行所处的Flash闪存的页中查找其他行的空白列地址。在其他行查找到空白列地址之后,将待写入数据写入至查找到的空白列地址的低位字节,并将写入数据的空白列地址的列写入状态标识更新。

例如,目标行为第X行,且第X行的X.TAG[6:0]=0010000,目标地址为列地址3。在判定列地址3中无法写入待写入数据B时,获取第X行的X.TAG[15]。当第X行的X.TAG[15]=0时,判定第X行写满,因此,待写入数据B无法写入至列地址4中。

在具体实施中,当目标行为第X行时,可以从第X行向下扫描每一行的最低N位是否均为1。当查找到第Z行的最低N位均为1时,可以将待写入数据写入至最低位列地址。当目标行为第X行时,也可以从第X行向下扫描每一行的最高位是否均为1。当查找到第Z行的最高位均为1时,可以将待写入数据写入至最高位列地址。在本发明实施例中,N为大于等于2的整数。

在本发明实施例中,可以预先设定第X行向下扫描的总行数。也就是说,无需对Flash闪存的页中的每一行都进行扫描,只要扫描部分行即可,因此可以减少遍历扫描的行数,提高整体读写的性能。当扫描到Flash闪存的页的最后一行,且扫描行数还没有达到向下扫描的总行数时,可以从Flash闪存的页的第一行继续开始扫描,直至扫描的行数达到预设的总行数。

向下扫描的总行数可以与第X行中设置的本行行偏移量所占用的比特数相关。当第X行中设置的本行行偏移量所占用的比特数为3时,向下扫描的总行数为23=8。相应地,当第X行中设置的本行行偏移量所占用的比特数为4时,向下扫描的总行数为24=16。

在将待写入数据写入至第Z行后,可以将第Z行与第X行的间隔行数作为第X行的本行行偏移量。

例如,N=2,从第X向下扫描每一行的最高2位,也即每一行的TAG[6:5]是否均为1。当查找到第Z行的Z.TAG[6:5]均为1时,将待写入数据写入至第Z行的列地址6的低位字节中,并将第Z行的列地址6的列写入状态标识更新为0,之后将Z与X的差值的反码写入至第X行的X.TAG[14:11]中。

相应地,当目标行为第Y行时,可以从第Y行向下扫描每一行的最低N位是否均为1。当查找到第Z行的最低N位均为1时,可以将待写入数据写入至最低位列地址。当目标行为第X行时,也可以从第X行向下扫描每一行的最高位是否均为1。当查找到第Z行的最高位均为1时,可以将待写入数据写入至最高位列地址。在本发明实施例中,N为大于等于2的整数。

在将待写入数据写入至第Z行后,可以将第Z行与第X行的间隔行数作为第X行的本行行偏移量。

例如,N=2,从第Y行向下扫描每一行的最低2位,也即每一行的TAG[1:0]是否均为1。当查找到第Z行的Z.TAG[1:0]均为1时,将待写入数据写入至第Z行的列地址0的低位字节中,并将第Z行的列地址0的列写入状态标识更新为0,并将Z与Y的差值的反码写入至第Y行的Y.TAG[14:11]中。

在具体实施中,还可能存在没有找到第Z行的情况。当没有找到第Z行时,可以先将目标地址所处的Flash闪存的页中数据进行备份。在备份操作完成之后,将标地址所处的Flash闪存的页进行擦除操作。在擦除操作完成之后,可以将备份了的数据重新写入至目标地址所处的Flash闪存的页中。

步骤S105,将所述待写入数据写入至所述目标地址中。

在具体实施中,在将待写入数据写入至目标地址中时,若目标地址中没有写入数据,则将待写入数据写入后,将目标地址对应的列写入状态标识更新。若目标地址中已写入数据,则在将待写入数据写入时,保持目标地址对应的列写入状态标识不变。

例如,目标地址为列地址0,且列地址0对应的列写入状态标识为1。将待写入数据写入至列地址0的低位字节,且将列地址0对应的列写入状态标识更新为0。

又如,目标地址为列地址1,从列地址1中读取出的字节数据为低位字节数据A,也即word_l中的数据为数据A。列地址1对应的列写入状态标识为0。由于数据A能够被更新为待写入数据B,因此,将word_l中的数据A更新为B,并保持列地址1对应的列写入状态标识为0不变。

从步骤S102中可知,当读取出的字节数据为低位字节数据,且低位字节数据能够被更新为待写入数据时,判定可以将待写入数据写入至目标地址中。当读取出的字节数据为低位字节数据,且低位字节数据无法被更新为待写入数据时,若待写入数据为非全1数据,则判定可以将待写入数据写入至目标地址中。

在本发明实施例中,当读取出的字节数据为低位字节数据,且低位字节数据能够被更新为待写入数据时,将待写入数据写入至目标地址的低位字节。当读取出的字节数据为低位字节数据,且低位字节数据无法被更新为待写入数据时,则将待写入数据写入至目标地址的高位字节中。

例如,目标地址为列地址1,从列地址1中读取出的字节数据为低位字节数据A,列地址1对应的列写入状态标识为0。由于数据A能够被更新为待写入数据B,因此,将word_l中的数据A更新为B,并保持列地址1对应的列写入状态标识为0不变。

又如,目标地址为列地址1,从列地址1中读取出的字节数据为低位字节数据A,列地址1对应的列写入状态标识为0。由于数据A无法被更新为待写入数据B,且待写入数据B为非全1,则将待写入数据B写入至列地址1的word_h,也即将待写入数据B写入至列地址1的高位字节,并保持列地址1对应的列写入状态标识为0不变。

在具体实施中,当目标地址所处的行为新行,也即目标地址所处的行中的列地址均未写入数据时,可以将待写入数据写入到目标地址中,并更新目标地址对应的列地址的列写入状态标识。

在本发明一实施例中,在写入过程中,若目标行为直接映射得到的,则从低位向高位写入;若目标行是间接映射得到的,则从高位向低位写入。

例如,目标地址所处的行为第X行,第X行对应的列地址6~0的标识为X.TAG[6:0]=1111111。目标地址为列地址0,列地址0中包括两个字节。此时,将待写入数据B写入到列地址0的word_l中,并将列地址0的TAG更新为0,也即更新后的X.TAG[6:0]=1111110。

又如,目标地址所处的行为第Y行,第Y行对应的列地址6~0的标识为Y.TAG[6:0]=1111111。目标地址为列地址6,列地址6中包括两个字节。此时,将待写入数据B写入到列地址6的word_l中,并将列地址6的TAG更新为0,也即更新后的Y.TAG[6:0]=0111111。

由此可见,当目标地址中无法写入待写入数据时,在目标地址所处的Flash页上查找空白列地址,并将待写入数据写入到空白列地址中。也就是说,当EEPROM地址对应的目标地址中无法写入数据时,通过查找当前页的空白列地址,进行待写入数据的写入操作,从而可以充分利用Flash闪存的存储空间,减少Flash闪存的擦除次数,故可以提高Flash闪存的使用寿命。

在具体实施中,还可以对Flash闪存进行备份擦除操作。例如,当检测到Flash闪存的一页中已经写满了数据,无法继续写入数据,因此,可以对Flash闪存进行备份擦除操作。

在本发明实施例中,可以先将待擦除页的数据备份至专用的存储器,即将待擦除页中存储的与EEPROM地址对应的数据全部读取出来并备份,之后将对待擦除页进行擦除操作。在擦除操作完成之后,将备份好的数据重新写入,并更新每一行的行写入状态标识和适用于写入数据的列地址所对应的列写入状态标识。

需要说明的是,在将待擦除页的数据备份至专用的存储器中时,并不是将Flash闪存页中的所有数据都进行备份,而是只备份每一个EEPROM地址所对应的最后写入的数据,也即最终备份的数据可能只有M个字节,M为Flash闪存的一页的总行数。

参照图6,本发明实施例提供了一种Flash闪存的写操作装置60,所述Flash闪存的页为行与列的矩阵结构,每一行对应一个EEPROM地址,所述Flash闪存的写操作装置60包括:接收单元601、获取单元602、判断单元603、查找单元604以及写入单元605,其中:

接收单元601,用于接收对EEPROM地址的写操作指令;

获取单元602,用于获取所述Flash闪存中与所述EEPROM地址对应的目标地址;

判断单元603,用于判断所述目标地址是否能够写入所述写操作指令对应的待写入数据;

查找单元604,用于当所述判断单元603判定所述目标地址中无法写入所述待写入数据时,在所述目标地址所处的Flash闪存的页上查找空白列地址;

写入单元605,用于将所述待写入数据写入至所述查找单元604查找到的空白列地址中,以及用于当所述目标地址能够写入所述写操作指令对应的待写入数据时,将所述待写入数据写入所述目标地址。

在具体实施中,所述获取单元602,可以用于根据预设的EEPROM地址与Flash闪存的映射关系,确定所述EEPROM地址对应所述Flash闪存中的第P页第X行;确定所述目标地址对应的目标行;根据所述目标行的行写入状态标识,以及所述目标行中所有适于写入数据的列地址所对应的列写入状态标识,确定所述目标地址对应的目标列;其中:所述目标行的行写入状态标识适于标识所述目标行是否写满;所述列写入状态标识适于标识所述适于写入数据的列地址中是否写入数据。

在具体实施中,所述获取单元602,可以用于获取第X行的行写入状态标识;当所述第X行未写满时,确定所述目标行为所述第X行;当所述第X行写满,且所述第X行对应的本行行偏移量为0时,确定所述目标行为所述第X行;当所述第X行的行写入状态标识为写满,且所述第X行对应的本行行偏移量非0时,根据所述第X行对应的本行行偏移量查找跳转行;当所述跳转行对应的其他行行偏移量为0时,确定所述目标行为所述跳转行;当所述跳转行对应的其他行行偏移量非0时,根据所述跳转行对应的本行行偏移量继续查找下一跳转行,直至查找到的跳转行对应的其他行行偏移量为0时,确定所述目标行为其他行行偏移量为0的跳转行;其中,所述本行行偏移量为本行与所述目标行之间的间隔行数;所述其他行行偏移量为跳转至本行的其他行再次跳转后的行与本行的间隔行数。

在具体实施中,所述获取单元602,可以用于当所述目标行未写满时,在所述所有适于写入数据的列地址所对应的列写入状态标识中,找到最低位的1,并将与所述最低位的1对应的列相邻的低位列作为所述目标列;或,在所述所有适于写入数据的列地址所对应的列写入状态标识中,找到最高位的1,并将与所述最高位的1对应的列相邻的高位列作为所述目标列;当所述目标行写满时,在所述所有适于写入数据的列地址所对应的列写入状态标识中,找到最低位的1,并将所述最低位的1对应的列作为所述目标列;若所述所有适于写入数据的列地址所对应的列写入状态标识均为1,则将最低位或最高位的1对应的列作为所述目标列。

在具体实施中,当所述目标地址包括高位字节以及低位字节时,所述判断单元603,可以用于读取所述目标地址的高位字节数据或低位字节数据;将读取出的字节数据与所述待写入数据进行运算,根据运算结果判断所述读取出的字节数据是否能够更新为所述待写入数据;当所述读取出的字节数据能够更新为所述待写入数据时,判定所述目标地址能够写入所述待写入数据;当所述读取出的字节数据不能够更新为所述待写入数据时,若所述读取出的字节数据为所述低位字节数据,且所述待写入数据为全1时,则判定所述目标地址中无法写入所述待写入数据;若所述读取出的字节数据为所述低位字节数据,且所述待写入数据为非全1时,则判定所述目标地址中能够写入所述待写入数据;若所述读取出的字节数据为所述高位字节数据,且所述高位字节数据无法更新为所述待写入数据时,判定所述目标地址无法写入所述待写入数据。

在具体实施中,所述判断单元603,可以用于当所述高位字节数据以及所述低位字节数据均为全1时,从所述目标地址中读取所述低位字节数据;当所述高位字节数据为全1且所述低位字节数据为非全1时,或当所述高位字节数据以及所述低位字节数据均为非全1时,从所述目标地址中读取所述高位字节数据。

在具体实施中,所述判断单元603,可以用于采用公式T=&(A|~B)计算所述读取出的字节数据A对应的写入状态标识;当T=1时,判定所述字节数据A能够更新为所述待写入数据;当T=0时,判定所述字节数据A无法更新为所述待写入数据;其中,B为所述待写入数据,~B为取B的反码,A|~B为将A与(~B)按位或操作,&(A|~B)为将A|~B结果中的所有位进行与操作,T的长度为1比特。

在具体实施中,所述写入单元605,还可以用于当所述读取出的字节数据能够被更新为所述待写入数据时,在判定所述目标地址能够写入所述待写入数据之后,将所述待写入数据写入至所述读取出的字节数据对应的所述目标地址的字节;当所述待写入数据为非全1时,在判定所述目标地址中能够写入所述待写入数据之后,将所述待写入数据写入至所述目标地址的高位字节,并保持所述目标地址对应的列写入状态标识不变,以及保持所述目标地址对应的目标行的行写入状态标识不变。

在具体实施中,所述查找单元604,可以用于当所述目标行为第X行时,在所述目标行中,依次从低位至高位查找与所述目标地址相邻的低位空白列地址;当所述目标行不是第X行时,在所述目标行中,依次从高位至低位查找与所述目标地址相邻的高位空白列地址;或,当所述目标行为第X行时,在所述目标行中,依次从高位至低位查找与所述目标地址相邻的高位空白列地址;当所述目标行不是第X行时,在所述目标行中,依次从低位至高位查找与所述目标地址相邻的低位空白列地址。

在具体实施中,所述写入单元605,可以用于当所述空白列地址包括两个字节时,将所述待写入数据写入至所述空白列地址的低位字节,并更新写入数据后的所述空白列地址对应的所述列写入状态标识。

在具体实施中,所述写入单元605,可以用于当所述目标行中所有适于写入数据的列地址所对应的列写入状态标识中,仅存在一个1,且所述目标行未写满时,将所述待写入数据写入至所述列写入状态标识为1对应的空白列地址中,保持写入所述待写入数据的空白列地址的所述列写入状态标识不变,并将所述目标行的行写入状态标识更新为写满状态标识;当所述目标行中所有适于写入数据的列地址所对应的列写入状态标识中,仅存在一个1,且所述目标行写满时,从所述目标行开始,向下依次扫描与所述目标行相邻的M个其他行各自对应的适于写入数据的列地址所对应的列写入状态标识;当所述目标行为第X行时,从所述M个其他行中查找到最低N位均为1的第Z行,将所述待写入数据写入至所述第Z行的最低位列地址,并将所述第Z行的最低位列地址对应的列写入状态标识更新;当所述目标行非第X行时,从所述M个其他行中查找到最高N位均为1的第Z行,将所述待写入所述写入至所述第Z行的最高位列地址,并将所述第Z行的最高位列地址对应的列写入状态标识更新;或:当所述目标行为第X行时,从所述M个其他行中查找到最高N位均为1的第Z行,将所述待写入数据写入至所述第Z行的最高位列地址,并将所述第Z行的最高位列地址对应的列写入状态标识更新;当所述目标行非第X行时,从所述M个其他行中查找到最低N位均为1的第Z行,将所述待写入数据写入至所述第Z行的最低位列地址,并将所述第Z行的最低位列地址对应的列写入状态标识更新;其中,N≥2。

在具体实施中,所述Flash闪存的写操作装置60还可以包括:备份单元(图6中未示出),可以用于当未查找到最低N位均为1或最高N位均为1的第Z行时,对所述第P页的Flash闪存的页进行备份操作;擦除单元(图6中未示出),用于在备份操作完成之后,对所述第P页的Flash闪存进行擦除操作。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指示相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。

虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。

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