打印

新人请教大家来帮我一下,谢谢了

[复制链接]
1628|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huang1shan|  楼主 | 2011-11-7 11:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想问一个扇区插除掉电保护的问题呢

由于用到SPI总线,后来涉及到FLASH  ROM,这块不太懂,原来用24C02是按字节插除的,FLASH用到扇区插除

为了使不造成数据丢失,所以建立两个扇区,一个用于上一次数据的插除,一个用于提供数据,这样两个扇区轮流提供数据,但是考虑到断电保护的问题,就是说在插除一个扇区的过程中如果突然掉电了,重新通电后我怎么找到原来那个好的数据,也就是未被插除操作的那个数据,因为插除的那个应该不能用了

我怀疑可能用一种算法算出来是哪个扇区,但是我自己真的不知道怎么弄

高手帮我下,别笑话我基础差什么都不懂,谢谢了:handshake

在线等

相关帖子

沙发
yirongfu| | 2011-11-7 12:10 | 只看该作者
只是个参考:数据分别复制保存到两到三个扇区,且对数据进行某种校验计算,校验值也保存到扇区内,可以跟在数据后面,读取数据的时候,可以先读取第一个扇区,对读出的数据进行校验计算,与保存的校验值进行比对,如果不一致,很可能数据就有问题,然后就可以尝试从第二、甚至第三个扇区读取出来,也分别进行校验值比对。最终将校验值对的数据还原出来,并更新出错的那个扇区的数据。一般情况下,应该总有一个数据会是对的。校验可以是和校验、CRC校验等,自己选择,可能CRC会好些。除此之外,由于这样处理会造成数据读写时间的增加,需要考虑读写时间是否对你的应用有影响,还有内存需求的增加。

使用特权

评论回复
板凳
HWM| | 2011-11-7 13:36 | 只看该作者
这个最好还是有掉电检测为妙,用个大电容维持一下以便作善后处理。

使用特权

评论回复
地板
huang1shan|  楼主 | 2011-11-7 13:43 | 只看该作者
谢谢高手建议了。不过我还是不太懂,还需要校验呀?好象比较麻烦,能不能根据前面读写次数算出应该是在哪个扇区了,就两个扇区,可不可以根据计算奇偶来定是哪个扇区呀,这个我不太会弄呢,还是先谢谢你了 2# yirongfu

使用特权

评论回复
5
yewuyi| | 2011-11-7 13:54 | 只看该作者
3楼方法是简洁的根本解决方法

使用特权

评论回复
6
huang1shan|  楼主 | 2011-11-7 13:59 | 只看该作者
3楼的是什么意思啊,靠个电容维持?不太明白呢,我很焦急呀
到底怎么办到底怎么办 5# yewuyi

使用特权

评论回复
7
huang1shan|  楼主 | 2011-11-7 15:44 | 只看该作者
大家帮我想想办法啊

使用特权

评论回复
8
yirongfu| | 2011-11-7 21:29 | 只看该作者
如果出发点是为了避免出现失电时写数据错误,做掉电检测并配置足够大的储能电容,能保证数据不会出错,代价是增加一个电容、占用一个I/O资源;如果数据很重要,可以再辅以数据校验等软件的方法,达到更谨慎的数据保护,代价是要增加代码量。如果只是为了恢复数据时能恢复正确的数据,倒可以不考虑失电检测,因为那时候你不一定需要更新Flash内的数据,只需要关心恢复时能找到正确的数据。两种方法各有优缺点。

加电容是为了维持MCU的工作,一旦检测到失电,立即保存好数据,然后进入休眠或空闲,等待电源恢复了再去尝试Flash的读写操作。这个需要根据你系统的功耗来确定需要多大的电容,实验来定。

用计算读写次数或者标志位的方法,从理论分析,都还是有可能造成错误的数据被恢复,因为你不知道什么时候掉电(增加掉电检测电路除外),有可能你在做标志的时候刚好单片机进入复位状态而没成功设标志。

使用特权

评论回复
9
huang1shan|  楼主 | 2011-11-8 08:52 | 只看该作者
我就就想知道怎么计算读写次数或者标志位呢,不会弄啊,谢谢yirongfu了

使用特权

评论回复
10
yirongfu| | 2011-11-13 00:01 | 只看该作者
9# huang1shan

这个读写次数或标志位跟数据是一回事,不同之处是它是程序每擦写一次扇区,这个次数的值就递增1,而且是软件代码控制递增,标志位可以用0或1分别代表某个扇区,或者就用1个字节的值来索引扇区。
但这个不能根本解决问题,因为每次更新这个读写次数或者标志位,也在消耗保存该信息的存储区域的擦写寿命。
以前我使用24C02就确实验证了擦写超过100万次以后,掉电后再上电,读取数据发生错误的事实。当然,不掉电的话就没问题,相当于RAM。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

426

帖子

0

粉丝