一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

NOR-FLASH模拟FRAM存储的方法及装置与流程

2022-03-22 23:28:17 来源:中国专利 TAG:

nor-flash模拟fram存储的方法及装置
技术领域
1.本发明涉及数据存储技术领域,尤其涉及一种nor-flash模拟fram存储的方法及装置。


背景技术:

2.在车载设备中,对于非易失性存储器的需求越来越大,读写速度要求越来越快,功耗要求越来越小。铁电存储器(fram,ferroelectric random access memory)能兼容ram的一切功能,并且和rom技术一样,是一种非易失性的存储器。与传统的非易失性存储器相比,铁电存储器具有功耗小、读写速度快、抗辐照能力强等优点,因此受到很大关注。fram在半导体市场上已经得到了商业验证,且fram存储器产品已成功应用在汽车中。
3.现在车载设备中已经使用fram存储器,但是fram的制造成本高,价格比eeprom、flash更加昂贵,储存的空间更小。而且fram技术都被国外厂家所垄断,加上近几年的fram存储器价格上涨,对于车载设备厂家来说设备成本上升也意味着利润的下降。车载设备本身就带nor-flash存储芯片,容量比fram大得多,所以利用现有的nor-flash替代fram也势在必行。nor-flash存储芯片是按页来读写数据操作,同时页擦除也是按页操作,页尺寸一般为4096字节,由于nor-flash介质的特性,bit位值只能从1改为0,不能0改为1,故页数据复位时必须调用页擦除使页中每个字节的每个bit位值变为1。假如按页为单位进行存储,只要页中一个bit位需要从0改为1就必须把整页内容复制到内存中,并擦除页后整页写入,而擦除一页大概需要10ms左右,且写入一页大概需要5ms左右,相当于修改一个bit位就需要耗时15ms,这样的速度无法在应用中使用,而且页寿命大概能够擦除10万次左右,所以这种方式的可行性更低。


技术实现要素:

