这个问题,其实从STM32各个型号的datasheet就可以看出来.
对比了几个文档之后,我发现STM32F10x系列的不同型号,他们的最少擦写寿命不一样.仔细对比了下,原来是版本的问题.在老版本中,写的内容如下:
这是老版本的表述,就说最少是1K次,典型的是10K次.而后面的新版本,其内容如下:
新版本的把最少次数改为了10K次,这样的话,我们可以认为STM32的FLASH擦写周期在1W次左右.所以大家可以算算,每天擦写100次,那么需要100天.但是你能每天刷100次么?除非你想测试STM32的flash寿命,呵呵.否则,顶多就是30次的样子.这样算来,每天擦30次,从不间断,能用一年左右. 但是你能一年平均每天都擦30次么?
想请教一下,一般我们说的擦写一万次,到底是指的擦一万次,还是写一万次?
因为擦一页,这一页可以写很多次(如果写入的数据很少),所以擦和写的次数不是一定相等的。一般说的擦写是使用软盘时代留下名词,一个2G的SD卡,一次写入2G的数据,才是擦写一次。
我个人认为,通常讨论的MCU的flash的擦写次数,其实是擦次数,一万次即擦一万次。
以下为百度上一个网友所说:
这个擦写是从软盘时代遗留下来的一个名词。。擦写是对全部容量大小的一次写入操作。举个简单的例子,SD卡大小为2G,放入刚刚好2G大小的文件则SD卡擦写一次。擦写是一个写操作,读不影响这个数字。只是写入1M空间的话只有那1M大小的空间会被写入,其他部分没有写入操作。有的存储(SSD)的主控芯片会平均调节写入的位置,争取每一个空间的写入次数都差不多。手机虽然没有,但是也没多大关系。大部分的软件运行时候都是读操作,只有极少的用户数据的内容,比如聊天记录、游戏存档会进行写操作,而聊天记录这样的东西,是不会进行覆盖操作的,文件会填补起来慢慢变大。游戏存档有的会覆盖,但是这个也是受存储的主控芯片调节的。存大容量的东西确实会更快的消耗擦写次数,毕竟存储的I/O更快。大部分你的操作都是在内存中进行的。总的来说用户不必忧虑擦写次数。。有人尝试过365*24小时的疯狂擦写,就是装满了删除继续装,SD卡表示还是可以正常运行。
我的理解是写SD卡和Flash应该不能算一回事,SD卡U盘这类存储设备为了提高寿命,应该是有软件算法在里面的,而写Flash的话是直接写到物理地址的,写哪个地址哪个地址的寿命就减少一次,至于是不是整页的寿命都减少一次我觉得不需要过多的在乎,就暂且认为只是写入的地址寿命减少的话,我的建议如下
对于不同的应用,如果写入的数据量很少,可以开辟一页的地址循环写入,只擦写一次,待写满后全部擦除再从头开始写,单页的写入次数就是1page/写入的字节大小,至于要开辟多大,根据需求决定
如果写入数据很多比如1K,那就开辟多页,最少两页来循环写入,多少页也根据需求选择
说一个我自己的应用,需求是需要存储256字节的数据而且要频繁修改,flash单页是512的,我开辟了15页来循环写,(因为我要频繁的擦写,5页的寿命全部写满可能也不够,保险起见就取了15页,反正空间够用),每次上电先查找掉电前的page编号,选定为当前page,需要写入数据的时候先读取当前page到内存,该写后写入下一个page,写完第15页时指针到第一个page重写开始写,如此循环
最后注意的问题,每个芯片的flash特性不同,我遇到的大多数都支持字节、双字节、四字节写,整页擦除、扇区擦除等,有些支持页写,这样就比较方便了使用我那样的方法,还有需要注意指针的对齐问题,不然会出错,如果还要什么问题可以随时问我
我了解你的意思了。
FLASH写之前,如果有数据,必须先擦除,所以你可以认为写的次数就是等于擦的次数
一周热门 更多>