打印

spi读写问题

[复制链接]
1171|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xuetudou|  楼主 | 2014-12-30 10:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
之前用的EEPROM,因为空间太小,改用华邦的W25X16flash,遇到了些问题:flash在写之前要先进行擦除。我把系统参数存在了第一个扇区(前4k),因为参数需要经常改写,写之前要进行擦除,手册上最小的擦除单元就是扇区擦除,每次改一个参数都要把所有参数都读出来,擦了之后整合一下写进去,感觉很麻烦。求解答

相关帖子

沙发
aozima| | 2014-12-30 12:39 | 只看该作者
参数估计4K用不完,所以一个扇区可以存放多个,用最新那个,这样写N次以后再擦除。
万一擦写一半掉电还能恢复上一次的数据。

为更保险以及增加寿命,可以用2个扇区就更好了。

使用特权

评论回复
评论
tyw 2014-12-30 12:42 回复TA
好主意,赞一个 
板凳
tyw| | 2014-12-30 12:47 | 只看该作者
SPI总线协议介绍.pdf (471.75 KB, 下载次数: 14) 2013-6-17 19:55 上传
下载次数: 14


使用特权

评论回复
地板
chunyang| | 2014-12-30 17:43 | 只看该作者
经常写入不适合用FLASH,务必计算擦写循环寿命是否满足。

使用特权

评论回复
5
chunyang| | 2014-12-30 17:49 | 只看该作者
如果有足够的空余存储空间,可以用增量法写入,这样可以大大延长扇区寿命并降低写入时间。具体而言,FLASH只能位写入0,根据0位可以指向一个扇区的不同位置,用一个或数个字节来做索引,索引字节的位依次写入0,然后根据0的位置转向特定的地址进行写入。所有索引位都为0时才进行整扇擦除。

使用特权

评论回复
6
lee2k| | 2014-12-31 08:16 | 只看该作者
chunyang 发表于 2014-12-30 17:49
如果有足够的空余存储空间,可以用增量法写入,这样可以大大延长扇区寿命并降低写入时间。具体而言,FLASH ...

真是好办法!学习了!

使用特权

评论回复
7
shell.albert| | 2014-12-31 09:09 | 只看该作者
这方法不错,平均一下,让所有单元都有被写的机会。

使用特权

评论回复
8
叶伤| | 2015-1-1 09:20 | 只看该作者
系统参数分开存进各个扇区,要改写可以对各自扇区改写,如果是数据较多,利用擦除后为0xff轮着写下去,先读取数据碰到连续n个0xff认为是够写入,就回到第一个0Xff写入进去。读取的时候碰到连续0xff,认为没写到这里,就回到有数据的地方读取。发现整个扇区已写就擦除扇区,再写入。最好使用两个扇区进行互相备份,每写一次,就跟着写入修改次数,次数大的为最近更新。
比如
扇区1,数据,次数0,数据,次数1。
扇区2,数据,次数0,n个0Xff。

说明扇区1存在断电无法存入的可能性,则读取扇区2的0次数据进行恢复(扇区2在1完成后再写入,如果扇区1没写完成就断电或者程序异常,扇区2是不会被写的,这样保证了能读取到有效数据,当然,这个冗余功能可以不要。)。

使用特权

评论回复
9
xuetudou|  楼主 | 2015-1-4 13:11 | 只看该作者
非常感谢大家回帖和提到的方法,很有用,特别谢谢二楼和春阳版主的回复,先不结贴吧,看看别人还有啥好的方法没,没了再结

使用特权

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

本版积分规则

25

主题

70

帖子

1

粉丝