历史上的今天
返回首页

历史上的今天

今天是:2025年04月01日(星期二)

正在发生

2019年04月01日 | STM32 FLASH 掉电数据丢失处理策略以及备份机制

2019-04-01 来源:eefocus

1、原因


由于FLASH的擦除和写入的特性,如果在擦除中掉电或者写入时掉电,有可能会出现失败的情况,下次再上电读取就会出错。


擦除的时候掉电,不能保证擦除完全,但是已经擦除的部分,肯定是0xff了。


写的时候掉电,已经写入的就是正确的,电平掉到最低极限工作电压附近时,写入的就无法保证了,地址无法保证,写入的值也无法保证。没有写到的,肯定还是 0xFF。  


2、解决方式


2.1、硬件方式解决 — 掉电保护机制 


必须硬件电路上有相应的掉电警告中断,而且必须有足够的时间供软件响应。  


掉电保存和上电恢复,需要以下: 


1) 快速检测掉电信号;


2) 要有足够的时间让你停下来保存现场;


3) 上电后可靠的复位; 


这些的关键是掉电信号电源复位信号三个怎么配合的事;

  

掉电保护不是重新擦写那么简单,首先要有一个机制能知道发生了掉电事件,还要知道什么地方的数据是可能出错的,如果是新建文件还好一点,一般就是数据作废,如果是改写一个文件时发生掉电事故的话,还要有恢复机制,将数据恢复成改写以前的数据。


由于 flash 的先擦后写的特性,不会在原来位置重新写数据,一般都是把原位置的数据标记为无效,再在新位置写入数据,对于文件来说有一个存储位置的关系,这不同于文件系统的逻辑地址,每个逻辑地址要有对应的物理地址,要有一套逻辑-物理地址的转换映射关系在里面。


flash 空间总是有限的,还要有垃圾回收的机制,系统要将无效数据的存储空间回收。


而 nand 的擦单元是写单元的2的n次幂(如32,64,128)倍,如果一个擦除单元内有有效数据的话,还要将有效的数据搬移到其它地方,要对相应的文件的地址映射进行更新维护。


擦写均衡的实现也是一件比较复杂的事情,所以我们看到的U盘大小总是小于标定的大小,因为它内部要保留一定区间用来实现FTL的算法,保存FTL层的数据。  

 

如果是这么个要求让我重新设计一下硬件的话会有如下几个部分:


1) 电源管理芯片,检测掉电事件的发生; 


2) 储能元件,在掉电发生后能满足执行掉电保护的操作即有足够的时间存储一些标志位和必要的数据;

一个电源检测芯片,一个储能元件(比如大点的电容)结合软件判断以及提前保存现场就能很好的实现掉电保护了.


2.2、软件方式解决 


1)要改写某扇区内容,先把该扇区内容备份到一个特殊的扇区; 


2)在某个地方写一个特殊的标记; 


3)完成该扇区的改写操作,清除标记; 


4)系统每次上电或复位,都去检查下标记,就跟windows下的“磁盘扫描程序”一样,即使最坏情况,也可以恢复改写之前的数据。


这个过程“备份->置标记->写->清标记”的办法,是个可行的办法,也是目前比较通行的办法。


示例:


如下图所示:



使用两个sector互为备份,首先判断valid,如果数据都有效,比较version看谁的数据比较新,使用最新的数据。


正常的情况下: 


1)初始化,sector 0和sector 1的valid值都为0xff,使用sector 0擦写,version为0,valid为0x5a。 


2)第二次擦写,sector 0的valid为0x5a,sector 1的valid为0xff,表明sector 1为无效数据,使用sector 1擦写,vesion在上次的基础上加1,valid为0x5a。 


3)第三次擦写,sector 0和sector 1的valid值都为0x5a,比较version,sector 1的version比sector 0大,所以使用sector 0擦写,sector 1为备份数据,version加1,valid为0x5a。 


4)依此类推,擦写数据的过程中,version高的为最新数据,version低的为备份数据。


