找回密码
 注册
关于网站域名变更的通知
查看: 3336|回复: 1
打印 上一主题 下一主题

一招教你延长单片机的Flash擦写寿命

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-22 13:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Demyar 于 2019-1-22 13:49 编辑 1 x, @+ Q  u% ]) V

- B( @4 N) ?/ l) K1 s0 |, l! B一招教你延长单片机的Flash擦写寿命' X# [' I0 d5 s& g! Q( ~) a

7 p- e/ A# \* ^3 U9 |4 l
/ S- ^3 P( X  A/ {6 s. U. [

在单片机开发应用中,工程师经常会遇到需要在单片机内部Flash的某个区域保存和读取一些数据,而这些数据在应用中可能会经常变化,因而需要对Flash的数据经常更新。但是单片机的Flash都是有擦除次数要求的,并且擦除是按照“页”为单位操作的,频繁擦除超过一定次数后,Flash就会失效。那么,如何才能延长单片机的Flash擦写寿命呢?本文就以Silicon Labs的8位单片机EFM8SB10F8G为例,教大家如何延长单片机的Flash擦写寿命。

. [8 Z5 r7 i& j0 [8 Q

EFM8SB10F8G的Datasheet上Table4.4标称Flash擦除次数典型值是100K次,一个Flash Page是512字节,也就是在执行擦除指令时,一次至少擦除512字节的数据。EFM8SB10F8G提供了Flash自编程的读、写和擦除函数以及对Flash操作的参考例程。Flash支持单字节读和写,但是每次在更新数据之前必须要先擦除原来的数据,不能在原数据基础上直接写新数据内容。假设每次需要更新的数据长度是16个字节,最简单的方法就是在每次更新数据之前执行擦除指令,然后写入新数据。但是更新数据频率比较高的应用场合,这种方法显然是不行的。此时需要采取“空间换时间”的方法了,擦写的次数和存储数据长度的大小成反比。“空间换时间”就是指利用相对多的Flash空间来换取相对多的擦写时间(次数)。在第一次执行擦除指令后,可以依次将数据写入Flash的这一页,当写满一页后再进行擦除操作。这样的话,一页512字节空间,每次写入16字节长度的数据,一页就可以写32个数据块,写满后再全部擦除,而不用每次写数据前都擦除,该页的擦除次数就可以提高32倍,也就是100K*32=320万次了。


* Z( y+ K: h+ j7 n2 N$ b, \! P3 n

既然思路清晰了,那么软件实现起来就相对比较简单。首先需要选取数据块中的某一字节作为地址INDEX,更新数据时第一个写入Flash。Flash的编程原理都是只能将1写为0,而不能将0写为1。所以在Flash编程之前,必须将对应的页擦除,而擦除的过程就是把所有位都写为1的过程,页内的所有字节变为0xFF。

: |0 j( V# Z+ a/ p9 A+ X. m& C0 @

写入数据实现过程:每次写入数据时,从低地址到高地址依次(以16位步进)判断INDEX的内容,为了防止实际数据中包含0xFF内容,从而出现误判的情况,建议判断INDEX和INDEX+1两个地址的内容。如果都为0xFF,表示该地址空间未被写过数据,写入需要更新的数据;如果至少有一个不为0xFF,表示该地址空间已被写过数据,继续查询,直到查到内容都为0xFF为止;如果所有的INDEX(32个)和INDEX+1都至少有一个不为0xFF,表示该页已经写满,执行擦除指令后从首地址写入数据。

) F- J: I) `" E+ S& L: Q

读取数据实现过程:每次读取数据时,从高地址到低地址依次(以16为步进)判断INDEX的内容,这样是为了查询到最新的数据。同样为了防止实际数据中包含0xFF内容,从而出现误判的情况,建议判断INDEX和INDEX+1两个地址的内容。如果至少有一个不为0xFF,表示该地址已写过数据,读取数据;如果所有的INDEX(32个)和INDEX+1都为0xFF,表示该页还未写入数据。

0 d2 P. B1 m" G5 [1 }6 S$ q! f

通过上面的方式,并不是真正的提升了单片机Flash的擦写次数,但是却延长了Flash的擦写寿命,实现了需要频繁更新数据的应用。


, r' m) r( p6 R
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-28 22:57 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表