发明内容
有鉴于此,本发明解决的问题是提供一种闪存数据存储方法和装置,可以使用户安全读取到存储在闪存中的数据,避免所存储数据丢失。
为此,本发明提供了一种闪存数据存储方法,包括以下步骤:
扫描闪存;
根据扫描结果,设置坏扇区所在页为禁止写入页,没有坏扇区的页为正常页;
当扫描出的坏扇区数小于或等于预设值时,在每个正常页中的三个扇区写入需要存储的数据,在余下的一个扇区写入特定数据;
当扫描出的坏扇区数大于预设值时,将需要存储的数据重复写入每个正常页的四个扇区。
优选地,所述特定数据通过对其他三个扇区中写入的数据执行异或运算获得。
优选地,所述预设值根据所存储数据的重要性进行设定。
本发明还提供了一种闪存数据存储装置,包括:
扫描单元,用于扫描闪存;
设置单元,用于根据扫描结果,设置坏扇区所在页为禁止写入页,没有坏扇区的页为正常页;
第一执行单元,用于当扫描出的坏扇区数小于或等于预设值时,在每个正常页中的三个扇区写入需要存储的数据,在余下的一个扇区写入特定数据;
第二执行单元,用于当扫描出的扇区数大于预设值时,将需要存储的数据重复写入每个正常页的四个扇区。
优选地,所述第一执行单元包括运算单元,所述运算单元通过对其他三个扇区中写入的数据执行异或运算,获得所述特定数据。
优选地,所述预设值根据所存储数据的重要性进行设定。
与现有技术相比,本发明提供的闪存数据存储方法,通过在存储数据前扫描闪存,然后根据扫描结果,设置坏扇区所在页为禁止写入页,没有坏扇区的页为正常页;当扫描出的坏扇区数小于或等于预设值时,对正常页执行第一预定操作;当扫描出的坏扇区数大于预设值时,对正常页执行第二预定操作,从而对在闪存中所要存储的数据进行了备份,进而使用户安全读取到在闪存中存储的数据,避免所存储数据丢失,实现数据在闪存内的安全存储。
具体实施方式
为使本领域技术人员更好地理解本发明,下面结合具体实施例对本发明提供的数据存储方法作具体说明。
信息是通过语言、文字、声音、图形、图像等信号表示,信息不能独立存在,它需要转化为某种物理形式存在,即我们通常所说的数据。数据是各种各样的物理符号及其组合,它反映了信息的内容。数据的形式会随着物理媒介的改变而发生变化。比如,一首歌,用磁带录制下来,用CD刻录出来,他们都可以传递歌曲。在磁带上,数据是磁性强度不同的磁信号,在光盘上,他们是深浅不同的凹坑。但是他们记录的信息是相同的。
在计算机领域,计算机的基本功能是对数据进行运算和加工处理,数据的类型有两种:一种是数值数据,如3.1416、-2.71828……,另一种是非数值数据(信息),如A、b、+、=……。无论哪一种数据在计算机中都是用二进制数码表示的。计算机中只有二进制数值,所有的符号都是用二进制数值代码表示的,数的正、负号也是用二进制代码表示。数值的最高位用“0”、“1”分别表示数的正、负号。一个数(连同符号)在计算机中的表示形式称为机器数,数值处理采用二进制运算,非数值处理采用二进制编码,它们具有运算简单、电路实现方便、成本低廉等优点。
基于计算机领域中的数据是用二进制数码来表示,本发明提供了一种闪存数据存储方法,首先可以对数据进行安全有效的存储,参见图1,具体步骤如下:
步骤S101:扫描闪存。
步骤S102:根据扫描结果,设置坏扇区所在页为禁止写入页,没有坏扇区的页为正常页。
步骤S103:当扫描出的坏扇区数小于或等于预设值时,对正常页执行第一预定操作;当扫描出的坏扇区数大于预设值时,对正常页执行第二预定操作。
在数据存储前,需要对闪存进行初始化扫描。
需要说明的是,运用本发明提供的方法,在本次(即当前)需要对闪存进行数据存储时,在初始化扫描中如果发现一个块的某个页中出现坏扇区,则将该页标记为禁止写入页,禁止对出现问题的坏扇区所在页进行写入操作,当然,该禁止写入页依然可以进行读取操作。
在这里,禁止写入页之外的其他页为正常页,由于不存在坏扇区,本发明对其进行数据写入、读取操作。
需要说明的是,扫描出的坏块数体现了该闪存的稳定性,坏块数越多,则该闪存越不稳定。
所述的预设值可以根据所存储数据的重要性进行调整设定,可以为闪存总块数的一半、三分之一或其他预设定的值。
基于闪存的每个页中包括有4个扇区,所述第一预定操作为:在每个正常页中的三个扇区写入需要存储的数据,在余下的一个扇区写入特定数据,该特定数据通过对其他三个扇区中写入的数据执行异或运算后得到。
这里,异或是用于逻辑运算的数学运算符。
例如,本次需要存储时,在一个正常页中的三个扇区分别写入要存储的数据A、B、C,在余下的扇区存储特定数据D,那么使所述特定数据
图2为在一个正常页中存储数据A、B、C、D的示意图。由于特定数据
那么根据异或运算法则,
所以下次对闪存进行读取数据B时,如果B数据所在的扇区损坏时,可以运算得到B;C数据所在的扇区损坏时,可以运算得到C;A数据所在的扇区损坏时,可以运算得到A。
计算机中数据的存储是一字节(8BIT)来存储的,假设A为十进制数1,存储时转化成二进制为00000001;B为十进制数2,存储时转化成二进制为00000010;C为十进制数4,存储时转化成二进制为00000100,那么对A、B、C执行异或运算,D会被存储为二进制00000111,十进制值为7。
由于闪存的每个页中包括有4个扇区,本次需要将数据写入闪存时,通过在每个正常页的三个扇区用来存储需要写入的数据,一个扇区用来存储特定数据,从而即使在下次进行闪存数据读取时,扫描出数据存储页中的某个扇区出现损坏,仍然可以还原得到在该扇区所存储的数据,达到安全存储数据的目的。
目前在使用闪存前,对闪存先进行初始化扫描,只要一个块中出现一个坏扇区,即将整个块标记为坏块,从而对该块进行屏蔽。本发明在本次存储数据时,通过执行第一预定操作,使得不需由于闪存一个页中有一个坏扇区时,而对该页所在的整个闪存块执行屏蔽操作,本发明只是禁止对出现问题的页进行写入操作,从而有效利用了一个块中其他页剩余的好扇区,提高了闪存的利用率。
所述第二预定操作为:将需要存储的数据写入一个页的四个扇区。在本次需要对闪存存储数据时,通过这个操作,只要在一个页的四个扇区中还存在一个好的扇区,那么就能保证下次使用闪存时,能够读到所存储的数据,使数据不会丢失。假定需要存储的数据为E,图3为在一个页的扇区中存储数据E的示意图。
需要说明的是,目前的存储方法为:如果一个块的一个扇区坏掉了,整个坏都要屏蔽掉,这样严重减少闪存能够用来存储数据的容量,浪费闪存存储资源。而运用本发明提供的方法,在本次需要存储数据时,在扫描中发现有坏扇区,仅禁止对坏扇区所在页进行写入操作,仍然可以对所在页的其他好扇区进行读取操作,且通过执行第二预定操作,只要下次使用闪存时,闪存块中存储数据的页的四个扇区中还存在一个好的扇区,就能保证用户可以读取到所存储的数据,因此,本次存储数据时,通过执行第二预定操作,使得下次使用闪存时,只有对数据存储页的扇区的扫描结果全是坏扇区时,才无法读取到该页所存储的数据,从而有效提高了所存储数据的安全性。
本发明还提供了一种闪存数据存储装置,如图4所示,该存储装置包括:
扫描单元401,扫描闪存;
设置单元402,用于根据扫描结果,设置坏扇区所在页为禁止写入页,没有坏扇区的页为正常页;
第一执行单元403,用于当扫描出的坏扇区数小于或等于预设值时,对正常页执行第一预定操作;
第二执行单元404,用于当扫描出的坏扇区数大于预设值时,对正常页执行第二预定操作。
在本发明中,所述预设值根据所存储数据的重要性进行调整设定,可以为闪存总块数的一半、三分之一或其他预设定的值。
需要说明的是,在所述第一执行单元中包括有运算单元,所述运算单元通过对其他三个扇区中写入的数据执行异或运算,获得所述特定数据。
在本发明中,基于闪存的每个页中包括有4个扇区,所述第一预定操作为:在每个正常页中的三个扇区写入需要存储的数据,在余下的一个扇区写入特定数据。该特定数据通过对其他三个扇区中写入的数据执行异或运算后得到。
例如,本次需要存储时,在一个正常页中的三个扇区分别写入要存储的数据A、B、C,在余下的扇区存储特定数据D,那么使所述特定数据
图2为在一个正常页中存储数据A、B、C、D的示意图。由于特定数据
那么根据异或运算法则,
所以下次对闪存进行读取数据B时,如果B数据所在的扇区损坏时,可以运算得到B;C数据所在的扇区损坏时,可以运算得到C;A数据所在的扇区损坏时,可以运算得到A。
计算机中数据的存储是一字节(8BIT)来存储的,假设A为十进制数1,存储时转化成二进制为00000001;B为十进制数2,存储时转化成二进制为00000010;C为十进制数4,存储时转化成二进制为00000100,那么对A、B、C执行异或运算,
D会被存储为二进制00000111,十进制值为7。
由于闪存的每个页中包括有4个扇区,本次需要将数据写入闪存时,通过第一执行单元403在每个正常页的三个扇区用来存储需要写入的数据,一个扇区用来存储特定数据,从而即使在下次进行闪存数据读取时,扫描单元40扫描出数据存储页中的某个扇区出现损坏,仍然可以还原得到在该扇区所存储的数据,达到安全存储数据的目的。
目前在使用闪存前,对闪存先进行初始化扫描,只要一个块中出现一个坏扇区,即将整个块标记为坏块,从而对该块进行屏蔽。本发明在本次存储数据时,通过第一执行单元403执行第一预定操作,使得不需由于闪存一个页中有一个坏扇区时,而对该页所在的整个闪存块执行屏蔽操作,本发明只是禁止对出现问题的页进行写入操作,从而有效利用了一个块中其他页剩余的好扇区,提高了闪存的利用率。
所述第二预定操作为:将需要存储的数据写入一个页的四个扇区。在本次需要对闪存存储数据时,通过这个操作,只要在一个页的四个扇区中还存在一个好的扇区,那么就能保证下次使用闪存时,能够读到所存储的数据,使数据不会丢失。假定需要存储的数据为E,图3为在一个页的扇区中存储数据E的示意图。
需要说明的是,目前的存储方法为:如果一个块的一个扇区坏掉了,整个坏都要屏蔽掉,这样严重减少闪存能够用来存储数据的容量,浪费闪存存储资源。而运用本发明提供的装置,在本次需要存储数据时,扫描单元401发现闪存中有坏扇区,通过设置单元402仅禁止对坏扇区所在页进行写入操作,仍然可以对所在页的其他好扇区进行读取操作,且通过第二执行单元404执行第二预定操作,只要下次使用闪存时,闪存块中存储数据的页的四个扇区中还存在一个好的扇区,就能保证用户可以读取到所存储的数据,因此,本次存储数据时,通过第二执行单元404执行第二预定操作,使得下次使用闪存时,只有对数据存储页的扇区的扫描结果全是坏扇区时,才无法读取到该页所存储的数据,从而有效提高了所存储数据的安全性。
这里,异或是用于逻辑运算的数学运算符。
以上所述仅是本发明的优选实施方式,并不用以限制本发明。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干修改,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。