找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2375|回复: 5
打印 上一主题 下一主题
收起左侧

如何判断flash内存是否写入过数据

[复制链接]
跳转到指定楼层
楼主
ID:585428 发表于 2021-4-16 08:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求教。我想将设备的初始化数据写入到w25q128这款flash内存中,但因为初始化的数据不是永远不变的,个人可以根据需要修改,然后将新的数据保存。

所以我想做一个初始化判断,如果芯片没有写入过数据,那么导入初始化数据,如果写入过数据,那么就读取写入的数据。
已知w25q128这款芯片初始状态时,每一位存储的都是1。所以我做了一个简单的判断,但是我觉得不是特别保险。
请问有没有人做过这方面,有更好的方案。谢谢分享。
下面是我的代码:
  1. u8 datatemp[8];
  2.         W25QXX_Read((u8*)datatemp,0X000000,8); //起始地址0号扇区,读取数据,并赋值给datatemp数组
  3. if(datatemp[0]!=0XFF)  //不等于0xFF,说明有用户保存的数据,那么不再初始化
  4. {
  5. }
  6. else //等于0xFF=》进行初始化设置
  7. {
  8. }
复制代码




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:388929 发表于 2021-4-16 09:15 | 只看该作者
真正的储存由第二个扇区开始,第一扇区留着做记号,每次程序判断时就去读那个记号就好,有记号就写过,没记号就没写过
回复

使用道具 举报

板凳
ID:585428 发表于 2021-4-16 09:22 | 只看该作者
billaj 发表于 2021-4-16 09:15
真正的储存由第二个扇区开始,第一扇区留着做记号,每次程序判断时就去读那个记号就好,有记号就写过,没记 ...

了解了,您这个方式比我的做法好很多。谢谢
回复

使用道具 举报

地板
ID:213173 发表于 2021-4-16 10:31 | 只看该作者
方法其实有很多,楼上已提供了一种方法。再比如你保存的数据在某范围之内,读取后判断其是否在有效范围之内,否则无效就写入新数据。亦或用数据串的形式保存,加入一个字节的验证码更保险。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:584814 发表于 2021-4-16 11:00 | 只看该作者
想知道有没有写过,就是做标记,你可以将新器件先写满0或1。
但这种办法也有问题,比如你写满了0或1而你新写的也正好是全0或1.....
所以要根据自己的实际要求去做。要是写文档什么的搞个标记有个意思就可以了。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:585428 发表于 2021-4-16 11:19 | 只看该作者
wulin 发表于 2021-4-16 10:31
方法其实有很多,楼上已提供了一种方法。再比如你保存的数据在某范围之内,读取后判断其是否在有效范围之内 ...

您的这种加校验位的方法确实更加的严谨,能够更好的防止意外情况的发生。谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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