4.针对现有技术存在的问题,本发明提供一种nor-flash模拟fram存储的方法及装置。
5.第一方面,本发明提供一种nor-flash模拟fram存储的方法,包括:
6.根据配置参数格式化模拟fram存储分区;
7.初始化模拟fram存储分区;
8.基于待存储数据的偏移量,确定对模拟fram存储分区的写操作。
9.可选的,所述根据配置参数格式化模拟fram存储分区,包括:
10.擦除所有按页分区的数据;
11.读取系统页和数据页的配置信息;
12.新建系统页,在所述系统页中以队列存储所有未使用的页号;
13.其中,所述系统页配置信息包括页头信息和所有未使用的页号;所述页头信息包括页头信息占用字节数,所述所有未使用的页号包含的页号个数和每个页号占用字节数,且每个页号的最高位为分配标志位;
14.所述数据页配置信息包括页头信息、单元号列表和单元数据列表,所述页头信息包括页头信息占用字节数,所述单元号列表和所述单元数据列表一一对应,所述单元号列表包括存储的单元的最大个数,每个单元的单元号占用字节数,且每个单元号的最高位为有效标志位,所述单元数据列表包括存储的单元的最大个数,每个单元的单元存储空间占用字节数。
15.可选的,所述初始化模拟fram存储分区,包括:
16.确定内存中是否存在已建立的页的索引;
17.若不存在,则基于系统页中包括的所有未使用的页号,在内存中建立页的索引;
18.确定内存中是否存在已建立的单元索引二元组;
19.若不存在,则基于数据页中单元号列表,建立单元索引二元组。
20.可选的,所述方法还包括:
21.若内存中存在已建立的页的索引,则确定所有数据页的页号是否在系统页的所有未使用的页号的队列中;
22.若存在,则将对应的页号从未使用的页号的队列中删除,重新建立页的索引。
23.可选的,所述方法还包括:
24.若内存中存在已建立的单元索引二元组,则确定当前数据页中所有单元号是否均包括在已建立的单元索引二元组中页内单元索引对应的单元号中;
25.若存在不包括的情况,则基于当前数据页的单元号,重新建立单元索引二元组。
26.可选的,所述基于待存储数据的偏移量,确定对模拟fram存储分区的写操作,包括:
27.确定待存储数据对应的目标单元号,并读取所述目标单元号对应的已存数据;
28.基于待存储数据和所述目标单元号对应的已存数据,判断是否存在比特位从0变为1的情况;
29.若不存在比特位从0变为1的情况,则用待存储数据更新所述目标单元号对应的已存的数据。
30.可选的,所述方法还包括:
31.若存在比特位从0变为1的情况,则在数据页中分配新的单元号和新的单元存储空间,用于存储所述待存储数据。
32.可选的,所述确定待存储数据对应的目标单元号,并读取所述目标单元号对应的已存数据,包括:
33.基于数据页配置信息中每个单元的单元存储空间占用字节数,确定对应的偏移量;
34.将所述待存储数据右移所述偏移量个位数,确定对应的单元号;
35.根据所述单元号和单元索引二元组,确定具体的页内单元的索引号,读取所述索引号对应的已存数据。
36.可选的,所述方法还包括:
37.更新所述目标单元号的标志位为无效;
38.更新所述单元索引二元组,使得所述单元索引二元组指示所述分配的新的单元号。
39.可选的,所述方法还包括:
40.若所述数据页中所有单元号的有效标志位被设置为无效,则再确定系统页的所有未使用页号的队列是否已存满;
41.若所述系统页的所有未使用页号的队列未存满,则将所述数据页的页号加入系统页的所有未使用页号的队列中。
42.可选的,所述方法还包括:
43.若所述系统页的所有未使用页号的队列已存满,则按照先进先出原则,基于系统页的所有未使用页号的队列,新建系统页,将所述数据页的页号加入新建的系统页的所有未使用页号的队列中。
44.第二方面,本发明还提供一种nor-flash模拟fram存储的电子设备,包括存储器,收发机,处理器;
45.存储器,用于存储计算机程序;收发机,用于在所述处理器的控制下收发数据;处理器,用于读取所述存储器中的计算机程序并实现如上所述第一方面所述nor-flash模拟fram存储的方法的步骤。
46.第三方面,本发明还提供一种nor-flash模拟fram存储的装置,所述装置包括:
47.配置模块,用于根据配置参数格式化nor-flash模拟fram存储分区;
48.初始化模块,用于初始化模拟fram存储分区;
49.确定模块,用于基于待存储数据的偏移量,确定对模拟fram存储分区的写操作。
50.第四方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上所述第一方面所述的nor-flash模拟fram存储的方法的步骤。
51.第五方面,本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上所述第一方面所述的nor-flash模拟fram存储的方法的步骤。
52.本发明提供的nor-flash模拟fram存储的方法及装置,通过使用nor-flash存储芯片替代fram存储器,并设计一种存储结构来映射偏移位置数据的读写,保证nor-flash对应的新的接口读写操作与fram读写操作相同,有效降低应用的开发成本,从而提高系统存储的利用率。
附图说明
53.为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
54.图1是本发明提供的nor-flash模拟fram存储的方法的流程示意图之一;
55.图2是本发明提供的nor-flash模拟fram存储的电子设备的结构示意图;
56.图3是本发明提供的nor-flash模拟fram存储的装置的结构示意图。
具体实施方式
57.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本
发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
58.下面结合图1-图3描述本发明的nor-flash模拟fram存储的方法及装置。
59.铁电存储技术早在1921年提出,直到1993年美国某个国际公司成功开发出第一个4k位的铁电存储器fram产品,所有的fram产品均由该公司制造或授权。fram有新的发展,采用了0.35um工艺,推出了3v产品,开发出“单管单容”存储单元的fram,最大密度可达256k位(即为32kb)。但是fram的制造成本高,价格比eeprom、flash更加昂贵,储存的空间更小。而且fram技术都被国外厂家所垄断,加上近几年的fram存储器价格上涨,对于车载设备厂家来说设备成本上升也意味着利润的下降。车载设备本身就带nor-flash存储芯片,容量比fram大得多,所以利用现有的nor-flash替代fram也势在必行。
60.由于nor-flash物理结构特点是按页擦除和bit位只能从1变0,所以需要设计一种存储算法来实现fram存储方式存储数据。假如按页为单位进行存储,只要页中一个bit位需要从0改为1就必须把整页内容复制到内存中,并擦除页后整页写入,而擦除一页大概需要10ms左右,且写入一页大概需要5ms左右,相当于修改一个bit位就需要耗时15ms,这样的速度无法在应用中使用,而且页寿命大概能够擦除10万次左右,所以这种方式就更加不可行了。
61.为解决现有技术中存在的上述问题,本发明通过使用nor-flash存储芯片替代fram存储器,并设计一种存储结构来映射偏移位置数据的读写,保证nor-flash对应的新的接口读写操作与fram读写操作相同,这样就可以降低应用的开发成本。
62.本发明为一种车载设备中替代铁电存储器的方法,通过不同的存储介质来替代fram存储器读写操作,降低车载设备的硬件成本,特别在当下中美贸易危机的情况下,使用fram更容易受到国外技术上限制并被卡脖子,导致硬件成本大幅度上涨。使用nor-flash可以共享原先设备中的存储芯片,并且还可以比原先使用fram存储器更大的容量,假设原先设备的fram容量为8kb,我们可以使用容量扩大为16kb甚至更大容量,从而提高系统存储的利用率。
63.图1是本发明提供的一种nor-flash模拟fram存储的方法的流程示意图。如图1所示,该方法包括:
64.步骤101、根据配置参数格式化模拟fram存储分区;
65.步骤102、初始化模拟fram存储分区;
66.步骤103、基于待存储数据的偏移量,确定对模拟fram存储分区的写操作。
67.具体的,nor-flash存储芯片是按页来读写数据操作,同时页擦除也是按页操作,页尺寸一般为4096字节,由于nor-flash介质的特性,bit位值只能从1改为0,不能0改为1,故页数据复位时必须调用页擦除使页中每个字节的每个bit位值变为1,另外本发明还设计一种数据结构来处理数据存储,否则无法区分哪个数据是有效数据。即将nor-flash的存储空间分为系统页和数据页,通过系统页和数据页的不同配置,对nor-flash的存储区域进行划分,模拟fram存储区域,系统页的配置信息可以包括哪些未使用的页面资源,并可根据需求生成对应的系统页或者数据页,数据页的配置可以包括每个存储数据单元的大小,可存储数据单元的个数的范围等。
68.根据上述配置参数对nor-flash的存储区域进行格式化,模拟fram存储分区。
69.可选的,本发明实施例中,所述根据配置参数格式化模拟fram存储分区,包括:
70.擦除所有按页分区的数据;
71.读取系统页和数据页的配置信息;
72.新建系统页,在所述系统页中以队列存储所有未使用的页号;
73.其中,所述系统页配置信息包括页头信息和所有未使用的页号;所述页头信息包括页头信息占用字节数,所述所有未使用的页号包含的页号个数和每个页号占用字节数,且每个页号的最高位为分配标志位;
74.所述数据页配置信息包括页头信息、单元号列表和单元数据列表,所述页头信息包括页头信息占用字节数,所述单元号列表和所述单元数据列表一一对应,所述单元号列表包括存储的单元的最大个数,每个单元的单元号占用字节数,且每个单元号的最高位为有效标志位,所述单元数据列表包括存储的单元的最大个数,每个单元的单元存储空间占用字节数。
75.具体的,将nor-flash的存储空间进行擦除,把所有按页分区的数据进行擦除,即擦除后nor-flash所有比特位的值为1,相当于之前的重置。
76.然后根据本发明将所有的页分为系统页和数据页,并提供的数据页和系统页的配置信息,完成模拟fram存储分区的格式化。可通过具体的程序来实现,使用nor-flash模拟fram来存放数据。而对于fram而言,应用读写fram数据是通过偏移量和尺寸来操作。比如容量为8kb的存储器,其存储偏移量区间为:[0,8191],假设偏移量为:offset,则数据读写的最大尺寸为:8192-offset。
[0077]
应用开发读取fram数据的c语言函数假定为:
[0078]
int fram_read(int fd,int offset,void*data,int size);
[0079]
参数:
[0080]
fd:fram或nor-flash设备句柄,表示数据实际存储在fram中还是存储在nor-flash中;
[0081]
offset:存储区的偏移量,指示数据存储的具体位置;
[0082]
data:读取数据的缓冲区指针,指示用于存放读取数据的内存位置;
[0083]
size:读取存储区数据的尺寸,指示读取的数据的大小;
[0084]
应用开发写入fram数据的c语言函数假定为:
[0085]
int fram_write(int fd,int offset,const void*data,int size);
[0086]
参数:
[0087]
fd:fram或nor-flash设备句柄,表示数据实际存储在fram中还是存储在nor-flash中;
[0088]
offset:存储区的偏移量,指示数据存储的具体位置;
[0089]
data:写入数据的缓冲区指针,指示待写入的存储数据的内存位置;
[0090]
size:写入存储区数据的尺寸,指示待写入的存储数据的大小。
[0091]
使用nor-flash存储芯片替代fram存储时只要重写fram_read和fram_write两个函数即可,应用代码无需更改就可以无缝切换过去,应用代码变更的开发成本为零。当然对于驱动层来说,需要配置原先fram容量,以及nor-flash从哪个页号开始的多少个页是用于
存放替代fram存储,一般而言页数至少配置为:原先fram容量/1024 2。
[0092]
由于nor-flash物理结构特点是按页擦除和bit位只能从1变0,所以需要设计一种存储算法来实现fram存储方式存储数据。假如按页为单位进行存储,只要页中一个bit位需要从0改为1就必须把整页内容复制到内存中,并擦除页后整页写入,而擦除一页大概需要10ms左右,且写入一页大概需要5ms左右,相当于修改一个bit位就需要耗时15ms,这样的速度无法在应用中使用,而且页寿命大概能够擦除10万次左右,所以这种方式就更加不可行了。
[0093]
通过读写频度及数据尺寸的概率统计分析后,把存储单元尺寸设为32字节是一个理想的尺寸。首先单元尺寸过小会增加单元号管理成本,并增加额外的存储开销,也不利于数据读取的速度;其次单元尺寸过大就是上面说的问题,即是会降低写入速度及页寿命。
[0094]
本发明可采用32字节或者其整数倍作为存储数据的单元大小。以下实施例以32字节为存储数据的单元大小为例进行说明。
[0095]
把nor-flash的页分为系统页和数据页,系统页用于记录未使用页号,包括页头信息和未使用页号队列。其中:
[0096]
页头信息:是用于区分系统页和数据页,占用16字节;
[0097]
未使用页号队列:包括所有未使用的页号信息,可以按照数组,队列等多种形式存储,每个页号占用2个字节,页号的取值范围是:[0,0x7ffe],且最高bit位为分配标志,1表示未分配、0表示已分配,每次需要分配页时从队列中取一未使用页号,并把该页号的最高bit位置0表示已分配。其中,每个页号均直接指向nor-flash页的具体存储单元的物理位置。对于nor-flash而言,其每个存储单元的物理位置相对固定,因此,每个页的页号是相对固定的。且不论通过索引或者其他的方式,最终,数据存取必须要指向确定的物理位置。
[0098]
数据页分为:页头信息、单元号列表和单元数据列表三部分,其中:
[0099]
页头信息:是用于区分系统页和数据页以及页流水号(自动增长),占用16字节;
[0100]
单元号列表:单元号取值范围:[0,0x7ffe],每个单元号占2个字节,且最高bit位为有效标志位,1表示有效、0表示无效。可以存放120个单元号,故占用240字节;
[0101]
单元数据列表:由于每个单元尺寸为32字节,且可以存放120个单元,故占用3840字节。
[0102]
三部分总占用4096字节,刚好是一页的尺寸。
[0103]
其中,页流水号根据存储数据的增加而自动增长。主要用于区分数据页建立的先后次序,页流水号大的数据页比页流水号小的数据页建立的时间更接近当前时刻,而从系统页中包括的未使用页号中取出,用于新建数据页的页号则无法区分数据页建立的先后次序。页流水号和系统页中包括的未使用的页号没有直接关系。
[0104]
读取完上述系统页和数据页的配置参数后,完成了模拟fram存储分区的格式化。需要在系统启动后加载模拟fram去除分区。
[0105]
可选的,本发明实施例中,所述初始化模拟fram存储分区,包括:
[0106]
确定内存中是否存在已建立的页的索引;
[0107]
若不存在,则基于系统页中包括的所有未使用的页号,在内存中建立页的索引;
[0108]
确定内存中是否存在已建立的单元索引二元组;
[0109]
若不存在,则基于数据页中单元号列表,建立单元索引二元组。
[0110]
具体的,一般系统启动加载的时间略长,需要检查相关的配置文件,以及生成不同页面和单元之间的对应关系等。若是刚进行过格式化模拟fram存储分区,则系统第一次启动的加载时间会稍微长一点,直接根据系统页的个数以及相关的配置,在内存中建立页的索引;该页的索引指示所有系统页建立的先后次序,未使用的页号先存储于最早建立的系统页中,可保证系统页存放未使用页号的先后次序,同时保证nor-flash页擦除次数的均衡,使得每个页的使用寿命最大化。因为是第一次启动,暂时还未存储数据的信息,因此只需要读取数据页的配置信息。而在后续存储了数据在数据页之后,初始化的过程,即启动加载的过程会更复杂,首先读取系统页,确定内存中是否存在已建立的页的索引,如果没有,则根据系统页中包括的所有未使用的页号,建立页的索引,以便于通过页的索引查找未使用页的相关信息。同时,也会读取数据页内存储的单元号列表,判断内存中是否存在已建立的单元索引二元组,如果没有,则根据数据页内存储的单元号列表,构建单元索引二元组。例如,数据页当前的页号,以及每个数据存储的单元号建立单元索引二元组(页号,页内单元索引)。且单元索引二元组中的页号是系统页中包括的所有未使用页号中的一个,该页号指向nor-flash中具体的存储单元物理位置,因为每个存储单元的物理位置相对固定,所以指向该位置的页号也是相对固定的。
[0111]
假如fram尺寸为8kb,则划分为256个存储单元,每个单元32字节。为了能够快速定位存储单元所在页号及位置则需要在内存中建立索引,索引为由二元组(页号,页内单元索引)构成,由于页号占2个字节、页内单元索引取值范围:[0,119]占1个字节。因此索引总占用内存尺寸为:3x 256=768字节。
[0112]
可选的,本发明实施例中,所述方法还包括:
[0113]
若内存中存在已建立的页的索引,则确定所有数据页的页号是否在系统页的所有未使用的页号的队列中;
[0114]
若存在,则将对应的页号从未使用的页号的队列中删除,重新建立页的索引。
[0115]
具体的,首先读取系统页,确定内存中是否存在已建立的页的索引,如果内存中已存在建立的页的索引,需要判断页的索引中的页号是否为最新的记录,即可能数据页对某个或者某些数据执行了写入操作,对应的页号发生了改变,即新增了数据页,而还未同步更新至系统页时,系统发生了掉电的情况,这样,造成数据页和系统页的数据不同步的情况,在系统启动的过程中需要检查对应的参数,如果存在最新的数据页信息未同步至系统页时,需要将该数据页的页号在系统页的未使用页号队列中删除,这里的删除可理解为将该页号的分配标志设置为已分配。然后根据更新后的未使用页号队列,重建页的索引,从而使得数据页和系统页信息同步。
[0116]
可选的,本发明实施例中,所述方法还包括:
[0117]
若内存中存在已建立的单元索引二元组,则确定当前数据页中所有单元号是否均包括在已建立的单元索引二元组中页内单元索引对应的单元号中;
[0118]
若存在不包括的情况,则基于当前数据页的单元号,重新建立单元索引二元组。
[0119]
具体的,在读取数据页内存储的单元号列表,判断内存中是否存在已建立的单元索引二元组,即写入数据时,在数据页中已经新增了对应的数据单元,突然发生掉电等异常情况,对应的数据还未同步至内存的单元索引二元组,造成两者的信息不同步,严重的可能造成数据信息发送错乱。因此,在系统启动时,会检查当前数据页中的所有单元号是否包括
在已建立的单元索引二元组中页内单元索引对应的单元号中。如果存在不包括的情况,则可能存在数据丢失的情况,根据当前数据页的单元号,重建单元索引二元组。
[0120]
通过以上步骤,完成了模拟fram存储分区的格式化和系统启动过程的加载,检查等操作,可以对数据进行读取或者写入的操作,其中写入的操作包括读取的操作,因为写入过程需要判断写入的数据和已存的数据的比特位是否存在从0变为1的情况。
[0121]
可选的,本发明实施例中,所述基于待存储数据的偏移量,确定对模拟fram存储分区的写操作,包括:
[0122]
确定待存储数据对应的目标单元号,并读取所述目标单元号对应的已存数据;
[0123]
基于待存储数据和所述目标单元号对应的已存数据,判断是否存在比特位从0变为1的情况;
[0124]
若不存在比特位从0变为1的情况,则用待存储数据更新所述目标单元号对应的已存数据。
[0125]
具体的,获取待存储的数据,根据读写fram数据是通过偏移量和尺寸进行操作的特点,根据待存储数据,确定其对应的偏移量,进而确定其存储的目标单元号,读取该单元号中的已存的数据,并判断待存储数据和已存数据是否存在比特位从0变为1的情况,如果不存在,可以直接写入对应的数据,即用待存储数据更新该目标单元号内已存的数据。
[0126]
可选的,本发明实施例中,若存在比特位从0变为1的情况,则在数据页中分配新的单元号和新的单元存储空间,用于存储所述待存储数据。
[0127]
即待存储数据和已存数据存在比特位从0变为1的情况,按照nor-flash的存储特性,不能直接写入对应的数据,而需要先擦除整页的数据,再写入对应的数据,耗时长,而且效率低。因此,本发明中通过为待存储的数据,新分配一个单元号,以及该单元号对应的存储空间,用于存储该带存储的数据。
[0128]
在此需要说明的是,如果当前数据页的存储空间足够,则在数据页中分配一个单元号给该待存储数据,若果当前数据页的存储空间已满或者空间不够,则需要新建一个数据页,并在新建的数据页中为该待存储数据分配一个单元号以及对应的单元存储空间,用于存储该待存储数据。而且如果待存储数据比较大,可能需要多个单元的存储空间时,则按照一个个新增单元号以及对应的存储空间的方式,确保待存储的数据被正常保存。
[0129]
可选的,本发明实施例中,所述确定待存储数据对应的目标单元号,并读取所述目标单元号对应的已存数据,包括:
[0130]
基于数据页配置信息中每个单元的单元存储空间占用字节数,确定对应的偏移量;
[0131]
将所述待存储数据右移所述偏移量个的位数,确定对应的单元号;
[0132]
根据所述单元号和单元索引二元组,确定具体的页内单元的索引号,读取所述索引号对应的已存数据。
[0133]
具体的,根据数据页配置信息中每个单元的单元存储空间占用字节数,确定对应的偏移量;例如,每个单元的单元存储空间占用32字节,则对应的偏移量为5位。将待存储数据右移5位,或者将待存储数据除以32,则可以确定对应的单元号,然后根据单元号和内存中的单元索引二元组,确定具体的业内单元的索引号,读取该索引号对应的已存数据,即完成了读取模拟fram存储分区数据的操作。
[0134]
可选的,本发明实施例中,所述方法还包括:
[0135]
更新所述目标单元号的标志位为无效;
[0136]
更新所述单元索引二元组,使得所述单元索引二元组指示所述分配的新的单元号。
[0137]
可选的,写入待存储的数据之后,需要将数据页中目标单元的单元号的标志位设置为无效,即该单元号存储的数据无效。同时需要更新单元索引二元组,使得单元索引二元组不再指示该目标单元的单元号,而是指示新分配的单元号。即使得单元索引二元组的页号和页内单元索引指示新分配的单元号。
[0138]
可选的,所述方法还包括:
[0139]
若所述数据页中所有单元号的有效标志位被设置为无效,则再确定系统页的所有未使用页号的队列是否已存满;
[0140]
若所述系统页的所有未使用页号的队列未存满,则将所述数据页的页号加入系统页的所有未使用页号的队列中。
[0141]
具体的,在数据页中所有单元号的有效标志位被设置为无效时,即数据页的资源可以重新回收利用,因为该数据页的所有数据已为无效数据,则需要将该数据页系统更新至系统页中,而在更新至系统页之前,需要进一步判断系统页的所有未使用页号的队列是否已存满;如果系统页中未使用页号队列存储未满,比如系统页中最多可存储7fff个页号,且系统页中页号取值范围:[0,0x7ffe],当前最新的页号是0至0x7ffd之间的任意值,则新增一个页号,保存该回收的数据页。
[0142]
如果系统页中未使用页号队列存储已满,比如系统页中最多可存储7fff个页号,且系统页中页号取值范围:[0,0x7ffe],当前最新的页号是0x7ffe,则需要新增一个系统页来存储该回收的数据页。在系统页的未使用页号队列中取出最先存入的页号,新建一个该页号的系统页,存储上述回收的数据页。
[0143]
本发明提供的nor-flash模拟fram存储的方法,通过使用nor-flash存储芯片替代fram存储器,并设计一种存储结构来映射偏移位置数据的读写,保证nor-flash对应的新的接口读写操作与fram读写操作相同,有效降低应用的开发成本,从而提高系统存储的利用率。
[0144]
本发明主要基于nor-flash存储芯片替代fram存储芯片,而且利用车载设备中原有的nor-flash,无需额外增加硬件成本,而去除fram存储芯片后硬件成本可以下降,从而实现车载设备硬件成本降低而带来的价格竞争力。通过nor-flash存储芯片可以根据业务需要而灵活扩展容量,并不增加软件应用的开发成本。
[0145]
图2本发明提供的nor-flash模拟fram存储的电子设备的结构示意图;如图2所示,该电子设备包括存储器220,收发机210和处理器200;其中,处理器200与存储器220也可以物理上分开布置。
[0146]
存储器220,用于存储计算机程序;收发机210,用于在处理器200的控制下收发数据。
[0147]
具体地,收发机210用于在处理器200的控制下接收和发送数据。
[0148]
其中,在图2中,总线架构可以包括任意数量的互联的总线和桥,具体由处理器200代表的一个或多个处理器和存储器220代表的存储器的各种电路链接在一起。总线架构还
可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本发明不再对其进行进一步描述。总线接口提供接口。收发机210可以是多个元件,即包括发送机和接收机,提供用于在传输介质上与各种其他装置通信的单元,这些传输介质包括无线信道、有线信道、光缆等传输介质。
[0149]
处理器200负责管理总线架构和通常的处理,存储器220可以存储处理器200在执行操作时所使用的数据。
[0150]
处理器200可以是cpu、asic、fpga或cpld,处理器也可以采用多核架构。
[0151]
处理器200通过调用存储器220存储的计算机程序,用于按照获得的可执行指令执行本发明实施例提供的任一所述方法,例如:
[0152]
根据配置参数格式化模拟fram存储分区;
[0153]
初始化模拟fram存储分区;
[0154]
基于待存储数据的偏移量,确定对模拟fram存储分区的写操作。
[0155]
可选的,所述根据配置参数格式化模拟fram存储分区,包括:
[0156]
擦除所有按页分区的数据;
[0157]
读取系统页和数据页的配置信息;
[0158]
新建系统页,在所述系统页中以队列存储所有未使用的页号;
[0159]
其中,所述系统页配置信息包括页头信息和所有未使用的页号;所述页头信息包括页头信息占用字节数,所述所有未使用的页号包含的页号个数和每个页号占用字节数,且每个页号的最高位为分配标志位;
[0160]
所述数据页配置信息包括页头信息、单元号列表和单元数据列表,所述页头信息包括页头信息占用字节数,所述单元号列表和所述单元数据列表一一对应,所述单元号列表包括存储的单元的最大个数,每个单元的单元号占用字节数,且每个单元号的最高位为有效标志位,所述单元数据列表包括存储的单元的最大个数,每个单元的单元存储空间占用字节数。
[0161]
可选的,所述初始化模拟fram存储分区,包括:
[0162]
确定内存中是否存在已建立的页的索引;
[0163]
若不存在,则基于系统页中包括的所有未使用的页号,在内存中建立页的索引;
[0164]
确定内存中是否存在已建立的单元索引二元组;
[0165]
若不存在,则基于数据页中单元号列表,建立单元索引二元组。
[0166]
可选的,所述步骤还包括:
[0167]
若内存中存在已建立的页的索引,则确定所有数据页的页号是否在系统页的所有未使用的页号的队列中;
[0168]
若存在,则将对应的页号从未使用的页号的队列中删除,重新建立页的索引。
[0169]
可选的,所述步骤还包括:
[0170]
若内存中存在已建立的单元索引二元组,则确定当前数据页中所有单元号是否均包括在已建立的单元索引二元组中页内单元索引对应的单元号中;
[0171]
若存在不包括的情况,则基于当前数据页的单元号,重新建立单元索引二元组。
[0172]
可选的,所述基于待存储数据的偏移量,确定对模拟fram存储分区的写操作,包括:
[0173]
确定待存储数据对应的目标单元号,并读取所述目标单元号对应的已存数据;
[0174]
基于待存储数据和所述目标单元号对应的已存数据,判断是否存在比特位从0变为1的情况;
[0175]
若不存在比特位从0变为1的情况,则用待存储数据更新所述目标单元号对应的已存的数据。
[0176]
可选的,所述步骤还包括:
[0177]
若存在比特位从0变为1的情况,则在数据页中分配新的单元号和新的单元存储空间,用于存储所述待存储数据。
[0178]
可选的,所述确定待存储数据对应的目标单元号,并读取所述目标单元号对应的已存数据,包括:
[0179]
基于数据页配置信息中每个单元的单元存储空间占用字节数,确定对应的偏移量;
[0180]
将所述待存储数据右移所述偏移量个位数,确定对应的单元号;
[0181]
根据所述单元号和单元索引二元组,确定具体的页内单元的索引号,读取所述索引号对应的已存数据。
[0182]
可选的,所述步骤还包括:
[0183]
更新所述目标单元号的标志位为无效;
[0184]
更新所述单元索引二元组,使得所述单元索引二元组指示所述分配的新的单元号。
[0185]
可选的,所述步骤还包括:
[0186]
若所述数据页中所有单元号的有效标志位被设置为无效,则再确定系统页的所有未使用页号的队列是否已存满;
[0187]
若所述系统页的所有未使用页号的队列未存满,则将所述数据页的页号加入系统页的所有未使用页号的队列中。
[0188]
可选的,所述步骤还包括:
[0189]
若所述系统页的所有未使用页号的队列已存满,则按照先进先出原则,基于系统页的所有未使用页号的队列,新建系统页,将所述数据页的页号加入新建的系统页的所有未使用页号的队列中。
[0190]
在此需要说明的是,本发明实施例提供的上述nor-flash模拟fram存储的电子设备,能够实现上述方法实施例所实现的所有方法步骤,且能够达到相同的技术效果,在此不再对本实施例中与方法实施例相同的部分及有益效果进行具体赘述。
[0191]
图3是本发明提供的nor-flash模拟fram存储的装置的结构示意图;如图3所示,所述装置包括:
[0192]
配置模块301,用于根据配置参数格式化nor-flash模拟fram存储分区;
[0193]
初始化模块302,用于初始化模拟fram存储分区;
[0194]
确定模块303,用于基于待存储数据的偏移量,确定对模拟fram存储分区的写操作。
[0195]
可选的,配置模块301还用于:
[0196]
擦除所有按页分区的数据;
[0197]
读取系统页和数据页的配置信息;
[0198]
新建系统页,在所述系统页中以队列存储所有未使用的页号;
[0199]
其中,所述系统页配置信息包括页头信息和所有未使用的页号;所述页头信息包括页头信息占用字节数,所述所有未使用的页号包含的页号个数和每个页号占用字节数,且每个页号的最高位为分配标志位;
[0200]
所述数据页配置信息包括页头信息、单元号列表和单元数据列表,所述页头信息包括页头信息占用字节数,所述单元号列表和所述单元数据列表一一对应,所述单元号列表包括存储的单元的最大个数,每个单元的单元号占用字节数,且每个单元号的最高位为有效标志位,所述单元数据列表包括存储的单元的最大个数,每个单元的单元存储空间占用字节数。
[0201]
可选的,初始化模块302,还用于确定内存中是否存在已建立的页的索引;
[0202]
若不存在,则基于系统页中包括的所有未使用的页号,在内存中建立页的索引;
[0203]
确定内存中是否存在已建立的单元索引二元组;
[0204]
若不存在,则基于数据页中单元号列表,建立单元索引二元组。
[0205]
可选的,初始化模块302,还用于:
[0206]
若内存中存在已建立的页的索引,则确定所有数据页的页号是否在系统页的所有未使用的页号的队列中;
[0207]
若存在,则将对应的页号从未使用的页号的队列中删除,重新建立页的索引。
[0208]
可选的,初始化模块302,还用于:
[0209]
若内存中存在已建立的单元索引二元组,则确定当前数据页中所有单元号是否均包括在已建立的单元索引二元组中页内单元索引对应的单元号中;
[0210]
若存在不包括的情况,则基于当前数据页的单元号,重新建立单元索引二元组。
[0211]
可选的,确定模块303,还用于:
[0212]
确定待存储数据对应的目标单元号,并读取所述目标单元号对应的已存数据;
[0213]
基于待存储数据和所述目标单元号对应的已存数据,判断是否存在比特位从0变为1的情况;
[0214]
若不存在比特位从0变为1的情况,则用待存储数据更新所述目标单元号对应的已存数据。
[0215]
可选的,确定模块303,还用于:
[0216]
若存在比特位从0变为1的情况,则在数据页中分配新的单元号和新的单元存储空间,用于存储所述待存储数据。
[0217]
可选的,确定模块303,还用于:
[0218]
基于数据页配置信息中每个单元的单元存储空间占用字节数,确定对应的偏移量;
[0219]
将所述待存储数据右移所述偏移量个的位数,确定对应的单元号;
[0220]
根据所述单元号和单元索引二元组,确定具体的页内单元的索引号,读取所述索引号对应的已存数据。
[0221]
可选的,确定模块303,还用于:
[0222]
更新所述目标单元号的标志位为无效;
[0223]
更新所述单元索引二元组,使得所述单元索引二元组指示所述分配的新的单元号。
[0224]
可选的,确定模块303,还用于:
[0225]
若所述数据页中所有单元号的有效标志位被设置为无效,则再确定系统页的所有未使用页号的队列是否已存满;
[0226]
若所述系统页的所有未使用页号的队列未存满,则将所述数据页的页号加入系统页的所有未使用页号的队列中。
[0227]
可选的,确定模块303,还用于:
[0228]
若所述系统页的所有未使用页号的队列已存满,则按照先进先出原则,基于系统页的所有未使用页号的队列,新建系统页,将所述数据页的页号加入新建的系统页的所有未使用页号的队列中。
[0229]
需要说明的是,本发明实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0230]
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0231]
在此需要说明的是,本发明实施例提供的上述装置,能够实现上述方法实施例所实现的所有方法步骤,且能够达到相同的技术效果,在此不再对本实施例中与方法实施例相同的部分及有益效果进行具体赘述。
[0232]
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的nor-flash模拟fram存储的方法的步骤,例如包括:
[0233]
根据配置参数格式化模拟fram存储分区;
[0234]
初始化模拟fram存储分区;
[0235]
基于待存储数据的偏移量,确定对模拟fram存储分区的写操作。
[0236]
可选的,所述根据配置参数格式化模拟fram存储分区,包括:
[0237]
擦除所有按页分区的数据;
[0238]
读取系统页和数据页的配置信息;
[0239]
新建系统页,在所述系统页中以队列存储所有未使用的页号;
[0240]
其中,所述系统页配置信息包括页头信息和所有未使用的页号;所述页头信息包
括页头信息占用字节数,所述所有未使用的页号包含的页号个数和每个页号占用字节数,且每个页号的最高位为分配标志位;
[0241]
所述数据页配置信息包括页头信息、单元号列表和单元数据列表,所述页头信息包括页头信息占用字节数,所述单元号列表和所述单元数据列表一一对应,所述单元号列表包括存储的单元的最大个数,每个单元的单元号占用字节数,且每个单元号的最高位为有效标志位,所述单元数据列表包括存储的单元的最大个数,每个单元的单元存储空间占用字节数。
[0242]
可选的,所述初始化模拟fram存储分区,包括:
[0243]
确定内存中是否存在已建立的页的索引;
[0244]
若不存在,则基于系统页中包括的所有未使用的页号,在内存中建立页的索引;
[0245]
确定内存中是否存在已建立的单元索引二元组;
[0246]
若不存在,则基于数据页中单元号列表,建立单元索引二元组。
[0247]
可选的,所述步骤还包括:
[0248]
若内存中存在已建立的页的索引,则确定所有数据页的页号是否在系统页的所有未使用的页号的队列中;
[0249]
若存在,则将对应的页号从未使用的页号的队列中删除,重新建立页的索引。
[0250]
可选的,所述步骤还包括:
[0251]
若内存中存在已建立的单元索引二元组,则确定当前数据页中所有单元号是否均包括在已建立的单元索引二元组中页内单元索引对应的单元号中;
[0252]
若存在不包括的情况,则基于当前数据页的单元号,重新建立单元索引二元组。
[0253]
可选的,所述基于待存储数据的偏移量,确定对模拟fram存储分区的写操作,包括:
[0254]
确定待存储数据对应的目标单元号,并读取所述目标单元号对应的已存数据;
[0255]
基于待存储数据和所述目标单元号对应的已存数据,判断是否存在比特位从0变为1的情况;
[0256]
若不存在比特位从0变为1的情况,则用待存储数据更新所述目标单元号对应的已存的数据。
[0257]
可选的,所述步骤还包括:
[0258]
若存在比特位从0变为1的情况,则在数据页中分配新的单元号和新的单元存储空间,用于存储所述待存储数据。
[0259]
可选的,所述确定待存储数据对应的目标单元号,并读取所述目标单元号对应的已存数据,包括:
[0260]
基于数据页配置信息中每个单元的单元存储空间占用字节数,确定对应的偏移量;
[0261]
将所述待存储数据右移所述偏移量个位数,确定对应的单元号;
[0262]
根据所述单元号和单元索引二元组,确定具体的页内单元的索引号,读取所述索引号对应的已存数据。
[0263]
可选的,所述步骤还包括:
[0264]
更新所述目标单元号的标志位为无效;
[0265]
更新所述单元索引二元组,使得所述单元索引二元组指示所述分配的新的单元号。
[0266]
可选的,所述步骤还包括:
[0267]
若所述数据页中所有单元号的有效标志位被设置为无效,则再确定系统页的所有未使用页号的队列是否已存满;
[0268]
若所述系统页的所有未使用页号的队列未存满,则将所述数据页的页号加入系统页的所有未使用页号的队列中。
[0269]
可选的,所述步骤还包括:
[0270]
若所述系统页的所有未使用页号的队列已存满,则按照先进先出原则,基于系统页的所有未使用页号的队列,新建系统页,将所述数据页的页号加入新建的系统页的所有未使用页号的队列中。
[0271]
另一方面,本发明实施例还提供一种处理器可读存储介质,所述处理器可读存储介质存储有计算机程序,所述计算机程序用于使所述处理器执行上述各实施例提供的nor-flash模拟fram存储的方法,例如包括:
[0272]
根据配置参数格式化模拟fram存储分区;
[0273]
初始化模拟fram存储分区;
[0274]
基于待存储数据的偏移量,确定对模拟fram存储分区的写操作。
[0275]
可选的,所述根据配置参数格式化模拟fram存储分区,包括:
[0276]
擦除所有按页分区的数据;
[0277]
读取系统页和数据页的配置信息;
[0278]
新建系统页,在所述系统页中以队列存储所有未使用的页号;
[0279]
其中,所述系统页配置信息包括页头信息和所有未使用的页号;所述页头信息包括页头信息占用字节数,所述所有未使用的页号包含的页号个数和每个页号占用字节数,且每个页号的最高位为分配标志位;
[0280]
所述数据页配置信息包括页头信息、单元号列表和单元数据列表,所述页头信息包括页头信息占用字节数,所述单元号列表和所述单元数据列表一一对应,所述单元号列表包括存储的单元的最大个数,每个单元的单元号占用字节数,且每个单元号的最高位为有效标志位,所述单元数据列表包括存储的单元的最大个数,每个单元的单元存储空间占用字节数。
[0281]
可选的,所述初始化模拟fram存储分区,包括:
[0282]
确定内存中是否存在已建立的页的索引;
[0283]
若不存在,则基于系统页中包括的所有未使用的页号,在内存中建立页的索引;
[0284]
确定内存中是否存在已建立的单元索引二元组;
[0285]
若不存在,则基于数据页中单元号列表,建立单元索引二元组。
[0286]
可选的,所述步骤还包括:
[0287]
若内存中存在已建立的页的索引,则确定所有数据页的页号是否在系统页的所有未使用的页号的队列中;
[0288]
若存在,则将对应的页号从未使用的页号的队列中删除,重新建立页的索引。
[0289]
可选的,所述步骤还包括:
[0290]
若内存中存在已建立的单元索引二元组,则确定当前数据页中所有单元号是否均包括在已建立的单元索引二元组中页内单元索引对应的单元号中;
[0291]
若存在不包括的情况,则基于当前数据页的单元号,重新建立单元索引二元组。
[0292]
可选的,所述基于待存储数据的偏移量,确定对模拟fram存储分区的写操作,包括:
[0293]
确定待存储数据对应的目标单元号,并读取所述目标单元号对应的已存数据;
[0294]
基于待存储数据和所述目标单元号对应的已存数据,判断是否存在比特位从0变为1的情况;
[0295]
若不存在比特位从0变为1的情况,则用待存储数据更新所述目标单元号对应的已存的数据。
[0296]
可选的,所述步骤还包括:
[0297]
若存在比特位从0变为1的情况,则在数据页中分配新的单元号和新的单元存储空间,用于存储所述待存储数据。
[0298]
可选的,所述确定待存储数据对应的目标单元号,并读取所述目标单元号对应的已存数据,包括:
[0299]
基于数据页配置信息中每个单元的单元存储空间占用字节数,确定对应的偏移量;
[0300]
将所述待存储数据右移所述偏移量个位数,确定对应的单元号;
[0301]
根据所述单元号和单元索引二元组,确定具体的页内单元的索引号,读取所述索引号对应的已存数据。
[0302]
可选的,所述步骤还包括:
[0303]
更新所述目标单元号的标志位为无效;
[0304]
更新所述单元索引二元组,使得所述单元索引二元组指示所述分配的新的单元号。
[0305]
可选的,所述步骤还包括:
[0306]
若所述数据页中所有单元号的有效标志位被设置为无效,则再确定系统页的所有未使用页号的队列是否已存满;
[0307]
若所述系统页的所有未使用页号的队列未存满,则将所述数据页的页号加入系统页的所有未使用页号的队列中。
[0308]
可选的,所述步骤还包括:
[0309]
若所述系统页的所有未使用页号的队列已存满,则按照先进先出原则,基于系统页的所有未使用页号的队列,新建系统页,将所述数据页的页号加入新建的系统页的所有未使用页号的队列中。
[0310]
所述处理器可读存储介质可以是处理器能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(mo)等)、光学存储器(例如cd、dvd、bd、hvd等)、以及半导体存储器(例如rom、eprom、eeprom、非易失性存储器(nand flash)、固态硬盘(ssd))等。
[0311]
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单
元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0312]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0313]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献