一种数据存储方法与流程

未命名 07-15 阅读:103 评论:0


1.本发明涉及数据处理技术领域,尤其涉及一种数据存储方法。


背景技术:

2.随着智能设备越来越广泛的应用,嵌入式软硬件设备的使用场景也越来越多。在嵌入式领域中,经常有掉电后需要保存的信息,以备在下次启动时重新使用之前保存的信息,如汽车音响和汽车空调关机后需要记忆一些功能状态。eeprom就是一种可以在掉电后存储信息的电子器件。
3.目前,一般的eeprom擦写次数大约为100万次,成本较低的为10万次,然而,目前车载设备的eeprom的数据存储地址是固定的,这就导致eeprom某些地方经常被擦写,有些地方几乎没有擦写,久而久之导致采用低成本eeprom的数据容易出现错误,而且由于车载环境比较复杂,电磁干扰较大甚至突然掉电,导致eeprom的i2c总线异常,进而导致eeprom在写入数据时发生错误。
4.因此,亟需对目前eeprom的数据写入方法进行改进,以提高eeprom的使用寿命及数据写入时的准确性。


技术实现要素:

5.本发明提供一种数据存储方法,旨在解决现有技术中的缺陷,实现eeprom使用寿命的大幅增长及提高数据写入的准确性。
6.为达到上述目的,本发明所采取的技术方案为:
7.一种数据存储方法,包括:
8.步骤1、系统初始化,将eeprom的每个存储块的状态单元的内容置0;
9.步骤2、根据所述每个存储块的状态单元的内容确定当前存储块;
10.步骤3、根据所述当前存储块确定目标存储块;
11.步骤4、在所述目标存储块中写入目标存储数据。
12.具体地,所述步骤2包括:
13.步骤201、读取当前状态单元的内容,并与相邻状态单元的内容进行比较,若两者不一致,则将所述当前状态单元对应的存储块判定为当前存储块,否则进入下一步;
14.步骤202、判断所述当前状态单元是否为最后一个状态单元,是则将最后一个存储块判定为当前存储块,否则返回上一步。
15.具体地,所述步骤3包括:判断所述当前存储块的剩余空间是否大于目标存储数据的长度,是则将断所述当前存储块确定为目标存储块,否则将所述当前存储块的相邻存储块确定为目标存储块。
16.具体地,所述步骤4包括:
17.步骤401、若所述目标存储块为所述当前存储块,则在所述当前存储块内定位到数据保存地址后写入所述目标存储数据,并擦除所述当前存储块中的历史数据;
18.步骤402、若所述目标存储块为所述当前存储块的相邻存储块,则从所述目标存储块的数据单元的起始地址开始写入所述目标存储数据,并将所述当前存储块、目标存储块的状态单元的内容按照预设规则进行改写。
19.具体地,所述预设规则为取反操作。
20.具体地,所述在所述当前存储块内定位到数据保存地址后写入所述目标存储数据包括:
21.步骤4011、定义并初始化搜索地址变量、查找次数变量;
22.步骤4012、判断当前搜索地址处的内容与数据存储起始标识是否相同,是则进入步骤4015,否则进入下一步;
23.步骤4013、将所述搜索地址变量、查找次数变量均按照预设步长递增,并判断所述搜索地址变量是否等于当前页的最大地址,是则将所述搜索地址变量指向下一页;
24.步骤4014、判断所述查找次数变量是否等于所述当前存储块的最大地址,是则返回查找失败的信息,否则返回步骤4012。
25.步骤4015、将目标存储数据从缓冲区读入,并将所述查找次数变量加递增所述目标存储数据的长度;
26.步骤4016、读取目标地址处的内容,并判断其与数据存储结束标识是否相同,是则将所述目标地址处保存到所述搜索地址变量,并进入步骤4017,否则返回步骤4013,所述目标地址为所述当前搜索地址加上所述目标存储数据的长度后的下一个地址;
27.步骤4017、从所述目标地址的下一个地址处开始写入所述目标存储数据。
28.具体地,所述预设步长为1。
29.具体地,所述写入所述目标存储数据包括:通过i2c总线写入所述目标存储数据。
30.具体地,所述通过i2c总线写入所述目标存储数据包括:
31.步骤a1、在写入所述目标存储数据期间,监测所述i2c总线是否异常,是则进入下一步,否则循环执行本步骤;
32.步骤a2、i2c主设备将sda、scl端口配置为i/o模式;
33.步骤a3、所述i2c主设备向eeprom发送i2c协议的起始信号;
34.步骤a4、所述i2c主设备向eeprom发送预设数量的i2c时钟信号;
35.步骤a5、所述i2c主设备向eeprom发送i2c协议的起始信号和停止信号;
36.步骤a6、所述i2c主设备将sda、scl端口重新配置为i2c模式。
37.具体地,所述预设数量为1+8k(k≥1)。
38.本发明的有益效果在于:本发明通过将eeprom分为若干个存储块,并将每个存储块分为用于保存存储块的状态参数的状态单元和用于保存数据内容的数据单元,再根据每个存储块的状态单元的内容确定当前存储块,根据当前存储块确定目标存储块,然后在目标存储块中写入目标存储数据,实现了eeprom使用寿命的大幅增长及提高了数据写入的准确性。
附图说明
39.图1是本发明的数据存储方法的流程示意图;
40.图2是本发明的数据打包格式示意图。
具体实施方式
41.下面结合附图具体阐明本发明的实施方式,附图仅供参考和说明使用,不构成对本发明专利保护范围的限制。
42.在本发明的说明书、权利要求书或附图中描述的流程中,包含各个步骤的序号(如步骤10、20等),所述序号仅用于区分开各个步骤,所述序号本身不代表任何的执行顺序。需要说明的是,本文中的“第一”、“第二”等描述,仅用于区分描述对象等,不代表先后顺序,也不表示“第一”、“第二”等是不同的类型。
43.如图1所示,本实施例提供一种数据存储方法,包括:
44.步骤1、系统初始化,将eeprom的每个存储块的状态单元的内容置0。
45.在具体实施时,将eeprom分为若干个存储块,并将每个存储块分为状态单元和数据单元,所述状态单元从所述每个存储块的起始地址开始,用于保存存储块的状态参数,所述数据单元用于保存数据内容。
46.例如,若eeprom的容量为512k字节,地址范围为00000h~7ffffh,每页128字节,则共有4096页,将其分为16个存储块,则每个存储块为256页,每个存储块为32kb,其中第0页保存相应存储块的状态参数,第1-255页用于保存数据内容。
47.所述系统初始化为eeprom首次上电运行、未写入数据的状态。
48.步骤2、根据所述每个存储块的状态单元的内容确定当前存储块。
49.在本实施例中,所述步骤2包括:
50.步骤201、读取当前状态单元m(m=0,1,2

n-1,n表示存储块的数量)的内容,并与相邻状态单元m+1的内容进行比较,若两者不一致,则将所述当前状态单元m对应的存储块判定为当前存储块,否则进入下一步;
51.步骤202、判断所述当前状态单元m是否为最后一个状态单元,是则将最后一个存储块判定为当前存储块,否则返回上一步。
52.在本实施例中,所述当前存储块为已保存有历史数据的存储块。
53.在具体实施时,可采取顺序读取的方式从第1个状态单元(即m=0)开始读取,将其内容与第2个状态单元(即m=1)的内容进行比较,如果两者一致,则将第2个状态单元(即m=1)的内容与第3个状态单元(即m=2)的内容进行比较,如果两者一致,则以此类推。
54.如果所有存储块的状态单元的内容都相同,则说明eeprom中没有存储数据,则可将此时的当前存储块设为最后一个存储块,而最后一个存储块的相邻存储块则为首个存储块。
55.步骤3、根据所述当前存储块确定目标存储块。
56.在本实施例中,所述步骤3包括:判断所述当前存储块的剩余空间是否大于目标存储数据的长度,是则将断所述当前存储块确定为目标存储块,否则将所述当前存储块的相邻存储块m+1确定为目标存储块。
57.在本实施例中,所述目标存储块为即将写入新的数据内容的存储块。
58.步骤4、在所述目标存储块中写入目标存储数据。
59.在本实施例中,所述步骤4包括:
60.步骤401、若所述目标存储块为所述当前存储块,则在所述当前存储块内定位到数据保存地址后写入所述目标存储数据,并擦除所述当前存储块中的历史数据;
61.步骤402、若所述目标存储块为所述当前存储块的相邻存储块,则从所述目标存储块的数据单元的起始地址开始写入所述目标存储数据,并将所述当前存储块、目标存储块的状态单元的内容按照预设规则进行改写。
62.在本实施例中,步骤402中的所述预设规则为取反操作。
63.在本实施例中,目标存储数据均按照图2所示的格式进行打包,其中,s1为数据存储起始标识,s2为数据存储结束标识,用于标识数据内容(即d(1)、d(2)

d(n))存放地址的起始与结束。s1、s2采用与所保存的数据都不同的数值。
64.在本实施例中,步骤401中所述在所述当前存储块内定位到数据保存地址后写入所述目标存储数据包括:
65.步骤4011、定义并初始化搜索地址变量p、查找次数变量q;
66.步骤4012、判断当前搜索地址处的内容与数据存储起始标识s1是否相同,是则进入步骤4015,否则进入下一步;
67.步骤4013、将所述搜索地址变量p、查找次数变量q均按照预设步长递增,并判断所述搜索地址变量q是否等于当前页的最大地址,是则将所述搜索地址变量p指向下一页;
68.在本实施例中,所述预设步长为1。
69.步骤4014、判断所述查找次数变量q是否等于所述当前存储块的最大地址,是则返回查找失败的信息,否则返回步骤4012。
70.步骤4015、将目标存储数据从缓冲区读入,并将所述查找次数变量q加递增所述目标存储数据的长度n;
71.步骤4016、读取目标地址处的内容,并判断其与数据存储结束标识s2是否相同,是则将所述目标地址处保存到所述搜索地址变量p,并进入步骤4017,否则返回步骤4013,所述目标地址为所述当前搜索地址加上所述目标存储数据的长度后的下一个地址;
72.例如,若当前搜索地址为a,目标存储数据的长度为n,则所述目标地址为a+n+1。
73.步骤4017、从所述目标地址的下一个地址处开始写入所述目标存储数据。
74.在本实施例中,所述写入所述目标存储数据包括:通过i2c总线写入所述目标存储数据。
75.在本实施例中,所述通过i2c总线写入所述目标存储数据包括:
76.步骤a1、在写入所述目标存储数据期间,监测所述i2c总线是否异常,是则进入下一步,否则循环执行本步骤;
77.步骤a2、i2c主设备将sda、scl端口配置为i/o模式;
78.在本实施例中,所述i2c主设备通常是与eeprom连接的处理器(例如mcu)。
79.步骤a3、所述i2c主设备向eeprom发送i2c协议的起始信号;
80.步骤a4、所述i2c主设备向eeprom发送预设数量的i2c时钟信号;
81.在本实施例中,所述预设数量为1+8k(k≥1)。
82.步骤a5、所述i2c主设备向eeprom发送i2c协议的起始信号和停止信号;
83.步骤a6、所述i2c主设备将sda、scl端口重新配置为i2c模式。
84.通过上述步骤能够在i2c总线写入异常时进行纠错,防止eeprom误写入。
85.以上所揭露的仅为本发明的较佳实施例,不能以此来限定本发明的权利保护范围,因此依本发明申请专利范围所作的等同变化,仍属本发明所涵盖的范围。