掉电的情况下: 


1)如果在擦除sector 0的时刻掉电,前半部分数据为0xff,后半部分数据是旧数据;重启后比较valid都为0x5a,进而比较version,因为最新数据的version没有写进去,所以sector 1的versoin较高,使用sector 1的旧数据。 


2)如果在擦完sector 0的时刻掉电,所有数据都为0xff;重启后sector 1的valid为0x5a,使用sector 1的旧数据。 


3)如果在写sector 0的时刻掉电,前半部分数据为新数据,后半部分数据为0xff;重启后sector 1的valid为0x5a,使用sector 1的旧数据。


相对网络上搜索到的掉电备份方法(写备份区-备份标志-写目标区-清备份标志),优点是每次修改数据只需要擦写一次,速度较快;缺点是存储一个sector的数据需要两个sector的空间。


注意:


这个标记必须是单独占用一个无用的扇区(没有实际有用数据的扇区),保证对标记的操作不会影响到实际数据。

二是这只能保证数据能恢复到之前的状态,不能确保数据结构的完整性。


譬如你有一个数据结构有16字节(它们之间是有逻辑关系的),跨两个扇区保存,现在要全面更新这16个字节的数据,如果发生某个扇区没有成功更新(即恢复到之前的数据),就会发生新旧数据同时存在的情况,程序利用这些数据来操作,就有可能发生错误。


所以,还需进一步的机制来保证“整体数据结构”的完整性,譬如某个文件的一部分数据坏掉了,那么就把整个文件无效掉。

推荐阅读

史海拾趣

Conexcon Group公司的发展小趣事

在电子行业的快速发展中,Conexcon Group以其前瞻性的技术视野,成功研发出一款新型智能芯片,这款芯片不仅性能卓越,而且功耗极低,迅速赢得了市场的青睐。公司凭借这一技术突破,逐步扩大了在国内外市场的份额,成为了行业内技术创新的领军者。随着产品线的不断丰富,Conexcon Group逐渐形成了从芯片设计到整机制造的完整产业链,进一步巩固了其在电子行业的领先地位。

德尔创(Dersonic)公司的发展小趣事

在激烈的市场竞争中,德尔创始终保持着对技术创新的追求。公司不断加大研发投入,引进高端人才和先进设备,积极探索新的技术路线和产品应用。通过多年的积累和创新,德尔创在电子元器件领域已经拥有了一批具有自主知识产权的核心技术,并在市场上取得了显著的优势。这些技术优势不仅提升了公司的竞争力,还为公司的未来发展奠定了坚实的基础。

Atlantic Microwave Ltd公司的发展小趣事

在追求经济效益的同时,Atlantic Microwave Ltd公司始终不忘履行社会责任。公司积极参与公益事业,捐赠资金和技术支持给需要帮助的地区和行业。同时,公司还注重环保和可持续发展,采用环保材料和节能技术,降低生产过程中的能耗和排放,为社会的可持续发展做出了积极贡献。

以上五个故事仅是对Atlantic Microwave Ltd公司可能经历的发展阶段的虚构描述,实际情况可能因各种因素而有所不同。这些故事旨在展示一个电子企业在发展过程中可能面临的挑战和机遇,以及如何通过不断努力和创新实现持续发展。

爱特姆(ATOM)公司的发展小趣事

爱特姆科技自在美国德克萨斯州休斯顿市成立以来,便致力于电子行业的创新与发展。1998年,公司成功创立了“ATOM”品牌,标志着其正式踏入了品牌化发展的道路。起初,爱特姆以台湾、深圳、昆山为主要研发生产基地,凭借对技术的不断追求和对市场的敏锐洞察,逐渐在连接器领域取得了突破。

DELTA公司的发展小趣事

面对全球能源危机和环保意识的提高,Delta公司敏锐地捕捉到了能源管理市场的巨大潜力。于是,公司开始积极拓展能源管理业务,通过系统集成与解决方案,帮助客户提升效能、降低运营成本与资本支出。Delta的能源管理业务涵盖了工业自动化、太阳能、风能、车用电子与通讯电源等多个领域,为全球客户提供了全方位的能源管理解决方案。

