硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6568|回复: 11
收起左侧

[有问必答] spi_flash例子里面的sf_WriteBuffer函数可以实现循环写入吗?

[复制链接]

7

主题

21

回帖

42

积分

新手上路

积分
42
发表于 2020-12-23 16:09:20 | 显示全部楼层 |阅读模式
有需要这么个功能,需要往flash里面写入数据,一次大概几十个字节,一次写一页,然后下次再次写入的时候,自动的在上次的后面一页写入,写满整个flash时,数据会从最开始的地址开始写入,这样形成一个循环
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2020-12-24 08:51:08 | 显示全部楼层
这个函数随意调用,会自动的进行擦除操作。
回复

使用道具 举报

7

主题

21

回帖

42

积分

新手上路

积分
42
 楼主| 发表于 2020-12-24 08:56:07 | 显示全部楼层
eric2013 发表于 2020-12-24 08:51
这个函数随意调用,会自动的进行擦除操作。

我知道他可以自动擦除,那我想做的是,写入一次数据后,下次写入的时候,地址会自动向后偏移一页,这个是我要自己写个循环体,让地址自增吗?判断最后的地址,写满从头开始写。是这个逻辑吗?
回复

使用道具 举报

7

主题

21

回帖

42

积分

新手上路

积分
42
 楼主| 发表于 2020-12-24 09:16:34 | 显示全部楼层
eric2013 发表于 2020-12-24 08:51
这个函数随意调用,会自动的进行擦除操作。

硬汉哥,这个自动擦除我明白,就是我想实现flash一块空间进行循环写。我是需要,每次写之前地址向后偏移一页,写到最后的地址了,然后判断最开始的地方开始写入,是吗?
回复

使用道具 举报

7

主题

21

回帖

42

积分

新手上路

积分
42
 楼主| 发表于 2020-12-24 11:29:30 | 显示全部楼层
eric2013 发表于 2020-12-24 08:51
这个函数随意调用,会自动的进行擦除操作。

硬汉哥,还有一个问题就是flash的地址问题,我的是W25Q128的我每写一次数据,这个地址怎么修改啊,如果要是增加的话,一次增加多少啊,256吗?我一次也就二三十个字节,一次占用一页,那下一页的地址是在上一页地址上面增加256吗?
回复

使用道具 举报

7

主题

21

回帖

42

积分

新手上路

积分
42
 楼主| 发表于 2020-12-24 11:55:04 | 显示全部楼层
eric2013 发表于 2020-12-24 08:51
这个函数随意调用,会自动的进行擦除操作。

还可以这么看,就是我想flash的一段空间整成环形的存储空间,每一次写入的地址是多少啊,一次不超过256个字节
回复

使用道具 举报

7

主题

21

回帖

42

积分

新手上路

积分
42
 楼主| 发表于 2020-12-24 16:58:02 | 显示全部楼层
eric2013 发表于 2020-12-24 08:51
这个函数随意调用,会自动的进行擦除操作。

硬汉哥,还有个问题,就是用页写入的时候,一次只写一页,每次写之前都要调用擦除函数吗?那岂不是同一个扇区的其他页的数据都没了?还是一个扇区擦除一次之后,16个页再写入的时候不用在擦除了?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2020-12-25 09:47:30 | 显示全部楼层
_吕吕 发表于 2020-12-24 09:16
硬汉哥,这个自动擦除我明白,就是我想实现flash一块空间进行循环写。我是需要,每次写之前地址向后偏移 ...

这个问题是这样的,如果你想自己灵活运行,注意那个回卷问题即可,也就是说他是256字节,即一页为单位,在这个256字节内,给个首地址后,可以一直发数据,而无需发地址,这就是所谓的页编程。

如果你超过了256字节,会自动回卷。也就是重新从这256字节首地址开始了。

所以你每够一页,设置下一个页地址即可。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2020-12-25 09:48:52 | 显示全部楼层
_吕吕 发表于 2020-12-24 11:29
硬汉哥,还有一个问题就是flash的地址问题,我的是W25Q128的我每写一次数据,这个地址怎么修改啊,如果要 ...

回复同上。考虑自己封装个API,够256了,自动设置个地址。
回复

使用道具 举报

7

主题

21

回帖

42

积分

新手上路

积分
42
 楼主| 发表于 2020-12-25 10:05:16 | 显示全部楼层
eric2013 发表于 2020-12-25 09:48
回复同上。考虑自己封装个API,够256了,自动设置个地址。

好的,感谢硬汉哥,我每次写入过后,地址自动加一页。就可以了
回复

使用道具 举报

7

主题

21

回帖

42

积分

新手上路

积分
42
 楼主| 发表于 2020-12-25 16:50:53 | 显示全部楼层
eric2013 发表于 2020-12-25 09:48
回复同上。考虑自己封装个API,够256了,自动设置个地址。

硬汉哥又有问题了,现在读写没问题了,可以一直往下写,但是呢,掉电就丢失了。我想做个掉电不丢失,但是呢,卡在第一次的地址问题上去了。如果我第一个用的是自己定义的起始地址,然后记录一次,然后地址加1,保存起来作为下次要写的地址,那我写第二次的时候怎么办啊,读出来没办法写啊。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2020-12-26 09:42:15 | 显示全部楼层
_吕吕 发表于 2020-12-25 16:50
硬汉哥又有问题了,现在读写没问题了,可以一直往下写,但是呢,掉电就丢失了。我想做个掉电不丢失,但是 ...

没听懂
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-16 13:50 , Processed in 0.048786 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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