24小时联系电话:18217114652、13661815404

中文

您当前的位置:
首页>
电子资讯>
技术专题>
如何在STM32系统中保...

技术专题

如何在STM32系统中保护数据免受断电影响


在嵌入式设备的开发中,断电时通常需要保存一些非易失性数据。如果添加了系统配置,用户定义的信息等,并且添加了额外的ROM IC(例如基于I2C24C02等),则额外的PCB空间将增加,硬件成本将增加,并且产品将减少。如果仅从实用角度出发,在诸如STM32系统的应用中,作者建议可以尝试以下两种方法并作为参考。

基于备份寄存器

原理:对于大容量MCU系列,它具有4216位备份寄存器,而中小型微处理器仅具有1016位备份寄存器。以stm32f103c8t6为例,这42个备份寄存器的地址偏移量为:0x040x280x400xbc,可以存储84个字节的数据。备用寄存器取决于备用电源。当外部VDD掉电时,只要系统的Vbat可以正常存在,Bakeup domaain寄存器的内容就可以正常保存。

软件编程的要点如下:以一个项目中常用的案例为例

函数初始化:

读取备份寄存器:void BKP_ WriteBackupRegisteruint16_ t BKP_ DRuint16_ t Data

读取备份寄存器:uint16_ t BKP_ ReadBackupRegisteruint16_ t BKP_ DR

此方法简单明了,但由于缺少可用空间,因此仅适用于保存少量数据,例如用户在可穿戴设备中的通用配置数据。

基于内部闪存

原理:闪存,也称为闪存,也是可以重写的存储器。它分为nor flashNAND flash。闪存通常不用于代码存储场合,例如嵌入式控制器中的程序存储空间。而NAND闪存通常用于大数据存储场合,例如U盘和固态硬盘,它们通常是NAND闪存类型。

STM32芯片中,闪存的读写单位均基于页面。以stm32f103c8t6为例,每页大小为2K字节;

软件编程要点

释放写保护释放:此方法基于以下前提:允许当前的读写Flash,并且允许当前的Flash进行写操作。因此,目前暂时不讨论某些API,例如optionbytes操作和flash读写保护操作。

Flashwrite:单个uint32_ T数据写入的简单流程图如下:

Flashread:对于单个int数据读取,它相对简单,可以通过以下语句完成:rddata =*()__ IOuint32_ t *dataAddr);

由于SW中涉及许多API,并且编码人员还需要理解许多其他背景知识,因此使用此方法相对复杂。但是,由于数据保存在页面中,因此页面大小最大为2048字节,因此该方法可用于保存掉电时不容易丢失的大数据。考虑到闪存读写保护的逻辑机制,最好在不考虑数据安全性的情况下使用此方法。

对于这种断电保护数据方法,这里只是丢砖引玉,欢迎您提出更好的方案。

 

请输入搜索关键字

确定