上一篇主要说明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);
}

NVM区数据备份机制相关推荐

  1. 计算机系统备份的原则和策略,计算机系统数据备份机制与策略

    计算机系统数据备份机制与策略 20年第5 05期 华中电力 第 l卷 8 计算机系统数据备份机制与策略 耿煜 (樊学院机械系,北襄樊襄湖 4 15 ) 4 03 摘要:针对当今计算环境中不断增长的数据 ...

  2. 小白学习MySQL - 聊聊数据备份的重要性

    最近某套MySQL数据库服务器异常关机,导致MySQL不能正常拉起来,启动过程中,error日志中记录了如下的信息,可以看到,数据库因为异常关闭,此时会进行实例恢复的操作, [Note] InnoDB ...

  3. 多备份和FileGee两款数据备份软件对比

    作为企业的普通员工来说,如果不是电脑突然崩溃是不会想到数据备份的问题的.但作为公司的CIO或者 IT部门的主管则绝对不能忽略这个问题.随着大数据时代的来临,数据的总量以及运算次数迅速增加,因此,建立良 ...

  4. Android数据备份(Android Data Backup)

    最近我在阅读Android Developer上的文章,本文是对其中一篇Data Backup的翻译.希望可以通过翻译英文技术文章提高自己阅读英文文档的水平,如果有不妥的地方,希望指出,谢谢~因为这个 ...

  5. 远程linux还原本地bak文件,Linux -- 服务器数据备份恢复策略

    一.Linux 备份恢复基础 1.什么是备份 最简单的讲,备份数据的过程就是拷贝重要的数据到其他的介质之上(通常是可移动的),以保证在原始数据丢失的情况下可以恢复数据.一次备份可能是简单的 cp命令, ...

  6. 数据安全与数据备份存储技术(转)

    数据安全与数据备份存储技术(转)[@more@] 随着国内各行业信息系统的快速发展,特别是银行.证券.保险等行业大集中速度的加快,企业的技术风险也相对集中.一旦发生灾难,则将导致企业所有分支机构.营业 ...

  7. 智能卡系统设计(一) 断电保护和数据备份

    本文主要讲述智能卡系统的断电保护和数据备份相关知识,主要内容如下图,包括数据的备份.备份区的设计.均衡磨损技术以及数据恢复的时机等等. 1.数据备份的原因 在数据的一次写过程中,由于Flash物理特性 ...

  8. 苹果电脑数据备份和数据恢复方法+时间机器

    苹果电脑在Leopard操作系统中自带了一个叫时间机器(Time Machine)的软件,用于数据备份和恢复.既然70-80%的用户都不做备份,为什么苹果要在Leopard中隆重推出时间机器这个新功能 ...

  9. 数据丢失如当头棒喝,数据备份重如山!

    前段时间,相信每个IT从业者的朋友圈都被这样一条消息刷屏了,"腾讯云北京三区部分云硬盘IO异常,导致互联网创业公司"前沿数控技术"线上生产数据完全丢失".听闻此 ...

最新文章

  1. 【人工智能】人工智能时代的道路选择 | 焦点评论
  2. 两个经典递归问题:菲波那契数列 + 汉诺塔
  3. Linux安装zookeeper并验证
  4. UA MATH523A 实分析2 测度论基础2 集族与单调类
  5. 修改服务器名后,sql server的配置处理
  6. Go题目 自己做的 不完善的地方请评论指出
  7. 替换对象所有字段_JVM字段访问优化
  8. Win32ASM学习[14]:符号扩展指令: CBW,CWDE,CDQ,CWD
  9. 为何我的孩子不沉迷网络游戏
  10. 大二Git-Branching学习
  11. 洛谷P1488 肥猫的游戏
  12. .NET跨平台:在CentOS上编译dnx并运行ASP.NET 5示例程序
  13. 编译问题追踪 :Connect to maven.google.com:443 [maven.google.com/172.217.160.110] failed: Connection timed
  14. 高数笔记(十):定积分的概念与性质,微积分基本公式,牛顿-莱布尼兹公式,变限函数求导
  15. 人工智能的定义与发展史
  16. 关于MNN中图像预处理
  17. [译] Erlang 之禅第一部分
  18. 易之 - 我是个大师(2014年3月6日)
  19. 《用Python写网络爬虫第2版》PDF中英文+代码分析
  20. 使用函数输出一个整数的逆序数

热门文章

  1. 不要让开源成为贸易战的牺牲品!
  2. 集 Python、C、R、Ruby 之所长,动态编程语言 Julia 1.0 正式发布
  3. 《绝地求生》外挂源码被公布后,腾讯蓝洞再次出招打压!
  4. 00 后 CEO 何以“将马云和马化腾两家一网打尽”
  5. java 启动xms_关于java:启动JVM时-Xms和-Xmx参数是什么?
  6. 软件盘将dialog顶上去_Android dialog软键盘弹出顶起View
  7. tomcat内存占用过高_Tomcat 性能调优之 JVM 调优
  8. Java一个月学到springboot_Java基础学习路线之SpringBoot入门
  9. qq为何没有linux版本,如何安装linux版本QQ?
  10. san分布式共享文件系统_【最强科普】一文读懂分布式存储