24小(xiǎo)时联系電(diàn)话:18217114652、13661815404

中文(wén)

您当前的位置:
首页>
電(diàn)子资讯>
技术专题>
如何在STM32系统中保...

技术专题

如何在STM32系统中保护数据免受断電(diàn)影响


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

基于备份寄存器

原理(lǐ):对于大容量MCU系列,它具有(yǒu)4216位备份寄存器,而中小(xiǎo)型微处理(lǐ)器仅具有(yǒu)1016位备份寄存器。以stm32f103c8t6為(wèi)例,这42个备份寄存器的地址偏移量為(wèi):0x040x280x400xbc,可(kě)以存储84个字节的数据。备用(yòng)寄存器取决于备用(yòng)電(diàn)源。当外部VDD掉電(diàn)时,只要系统的Vbat可(kě)以正常存在,Bakeup domaain寄存器的内容就可(kě)以正常保存。

软件编程的要点如下:以一个项目中常用(yòng)的案例為(wèi)例

函数初始化:

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

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

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

基于内部闪存

原理(lǐ):闪存,也称為(wèi)闪存,也是可(kě)以重写的存储器。它分(fēn)為(wèi)nor flashNAND flash。闪存通常不用(yòng)于代码存储场合,例如嵌入式控制器中的程序存储空间。而NAND闪存通常用(yòng)于大数据存储场合,例如U盘和固态硬盘,它们通常是NAND闪存类型。

STM32芯片中,闪存的读写单位均基于页面。以stm32f103c8t6為(wèi)例,每页大小(xiǎo)為(wèi)2K字节;

软件编程要点

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

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

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

由于SW中涉及许多(duō)API,并且编码人员还需要理(lǐ)解许多(duō)其他(tā)背景知识,因此使用(yòng)此方法相对复杂。但是,由于数据保存在页面中,因此页面大小(xiǎo)最大為(wèi)2048字节,因此该方法可(kě)用(yòng)于保存掉電(diàn)时不容易丢失的大数据。考虑到闪存读写保护的逻辑机制,最好在不考虑数据安全性的情况下使用(yòng)此方法。

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

 

请输入搜索关键字

确定