24小(xiǎo)时联系電(diàn)话:18217114652、13661815404
中文(wén)
- 您当前的位置:
- 首页>
- 電(diàn)子资讯>
- 技术专题>
- 如何在STM32系统中保...
技术专题
如何在STM32系统中保护数据免受断電(diàn)影响
在嵌入式设备的开发中,断電(diàn)时通常需要保存一些非易失性数据。如果添加了系统配置,用(yòng)户定义的信息等,并且添加了额外的ROM IC(例如基于I2C的24C02等),则额外的PCB空间将增加,硬件成本将增加,并且产品将减少。如果仅从实用(yòng)角度出发,在诸如STM32系统的应用(yòng)中,作者建议可(kě)以尝试以下两种方法并作為(wèi)参考。
基于备份寄存器
原理(lǐ):对于大容量MCU系列,它具有(yǒu)42个16位备份寄存器,而中小(xiǎo)型微处理(lǐ)器仅具有(yǒu)10个16位备份寄存器。以stm32f103c8t6為(wèi)例,这42个备份寄存器的地址偏移量為(wèi):0x04〜0x28、0x40〜0xbc,可(kě)以存储84个字节的数据。备用(yòng)寄存器取决于备用(yòng)電(diàn)源。当外部VDD掉電(diàn)时,只要系统的Vbat可(kě)以正常存在,Bakeup domaain寄存器的内容就可(kě)以正常保存。
软件编程的要点如下:以一个项目中常用(yòng)的案例為(wèi)例
函数初始化:
读取备份寄存器:void BKP_ WriteBackupRegister(uint16_ t BKP_ DR,uint16_ t Data)
读取备份寄存器:uint16_ t BKP_ ReadBackupRegister(uint16_ t BKP_ DR)
此方法简单明了,但由于缺少可(kě)用(yòng)空间,因此仅适用(yòng)于保存少量数据,例如用(yòng)户在可(kě)穿戴设备中的通用(yòng)配置数据。
基于内部闪存
原理(lǐ):闪存,也称為(wèi)闪存,也是可(kě)以重写的存储器。它分(fēn)為(wèi)nor flash和NAND 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)保护数据方法,这里只是丢砖引玉,欢迎您提出更好的方案。