具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了能够提高数据的存储安全,并保证Flash资源的高效利用,本发明实施例提供了一种闪存数据的存储方法,如图3所示,包括:
101、在闪存的分区中确定正序分区和逆序分区,所述正序分区为包含最低地址的分区或以包含最低地址的分区起始依次连续排列的分区,所述逆序分区为除所述正序分区外的其他分区;
举例而言,从两端向内的方向将闪存的多个分区中划分成两部分,其中,将低端分区或以低端分区起始依次连续排列的分区称为正序分区,将Flash中除正序分区以外的分区,即以高端分区起始依次连续排列的分区称为逆序分区。在本发明实施例中,将包含Flash的最低地址的分区称作低端分区,将包含Flash的最高地址的分区称作高端分区。
可选的,可以仅将高端分区作为逆序分区,按照从高地址向低地址的顺序向所述高端分区写入数据,按照从低地址向高地址的顺序向所述低端分区或其他分区写入数据。或者,可以仅将低端分区作为正序分区,按照从低地址向高地址的顺序向所述低端分区写入数据,按照从高地址向低地址的顺序向所述高端分区或其他分区写入数据。
例如,在图4所示的分区结构中,将USER DATA分区作为逆序分区,将以BOOT CODE分区起始依次连续排列的分区,即BOOT CODE分区、FS分区和APP CODE分区作为正序分区。
102、按照从低地址向高地址的顺序向所述正序分区写入数据,按照从高地址向低地址的顺序向所述逆序分区写入数据。
举例而言,在按照从低地址向高地址的顺序向所述正序分区写入数据时,可以在所述正序分区中确定当前的数据写入块,将所述数据写入块作为第一低地址写入块,然后,向所述第一低地址写入块写入数据。并且,在数据写满所述第一低地址写入块时,将所述第一低地址写入块的索引加一,得到第二低地址写入块,然后,向所述第二低地址写入块写入数据。
或者,在按照从高地址向低地址的顺序向所述逆序分区写入数据时,可以在所述逆序分区中确定当前的数据写入块,将所述数据写入块作为第一高地址写入块,然后,向所述第一高地址写入块写入数据。并且,在数据写满所述第一高地址写入块时,将所述第一高地址写入块的索引减一,得到第二高地址写入块,然后,向所述第二高地址写入块写入数据。
并且,在向正序分区的块的多个页写入数据时,可以按照从页低地址向页高地址的顺序向正序分区的块写入数据。如果正序分区的块支持从页高地址向页低地址的顺序写入数据,也可以按照从页高地址向页低地址的顺序向正序分区的块写入数据。
或者,在向逆序分区的块的多个页写入数据时,可以按照从页低地址向页高地址的顺序向正序分区的块写入数据。如果逆序分区的块支持从页高地址向页低地址的顺序写入数据,也可以按照从页高地址向页低地址的顺序向逆序分区的块写入数据。
例如,在图4所示的分区结构中,向USER DATA分区写入数据的具体步骤可以如图5所示,包括:
1021、初始化Flash的起始操作位置为Flash的高地址,位于USER DATA分区,即写入数据的操作分区为逆序分区;
1022、对当前的Flash块进行写操作,向当前的数据写入块写入数据;
虽然按照从块高地址向块低地址依次对逆序分区的块进行写操作,但由于有些型号的Flash不支持页的逆序操作,其只支持从页低地址向页高地址执行写操作,此时,仍然需要采用从页低地址向页高地址的顺序进行块内部的写操作。
1023、判断当前的数据写入块是否被写满,在当前的数据写入块写满时进入步骤1024,否则,跳至步骤1022,继续向当前的数据写入块写入数据;
1024、将当前的数据写入块的索引减一,得到新的数据写入块;
1025、判断需要写入的数据是否全部被写入到Flash中,若已被全部写入,则结束整个写操作,否则,跳至步骤1022,继续向新的数据写入块写入数据。
另外,可以将正序分区和逆序分区各自的空闲空间合成一个大的空闲空间共同使用,从而使该空闲空间的分配使用更加灵活。具体可以为:按照从低地址向高地址的顺序向所述正序分区与所述逆序分区之间的空闲空间写入属于所述正序分区的数据,或者,按照从高地址向低地址的顺序向所述正序分区与所述逆序分区之间的空闲空间写入属于所述逆序分区的数据。例如,在图4所示的分区结构中,USERDATA分区和APP CODE分区共用两者之间存在的SPARE空闲空间,USERDATA分区的数据可以按照从高地址向低地址的顺序写入SPARE空闲空间,APP CODE分区数据可以按照从低地址向高地址的顺序写入SPARE空闲空间。
本实施例闪存数据的存储方法,通过在闪存的分区中确定正序分区和逆序分区,按照从低地址向高地址的顺序向所述正序分区写入数据,按照从高地址向低地址的顺序向所述逆序分区写入数据。因此,即使正序分区中的某个分区的大小发生变化时,属于逆序分区的分区中的相对参考信息依然存在,即属于逆序分区的分区中的数据有起始地址,可以对逆序分区中的数据进行有效检索,因此,避免了存储在逆序分区的数据全部丢失,当逆序分区的某个分区的大小发生变化时正序分区的数据亦然,从而,提高了数据的存储安全性。并且,不需使用文件系统对Flash数据进行存储管理,保证Flash资源的高效利用。
与上述存储方法相对应地,本发明实施例还提供了一种闪存数据的访问方法,如图6所示,包括:
201、在闪存的分区中确定正序分区和逆序分区,所述正序分区为包含最低地址的分区或以包含最低地址的分区起始依次连续排列的分区,所述逆序分区为除所述正序分区外的其他分区;
举例而言,在Flash存储数据时,已将Flash的分区划分成正序分区和逆序分区。在读取Flash中的数据时,需要根据分区划分的相关信息判断出哪些分区是正序分区,即按照从低地址向高地址的顺序存储数据的分区,哪些分区是逆序分区,即按照从高地址向低地址的顺序存储数据的分区。
例如,读取图4所示的分区结构的Flash的数据时,确定USERDATA分区为逆序分区,而BOOT CODE分区、FS分区和APP CODE分区为正序分区。
202、按照从低地址向高地址的顺序从所述正序分区读取数据,按照从高地址向低地址的顺序从所述逆序分区读取数据。
举例而言,在读取的数据按照从低地址向高地址的顺序写入正序分区时,在所述正序分区中确定当前的数据读取块,将所述数据读取块作为第一低地址读取块,然后,从所述第一低地址读取块中读取数据。并且,在读取完所述第一低地址读取块的数据时,将所述第一低地址读取块的索引加一,得到第二低地址读取块,然后,从所述第二低地址读取块中读取数据。
或者,在读取的数据按照从高地址向低地址的顺序写入逆序分区时,在所述逆序分区中确定当前的数据读取块,将所述数据读取块作为第一高地址读取块,然后,从所述第一高地址读取块中读取数据。并且,在读取完所述第一高地址读取块的数据时,将所述第一高地址读取块的索引减一,得到第二高地址读取块,然后,从所述第二高地址读取块中读取数据。
并且,在所述第一低地址读取块或第二低地址读取块中的数据是按照从页低地址向页高地址的顺序写入时,按照从页低地址向页高地址的顺序从所述第一低地址读取块或第二低地址读取块中读取数据;或者,在所述第一低地址读取块或第二低地址读取块中的数据是按照从页高地址向页低地址的顺序写入时,按照从页高地址向页低地址的顺序从所述第一低地址读取块或第二低地址读取块中读取数据。
或者,在所述第一高地址读取块或第二高地址读取块中的数据是按照从页低地址向页高地址的顺序写入时,按照从页低地址向页高地址的顺序从所述第一高地址读取块或第二高地址读取块中读取数据;或者,在所述第一高地址读取块或第二高地址读取块中的数据是按照从页高地址向页低地址的顺序写入时,按照从页高地址向页低地址的顺序从所述第一高地址读取块或第二高地址读取块中读取数据。
例如,从图4所示的分区结构的Flash的USER DATA分区读取数据的具体步骤可以如图7所示,包括:
2021、初始化Flash的起始操作位置为Flash的高地址,位于USER DATA分区,即读取数据的操作分区为逆序分区;
2022、对当前的Flash块进行读操作,从当前的数据读取块读取数据;
虽然按照从块高地址向块低地址依次对逆序分区的块进行写操作,但由于有些型号的Flash不支持页的逆序操作,其只支持从页低地址向页高地址执行写操作,因此,仍然需要采用从页低地址向页高地址的顺序进行块内部的写操作。此时,按照从块高地址向块低地址依次对逆序分区的块进行读操作,按照从页低地址向页高地址的顺序对块内部进行读操作。
2023、判断当前的数据读取块中的数据是否已被全部读完,在当前的数据读取块读完时进入步骤2024,否则,跳至步骤2022,继续从当前的数据读取块读取数据;
2024、将当前的数据读取块的索引减一,得到新的数据读取块;
2025、判断需要读取的数据是否全部从Flash中读出,若已被全部被读出,则结束整个读操作,否则,跳至步骤2022,继续从新的数据读取块读取数据。
另外,正序分区和逆序分区之间的空闲空间可以被共同使用,使该空闲空间的分配使用更加灵活。此时,可以按照从低地址向高地址的顺序从所述正序分区与所述逆序分区之间的空闲空间读取属于所述正序分区的数据,或者,按照从高地址向低地址的顺序从所述正序分区与所述逆序分区之间的空闲空间读取属于所述逆序分区的数据。
本发明实施例提供的闪存数据的访问方法,通过在闪存的分区中确定正序分区和逆序分区,按照从低地址向高地址的顺序在所述正序分区读取数据,按照从高地址向低地址的顺序在所述逆序分区读取数据。因此,即使正序分区中的某个分区的大小发生变化时,属于逆序分区的分区中的相对参考信息依然存在,即属于逆序分区的分区中的数据有起始地址,可以对逆序分区中的数据进行有效检索,因此,避免了存储在逆序分区的数据全部丢失,当逆序分区的某个分区的大小发生变化时正序分区的数据亦然,从而,提高了数据的存储安全性。并且,不需使用文件系统对Flash数据进行存储管理,保证Flash资源的高效利用。
与上述存储方法相对应地,本发明实施例还提供了一种闪存数据的存储装置,如图8所示,包括:
分区确定单元301,用于在闪存的分区中确定正序分区和逆序分区,所述正序分区为包含最低地址的分区或以包含最低地址的分区起始依次连续排列的分区,所述逆序分区为除所述正序分区外的其他分区;
数据写入单元302,用于按照从低地址向高地址的顺序向所述正序分区写入数据,按照从高地址向低地址的顺序向所述逆序分区写入数据。
进一步地,所述数据写入单元302,具体用于在所述正序分区中确定当前的数据写入块,将所述数据写入块作为第一低地址写入块,向所述第一低地址写入块写入数据;或者,在数据写满所述第一低地址写入块时,将所述第一低地址写入块的索引加一,得到第二低地址写入块,向所述第二低地址写入块写入数据;或者,在所述逆序分区中确定当前的数据写入块,将所述数据写入块作为第一高地址写入块,向所述第一高地址写入块写入数据;或者,并在数据写满所述第一高地址写入块时,将所述第一高地址写入块的索引减一,得到第二高地址写入块,向所述第二高地址写入块写入数据。
进一步地,所述数据写入单元302,还用于按照从低地址向高地址的顺序向所述正序分区与所述逆序分区之间的空闲空间写入属于所述正序分区的数据,或者,按照从高地址向低地址的顺序向所述正序分区与所述逆序分区之间的空闲空间写入属于所述逆序分区的数据。
本实施例闪存数据的存储装置的工作方法可以参看图3所描述的方法,在此不再赘述。
本实施例闪存数据的存储装置,通过在闪存的分区中确定正序分区和逆序分区,按照从低地址向高地址的顺序向所述正序分区写入数据,按照从高地址向低地址的顺序向所述逆序分区写入数据。因此,即使正序分区中的某个分区的大小发生变化时,属于逆序分区的分区中的相对参考信息依然存在,即属于逆序分区的分区中的数据有起始地址,可以对逆序分区中的数据进行有效检索,因此,避免了存储在逆序分区的数据全部丢失,当逆序分区的某个分区的大小发生变化时正序分区的数据亦然,从而,提高了数据的存储安全性。并且,不需使用文件系统对Flash数据进行存储管理,保证Flash资源的高效利用。
与上述存储装置相对应地,本发明实施例还提供了一种闪存数据的访问装置,如图9所示,包括:
分区确定单元401,用于在闪存的分区中确定正序分区和逆序分区,所述正序分区为包含最低地址的分区或以包含最低地址的分区起始依次连续排列的分区,所述逆序分区为除所述正序分区外的其他分区;
数据读取单元402,用于按照从低地址向高地址的顺序从所述正序分区读取数据,按照从高地址向低地址的顺序从所述逆序分区读取数据。
进一步地,所述数据读取单元402包括:
块确定模块,用于在所述正序分区中确定当前的数据读取块,将所述数据读取块作为第一低地址读取块,从所述第一低地址读取块中读取数据;或者,在读取完所述第一低地址读取块的数据时,将所述第一低地址读取块的索引加一,得到第二低地址读取块,从所述第二低地址读取块中读取数据;或者,在所述逆序分区中确定当前的数据读取块,将所述数据读取块作为第一高地址读取块,从所述第一高地址读取块中读取数据;或者,在读取完所述第一高地址读取块的数据时,将所述第一高地址读取块的索引减一,得到第二高地址读取块,从所述第二高地址读取块中读取数据。
进一步地,所述块读取模块,具体用于在所述第一低地址读取块或第二低地址读取块中的数据是按照从页低地址向页高地址的顺序写入时,按照从页低地址向页高地址的顺序从所述第一低地址读取块或第二低地址读取块中读取数据;或者,在所述第一低地址读取块或第二低地址读取块中的数据是按照从页高地址向页低地址的顺序写入时,按照从页高地址向页低地址的顺序从所述第一低地址读取块或第二低地址读取块中读取数据;或者,在所述第一高地址读取块或第二高地址读取块中的数据是按照从页低地址向页高地址的顺序写入时,按照从页低地址向页高地址的顺序从所述第一高地址读取块或第二高地址读取块中读取数据;或者,在所述第一高地址读取块或第二高地址读取块中的数据是按照从页高地址向页低地址的顺序写入时,按照从页高地址向页低地址的顺序从所述第一高地址读取块或第二高地址读取块中读取数据。
进一步地,所述数据读取单元402,还用于按照从低地址向高地址的顺序从所述正序分区与所述逆序分区之间的空闲空间读取属于所述正序分区的数据,或者,按照从高地址向低地址的顺序从所述正序分区与所述逆序分区之间的空闲空间读取属于所述逆序分区的数据。
本实施例闪存数据的访问装置的工作方法可以参看图6所描述的方法,在此不再赘述。
本发明实施例提供的闪存数据的访问装置,通过在闪存的分区中确定正序分区和逆序分区,按照从低地址向高地址的顺序在所述正序分区读取数据,按照从高地址向低地址的顺序在所述逆序分区读取数据。因此,即使正序分区中的某个分区的大小发生变化时,属于逆序分区的分区中的相对参考信息依然存在,即属于逆序分区的分区中的数据有起始地址,可以对逆序分区中的数据进行有效检索,因此,避免了存储在逆序分区的数据全部丢失,当逆序分区的某个分区的大小发生变化时正序分区的数据亦然,从而,提高了数据的存储安全性。并且,不需使用文件系统对Flash数据进行存储管理,保证Flash资源的高效利用。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。