在嵌入式设备开发中,往往需要保存一些掉电不易失性的数据,如果系统配置、用户定制信息等等,如果增加额外的ROM IC,比如(基于I2C的24C02等等)往往会造成额外的PCB空间增大,硬件成本增加,降低产品的性价比。如果单从实用性来讲,在stm32的系统中,诸如此类的应用,笔者推荐如下2个方法可以去尝试和借鉴。

基于备份寄存器

原理:对于大容量的MCU系列来说,它有着42个16bit的备份寄存器,而中小容量的微处理器却只有10个16bit的备份寄存器。以STM32F103C8T6为例,42个备份寄存器的地址偏移为:0x04~0x28,0x40~0xBC,共可以存储84个byte数据。备份寄存器是依赖者备份电源的,当外界的VDD掉电,只要系统的VBAT能正常存在,那么Bakeup Domaain Registers的内容可以被正常保存起来。

软件编程要点,以一个项目中常用的case为例:

功能初始化:

备份寄存器读出:void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data)

备份寄存器读出:uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR)

该方法使用简单,清晰,但是由于总共的可以利用的空间少,故该方法只是适合于保存小批量的数据,如穿戴设备中用户的常用配置数据。

基于内部闪存

原理:FLASH 存储器又称为闪存,它也是可重复擦写的储器。它分为 NOR FLASH 和 NAND FLASH,NOR FLASH一般应用在代码存储的场合,如嵌入式控制器内部的程序存储空间;而 NAND FLASH 一般应用在大数据量存储的场合,如U 盘以及固态硬盘等,一般都是 NAND FLASH 类型的。

在stm32芯片中,Flash的读写单位都是以“页”为单位的,以STM32F103C8T6为例,它的每页大小为2K bytes;

软件编程要点

读写保护解除:使用这种方法前提是,当前读和写Flash的允许的,假设当前flash已经是允许写的。所以暂时一些关于OptionBytes的操作和Flash的读写保护操作等API暂时不做讨论。

FlashWrite:单个uint32_t数据的写入简易流程如图:

FlashRead:对于单个int数据的读出,比较简单,通过下列语句完成:rdData= (*(__IOuint32_t *)dataAddr);

由于SW介入的API较多,并且有很多的额外的背景知识需要码农去了解,使用该方法,相对比较复杂。但是由于保存数据以页为单位,页的大小可以多达2048bytes,所以该方法可以实用于保存掉电不易失的大数据。考虑到flash读写保护的逻辑机制,该方法最好在不考虑数据的安全性问题前提下,才使用这种方法。

对于诸如此类的掉电保护数据方法,这里仅仅是抛砖引玉,欢迎大家多多提出更好的方案。

暂时分享这么多,谢谢大家。合作微信xyd201606 qq3306607541

flash写保护原理_STM32系统中的2种数据掉电保护方法!相关推荐

  1. esp8266 eeprom_ESP8266_08基于flash的数据掉电保护

    这一节主要研究一下flash的用法,目的嘛,实现数据的掉电保护. 听起来像EEPROM? 确实很像,但不是!以STM32为例,片上是没有EEPROM的.但是,可以把一部分ROM当做EEPROM,通过程 ...

  2. iar编译工程的map怎么看使用flash大小_ESP8266_08基于flash的数据掉电保护

    这一节主要研究一下flash的用法,目的嘛,实现数据的掉电保护. 听起来像EEPROM? 确实很像,但不是!以STM32为例,片上是没有EEPROM的.但是,可以把一部分ROM当做EEPROM,通过程 ...

  3. flash写保护原理_老司机带路:LPC82x 存储器及读写保护 手到擒来!

    点击上方"单片大师"可以订阅哦 存储器,顾名思义就是用来存放东西的地方,那么对于一款 MCU 而言,在性能描述的时候,我们都会说 SRAM,Flash 的容量大小有多少.对于初学者 ...

  4. flash写保护原理_【转】NOR Flash擦写和原理分析

    概述 Flash名称的由来,Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次 ...

  5. linux进程看门狗使用方式,Linux系统中基于看门狗的精细化进程监控方法及系统的制作方法...

    Linux系统中基于看门狗的精细化进程监控方法及系统的制作方法 [技术领域] [0001] 本发明涉及Linux系统的进程监控技术领域,特别是涉及一种Linux系统中基于看 门狗的精细化进程监控方法及 ...

  6. 单片机C语言数据存储原理,介绍单片机中C语言的数据存储与程序编写

    一.五大内存分区: 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区 ...

  7. linux ubuntu安装 mono,在Ubuntu 18.04系统中安装Mono及基本使用Mono的方法

    本文介绍在Ubuntu 18.04操作系统中安装Mono及基本使用Mono的方法.Mono是一个基于ECMA/ISO标准开发和运行跨平台应用程序的平台,它是Microsoft .NET框架的免费开源实 ...

  8. 个人计算机的防毒软件无法防御,在win10系统中无法启动defender防御软件的解决方法...

    软件大小: 3.56 MB 软件版本: 3.3.30.180 软件类型: 系统补丁 查看详情 直接下载 win10系统是我们现在都在使用的系统,下面小编为大家在win10系统中无法启动defender ...

  9. html 插入本地视频,win7系统中Word文档插入本地视频的方法【图文】

    win7系统安装Office办公软件无论生活还是办公对大家的帮助都是很大的,有时候编辑word文档需要插入本地视频,很多熟悉Office的朋友都知道在PPT中插入视频很方便,直接点击插入选项卡的视频选 ...

最新文章

  1. 知乎热问:成为算法工程师的路上,掌握什么技术会感觉自我提升突飞猛进?
  2. vue前端表格插件_Grid.js - 跨框架的前端表格插件
  3. linux 蓝牙编程,实战Linux Bluetooth编程(三) HCI层编程
  4. 【转】C++ this指针(直戳本质)
  5. Java中随机数的原理,以及使用时的注意点
  6. Android - Glide4.4.0使用
  7. 太想成功了--成功之前,你是否养成了这些习惯?
  8. maven怎么和ecli_Maven的配置和Eclipse中导入SpringBoot项目一些注意点
  9. lucene的Query类型
  10. android反编译工具 ApkDec-Release-0.1
  11. COS中访问文件的三种方式
  12. 多路径配置udev_多路径multipath配置,udev绑定
  13. Oracle数据库 【SYNONYM 同义词 シノニム】
  14. java 文件去除扩展名_使用Java删除所有带扩展名的文件
  15. Python3使用bencode库解析BT种子
  16. mysql主库、从库和备库
  17. 初学Python-反射 装饰器 面向对象编程 异常处理 断言
  18. 学习Python单利模式
  19. sqlsession生命周期
  20. git Filename too long解决方案

热门文章

  1. linux服务器root的密码修改
  2. ajax请求数据渲染个人中心页面
  3. C C++语言指针学习!(基础篇!) 指针的掌握真滴是分水岭呦~
  4. 网警信息安全!_只愿与一人十指紧扣_新浪博客
  5. 硬核教程:五步掌握用VSCode进行高效Python开发
  6. 微信小程序如何使用iconfont阿里巴巴图标库?
  7. 百度关键词研究: 应避免的5个错误!
  8. eclipse 中配置maven环境
  9. 超全面的JavaWeb笔记day02CSSJavaScript
  10. Ubuntu中虚拟环境pip安装包超时问题