良许Linux教程网 干货合集 STM32系统中2种数据掉电保护的方法

STM32系统中2种数据掉电保护的方法

在嵌入式设备开发中,通常需要保存一些在断电情况下不易丢失的数据,例如系统配置和用户定制信息等。如果增加额外的ROM IC(例如基于I2C的24C02)会导致额外的PCB空间增大和硬件成本增加,从而降低产品的性价比。如果仅从实用性的角度考虑,在STM32系统中,针对这类应用,我推荐以下两种方法供大家尝试和借鉴。

基于备份寄存器

原理:对于容量较大的MCU系列,它们具有42个16位备份寄存器,而中小容量的微处理器只具有10个16位备份寄存器。以STM32F103C8T6为例,这42个备份寄存器的地址偏移量为: 0x04~0x28, 0x40~0xBC。总共可以存储84个字节的数据。备份寄存器依赖备份电源,当外部的VDD掉电时,只要系统的VBAT能正常存在,备份寄存器的内容可以正常保存下来。

软件编程要点:以一个常见的应用案例为例:

功能初始化:

image-20231008203354932
image-20231008203354932

备份寄存器读出: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;

image-20231008203358638
image-20231008203358638

软件编程要点

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

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

image-20231008203400629
image-20231008203400629

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

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

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

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部