OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3531|回复: 10

W25Q64存储问题求教

[复制链接]

6

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2018-5-3
在线时间
18 小时
发表于 2018-5-14 16:52:19 | 显示全部楼层 |阅读模式
5金钱
W25Q64如何才能在断电之后下一次运行处程序找到上次存储的位置继续存储呢?求教!!

最佳答案

查看完整内容[请看2#楼]

每次更新W25Q64之前,先更新存储器地址,到特定的flash地址空间。上电第一件事就是读这个地址空间。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-5-14 16:52:20 | 显示全部楼层
每次更新W25Q64之前,先更新存储器地址,到特定的flash地址空间。上电第一件事就是读这个地址空间。
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4910
金钱
4910
注册时间
2017-7-6
在线时间
720 小时
发表于 2018-5-14 16:56:16 | 显示全部楼层
先把协议写好  按照数据手册配置好  然后在你想保存寄存器的值后面写入flash中,在主函数while之前读,就ok了
我是小白,很白很白的小白!!!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-5-15 01:48:43 | 显示全部楼层
关键在于断电之前,记录上次的写入位置。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-5-15 09:58:16 | 显示全部楼层
掉电检测,把位置存起来
回复

使用道具 举报

6

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2018-5-3
在线时间
18 小时
 楼主| 发表于 2018-5-15 16:29:19 | 显示全部楼层
jinfeihan57 发表于 2018-5-15 15:44
每次更新W25Q64之前,先更新存储器地址,到特定的flash地址空间。上电第一件事就是读这个地址空间。

我现在把第一个扇区的前8个字节用来存储地址,然后从第二个扇区开始存储数据,也就是说我每次存储数据都至少需要对第一个扇区和存储数据的扇区进行擦除是吧?也就是每次存数据需要擦两次扇区!!
回复

使用道具 举报

26

主题

355

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1770
金钱
1770
注册时间
2017-4-1
在线时间
432 小时
发表于 2018-5-15 17:36:29 | 显示全部楼层
流星雨7641 发表于 2018-5-15 16:29
我现在把第一个扇区的前8个字节用来存储地址,然后从第二个扇区开始存储数据,也就是说我每次存储数据都 ...

不用擦除第一个扇区了,直接覆盖写入吧,也就是写一次数据其实要写入两组数据
回复

使用道具 举报

6

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2018-5-3
在线时间
18 小时
 楼主| 发表于 2018-5-15 20:27:22 | 显示全部楼层
陈皮皮 发表于 2018-5-15 17:36
不用擦除第一个扇区了,直接覆盖写入吧,也就是写一次数据其实要写入两组数据

可以覆盖写入?不是只要数据不同就需要把整个扇区的数据都都出来放到缓冲区然后修改,再擦除扇区,重新写入缓冲区的数据吗?我理解有误吗?
回复

使用道具 举报

26

主题

355

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1770
金钱
1770
注册时间
2017-4-1
在线时间
432 小时
发表于 2018-5-16 08:49:24 | 显示全部楼层
流星雨7641 发表于 2018-5-15 20:27
可以覆盖写入?不是只要数据不同就需要把整个扇区的数据都都出来放到缓冲区然后修改,再擦除扇区,重新写 ...

查了下资料,是需要擦除的,之前只知道内部flash写入前需要擦除,抱歉。
回复

使用道具 举报

64

主题

446

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1032
金钱
1032
注册时间
2017-7-26
在线时间
275 小时
发表于 2018-5-17 14:41:39 | 显示全部楼层
本帖最后由 a3748622 于 2018-5-20 16:15 编辑
流星雨7641 发表于 2018-5-15 16:29
我现在把第一个扇区的前8个字节用来存储地址,然后从第二个扇区开始存储数据,也就是说我每次存储数据都 ...

太浪费了吧,一个扇区4096字节呢。
你可以8个字节8个字节地读第一个扇区的内容,

如果读到8个0xff,证明这个位置还没写过,就写地址上去。
如果不是8个0xff,那就跳过往下找8个0xff。

直到4095这个位置还没有8个0xff,那就擦除了从头开始找8个0xff。
回复

使用道具 举报

6

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2018-5-3
在线时间
18 小时
 楼主| 发表于 2018-5-19 17:29:07 | 显示全部楼层
a3748622 发表于 2018-5-17 14:41
太浪费了吧,一个扇区4096字节呢。
你可以8个字节8个字节地读第一个扇区的内容,

我知道可以这样做,就是个毕设,如果有时间我再考虑优化,老哥,谢谢你的建议!!!
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 05:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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