Advantech公司的发展小趣事

为了更好地服务全球客户,Delta公司积极推进全球布局战略。公司在全球范围内设立了多个研发中心和生产基地,如中国大陆、中国台湾、美国、泰国、日本、墨西哥、印度、巴西以及欧洲等地。这些研发中心和生产基地不仅为Delta提供了强大的技术支持和生产能力,还使其能够更快速地响应市场需求,提供更贴近客户的服务。

问答坊 | AI 解惑

作为一个工程师,千万不要......

有天,一个新工程师问我,做好产品开发最重要的是什么?     这个问题把我问住了,想了好一会,才回答说:     第一:千万不要相信经验,不是因为你的经验不够丰富,而是你面临的问题不可能和经验完全一样,经验还要经过实 ...…

查看全部问答>

TI图形库widget配置工具一 Canvas

为了能在用TI图形库方便些特做了个小工具,且不断一步步增加完善中 9。24 [ 本帖最后由 蓝雨夜 于 2011-9-24 09:13 编辑 ]…

查看全部问答>

使用DMA方式读取spi flash问题求助

     小弟在读取spi类flash W25Q128时,发现速度很慢,经测试,只达到300KB/S作用的速度。与要求相差甚远,于是想,是否可用DMA方式来读取,以便速度能提高。       首先说一下SPI与DMA的配置,配置 ...…

查看全部问答>

TI Sitara入门培训资料分享1-AM335X家族介绍

型号:CM-AM335X基于TI的AM3359处理器,500、600、720MHZ,ARM CORTEX-A8,内存DDR2 1GB,NANDFLASH 256MB.    CM-AM335X是莱得科技专门针对工业产品应用做的低成本平台,高达720MHZ的 Cortex-A8处理器能满足各种工业应用。针对工控领域 ...…

查看全部问答>

【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第十六章 电容触摸按键实验

第十六章 电容触摸按键实验上一章,我们介绍了STM32的输入捕获功能及其使用。这一章,我们将向大家介绍如何通过输入捕获功能,来做一个电容触摸按键。在本章中,我们将用TIM5的通道2(PA1)来做输入捕获,并实现一个简单的电容触摸按键,通过该按键 ...…

查看全部问答>

模拟设计中的100条经验

replyreload += \',\' + 1562052;本书是模拟设计领域牛人经验的浓缩,总结了100个问题,下载: Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

YUV4:2:2转换4:2:0

CCD捕获的视频原始流一般为YUV 4:2:2,而通常编码支持4:2:0视频源,因而需要格式转换,文挡是基于DM6446的Resizer的具体实现.…

查看全部问答>

出一些板子和其他东西,430,51,stm32,tiva等等

本帖最后由 flashtt 于 2015-9-3 21:20 编辑 电赛结束了,我的大四也即将开始,清算一下以前的东西,存货挺多,先出一些板子和其他东西,晚上再上图 1.参加”蓝桥杯“省一的奖品,一个乐迈R9030蓝牙耳机,原价130左右,对我没什么用,我可是交了 ...…

查看全部问答>

EEWORLD大学堂----2015 TI 音频创新日 (3) 面向 BT 扬声器 / WIFI 的音频解决方案与完整的参考设计

2015 TI 音频创新日 (3) 面向 BT 扬声器 / WIFI 的音频解决方案与完整的参考设计:https://training.eeworld.com.cn/course/2229…

查看全部问答>

Simulating the front-end of your ADC - 仿真 ADC 的前端

转自deyisupport 作者:Bonnie Baker逐次逼近、模数转换器 (SAR-ADC) 很简单直接,用户将模拟电压接在输入端上 (AINP, AINN, REF),会看到一个输出数字代码,这个代码表示相对于基准的模拟输入电压。此时,用户也许很想分析一下转换器的技术规格, ...…

查看全部问答>