技术特征:
1.一种数据存储方法,其特征在于,包括:步骤1、系统初始化,将eeprom的每个存储块的状态单元的内容置0;步骤2、根据所述每个存储块的状态单元的内容确定当前存储块;步骤3、根据所述当前存储块确定目标存储块;步骤4、在所述目标存储块中写入目标存储数据。2.根据权利要求1所述的数据存储方法,其特征在于,所述步骤2包括:步骤201、读取当前状态单元的内容,并与相邻状态单元的内容进行比较,若两者不一致,则将所述当前状态单元对应的存储块判定为当前存储块,否则进入下一步;步骤202、判断所述当前状态单元是否为最后一个状态单元,是则将最后一个存储块判定为当前存储块,否则返回上一步。3.根据权利要求2所述的数据存储方法,其特征在于,所述步骤3包括:判断所述当前存储块的剩余空间是否大于目标存储数据的长度,是则将断所述当前存储块确定为目标存储块,否则将所述当前存储块的相邻存储块确定为目标存储块。4.根据权利要求3所述的数据存储方法,其特征在于,所述步骤4包括:步骤401、若所述目标存储块为所述当前存储块,则在所述当前存储块内定位到数据保存地址后写入所述目标存储数据,并擦除所述当前存储块中的历史数据;步骤402、若所述目标存储块为所述当前存储块的相邻存储块,则从所述目标存储块的数据单元的起始地址开始写入所述目标存储数据,并将所述当前存储块、目标存储块的状态单元的内容按照预设规则进行改写。5.根据权利要求4所述的数据存储方法,其特征在于,所述预设规则为取反操作。6.根据权利要求4所述的数据存储方法,其特征在于,所述在所述当前存储块内定位到数据保存地址后写入所述目标存储数据包括:步骤4011、定义并初始化搜索地址变量、查找次数变量;步骤4012、判断当前搜索地址处的内容与数据存储起始标识是否相同,是则进入步骤4015,否则进入下一步;步骤4013、将所述搜索地址变量、查找次数变量均按照预设步长递增,并判断所述搜索地址变量是否等于当前页的最大地址,是则将所述搜索地址变量指向下一页;步骤4014、判断所述查找次数变量是否等于所述当前存储块的最大地址,是则返回查找失败的信息,否则返回步骤4012。步骤4015、将目标存储数据从缓冲区读入,并将所述查找次数变量加递增所述目标存储数据的长度;步骤4016、读取目标地址处的内容,并判断其与数据存储结束标识是否相同,是则将所述目标地址处保存到所述搜索地址变量,并进入步骤4017,否则返回步骤4013,所述目标地址为所述当前搜索地址加上所述目标存储数据的长度后的下一个地址;步骤4017、从所述目标地址的下一个地址处开始写入所述目标存储数据。7.根据权利要求6所述的数据存储方法,其特征在于,所述预设步长为1。8.根据权利要求4或6所述的数据存储方法,其特征在于,所述写入所述目标存储数据包括:通过i2c总线写入所述目标存储数据。9.根据权利要求8所述的数据存储方法,其特征在于,所述通过i2c总线写入所述目标
存储数据包括:步骤a1、在写入所述目标存储数据期间,监测所述i2c总线是否异常,是则进入下一步,否则循环执行本步骤;步骤a2、i2c主设备将sda、scl端口配置为i/o模式;步骤a3、所述i2c主设备向eeprom发送i2c协议的起始信号;步骤a4、所述i2c主设备向eeprom发送预设数量的i2c时钟信号;步骤a5、所述i2c主设备向eeprom发送i2c协议的起始信号和停止信号;步骤a6、所述i2c主设备将sda、scl端口重新配置为i2c模式。10.根据权利要求9所述的数据存储方法,其特征在于,所述预设数量为1+8k(k≥1)。

技术总结
本发明提供数据存储方法,方法包括:步骤1、系统初始化,将EEPROM的每个存储块的状态单元的内容置0;步骤2、根据所述每个存储块的状态单元的内容确定当前存储块;步骤3、根据所述当前存储块确定目标存储块;步骤4、在所述目标存储块中写入目标存储数据。本发明实现了EEPROM使用寿命的大幅增长及提高了数据写入的准确性。的准确性。的准确性。


技术研发人员:刘耀正
受保护的技术使用者:惠州华阳通用电子有限公司
技术研发日:2023.02.23
技术公布日:2023/7/12
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