社区导航

 

搜索
查看: 355|回复: 21

[分享] NVM区数据备份机制

[复制链接]

64

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-8 17:25 | 显示全部楼层 |阅读模式

上一篇主要说明NVM区操作注意事项,本文针对上篇提到的NVM区数据备份方法进行补充讲解。



NVM区主要特性是写入数据掉电不丢失,可以永久的保存数据,一般用作存放不经常修改的数据,此功能类似FLASH。向NVM区写入数据可分为3步:第一步,将目标扇区内原有数据读出到RAM中;第二步,擦除NVM目标扇区内数据;第三步,将新数据和RAM中的旧数据写入到该扇区中。基于以上写操作的特点可以看出,若执行写NVM区操作的第二步或第三步时芯片断电了,就会造成NVM区内原有数据丢失,而新数据写入失败,表现出NVM区内数据错乱的现象。虽然这只是小概率事件,但出于稳定性和产品健壮性考虑也要加入数据备份机制。



数据备份有两套基本方案,分别适用于小数据量和大数据量的应用场景。本期介绍小数据量备份方案,即要求每次更新数据量小于一个扇区大小减1,本例扇区大小256字节,因此更新数据量最大255字节。(注意:不同型号芯片NVM扇区大小会有差异,可以联系凌科技术确认)。实现思路是:从NVM区选取两块区域,每个区域的最后一字节记录该区域的操作次数。以该标志决定更新数据应选用哪个区域。依次循环操作两个区域,操作区域1的时候,区域2就充当了备份作用,反之同理。



第一次写入数据



第一步:将NVM区地址0x0000~0x00FF定义为Block1,将0x0200~0x02FF定义为Block2。



#define Block1 0x0000



#define Block2 0x0200



第二步:定义一个256字节的数组databuf和一个标志位变量cnt,并将cnt赋值0。



unsigned char databuf[256];



Unsigned char cnt = 0;



第三步:将目标数据(待写入数据)拷贝到databuf数组中,并将cnt+1拷贝到databuf+255的位置。



databuf[255] = cnt+1;



第四步:调用WriteNVM函数向Block1写入数据databuf,写入长度256字节。调用WriteNVM函数向Block2+255位置写入cnt,写入长度1字节



WriteNVM(Block1,databuf,256);



WriteNVM(Block2+255,&cnt,1);



更新数据



第一步:调用ReadNVM函数分别读取Block1和Block2的标志位(最后一字节)。



unsigned char flag1,flag2;



ReadNVM(Block1+255,&flag1,1);



ReadNVM(Block2+255,&flag2,1);



第二步:判断两个Block的标志位大小,选取标志位数值小的Block进行更新。将目标数据(待写入数据)拷贝到databuf数组中,并将标志位加2后拷贝到databuf+255的位置。



if(flag1 > flag2)



{



cnt = flag2 + 2;



databuf[255] = cnt;



WriteNVM(Block2,databuf,256);

}else{



cnt = flag1 +2;



databuf[255] = cnt;



WriteNVM(Block1,databuf,256);



}



读取数据



第一步:读取Block1和Block2的标志位数据。



ReadNVM(Block1+255,&flag1,1);



ReadNVM(Block2+255,&flag2,1);



第二步:判断标志位大小,数值大的Block内为新数据,数值小的Block内为旧数据。



if(flag1 > flag2)



{



ReadNVM(Block1,databuf,255);



}else{



ReadNVM(Block2,databuf,255);



}


来源:EEWorld 嵌入式系统编程板块,转载请附上链接


回复

使用道具 举报

5266

TA的帖子

19

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2019-8-10 18:30 | 显示全部楼层

楼主继续,,,

很实用



回复

使用道具 举报

84

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-13 17:15 | 显示全部楼层
能来点干货吗?期待楼主的更新


回复

使用道具 举报

17

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-13 17:19 | 显示全部楼层

太专业了,不明觉厉。



回复

使用道具 举报

27

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-13 17:28 | 显示全部楼层

太棒啦,有了NVM区数据备份机制,芯片断电的时候,就不用担心NVM区内原有数据丢失和新数据写入失败了,赞!
 



回复

使用道具 举报

84

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-13 20:22 | 显示全部楼层

虽然感觉操作有点复杂,但是能解决数据掉电不丢失的情况,麻烦点也能接受,下次可以试一下
 



回复

使用道具 举报

74

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-13 22:11 来自手机 | 显示全部楼层
这个方法不错,可以试试


回复

使用道具 举报

84

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-14 08:33 | 显示全部楼层
如此操作的好处是什么?会不会导致可用数据区变小呢?


回复

使用道具 举报

80

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-14 09:11 来自手机 | 显示全部楼层
好处是数据有备份,不会丢失。数据区虽然变小,但是够用就行。


回复

使用道具 举报

69

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-14 09:32 | 显示全部楼层

这样操作影响数据的读写速度吗?



回复

使用道具 举报

75

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-14 13:54 | 显示全部楼层

读写速度相比没有备份机制的速度慢了



回复

使用道具 举报

83

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-15 13:20 | 显示全部楼层

读写速度应该是存储的数据大小有关系,如果数据很大,读写的速度肯定会变慢一些
 



回复

使用道具 举报

17

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-15 13:50 | 显示全部楼层

哪款产品有nvm区呢?楼主推荐一下



回复

使用道具 举报

80

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-15 14:55 来自手机 | 显示全部楼层
很多芯片都有NVM区,你可以咨询几个厂家问问,LKT的有个型号是带NVM的,具体还得看你需要多大的空间


回复

使用道具 举报

27

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-15 19:28 来自手机 | 显示全部楼层
看完楼主最近这几篇文章,大概了解啦NVM区数据备份机制,文章不错!


回复

使用道具 举报

74

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-16 08:26 来自手机 | 显示全部楼层
看了楼主的文章很有启发,这就去咨询一下


回复

使用道具 举报

69

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-16 08:54 | 显示全部楼层

楼上提到的LKT和楼主说的凌科技术是一家吗?有哪位大神用过他家产品没?产品技术怎么样?怎样才能联系到他们的技术人员?



回复

使用道具 举报

83

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-16 16:30 | 显示全部楼层

这么搞的话,太局限了,超过256字节就没法用了,太理想化



回复

使用道具 举报

75

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-16 17:01 | 显示全部楼层

文中的小概率事件能不能避免
 



回复

使用道具 举报

17

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-19 08:58 | 显示全部楼层

楼上同问。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /3 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-8-22 23:46 , Processed in 0.572157 second(s), 16 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表