OpenEdv-开源电子网

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

关于外部FLASH擦写问题探讨

[复制链接]

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
发表于 2018-3-23 11:49:18 | 显示全部楼层 |阅读模式
5金钱
现使用MX25L64。。。。8M的FLASH芯片,
在擦写的时候最低擦写的都是32K的block,那我想实现单个字节的反复擦写,而且还要保留其他的信息,
需要先读出来,再擦,再写,这个内存开销是不是有点太大了

大家都是怎么解决的?

最佳答案

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

最小擦除单位是4K,你没得其他办法想,只要擦就是至少4K。 但是你可以想其他办法,比如这个要频繁擦写的位置,数据读到内存,只有在断电的时候,才进行一次写入,这样大大减少你的擦写次数。 所以,方法总比问题多。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-3-23 11:49:19 | 显示全部楼层
最小擦除单位是4K,你没得其他办法想,只要擦就是至少4K。
但是你可以想其他办法,比如这个要频繁擦写的位置,数据读到内存,只有在断电的时候,才进行一次写入,这样大大减少你的擦写次数。
所以,方法总比问题多。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
发表于 2018-3-23 12:25:46 | 显示全部楼层
#define        _MAX_SS                512                /* 512, 1024, 2048 or 4096 */
/* Maximum sector size to be handled.
/  Always set 512 for memory card and hard disk but a larger value may be
/  required for floppy disk (512/1024) and optical disk (512/2048).
/  When _MAX_SS is larger than 512, GET_SECTOR_SIZE command must be implemented
/  to the disk_ioctl function. */

FATFS的代码。。。您确定您那个存储器一个块32K么。。。。就算8G的U盘也就4096一个块吧
回复

使用道具 举报

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
发表于 2018-3-23 12:37:06 | 显示全部楼层
L128芯片手册里有(13) Sector Erase (SE)  支持4K的擦除的~~您这个L64的应该有更小Sector的擦除吧
回复

使用道具 举报

7

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2017-4-6
在线时间
67 小时
发表于 2018-3-23 13:35:59 | 显示全部楼层
FLASH芯片好像没有单字节擦除的指令,你在手册上找找,没有就不行了
回复

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2018-3-23 15:47:04 | 显示全部楼层
本帖最后由 秋天 于 2018-3-23 15:48 编辑

标准答案flash属于广义的EEPROM,因为它也是电擦除的rom。但是为了区别于一般的按字节为单位的擦写的EEPROM,我们都叫它flash。 flash做的改进就是擦除时不再以字节为单位,而是以块为单位,一次简化了电路,数据密度更高,降低了成本。上M的rom一般都是flash。


回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
 楼主| 发表于 2018-3-23 16:03:01 | 显示全部楼层
孟亮 发表于 2018-3-23 12:25
#define        _MAX_SS                512                /* 512, 1024, 2048 or 4096 */
/* Maximum sector size to be handled.
/  Alway ...

嗯,我看漏了一个,是还有一个sector 擦除,这个是4K的
但是相对来说还是大了,如果我全部使用的话,需要临时分配一个4k字节大小的空间来存原来的东西么,感觉MCU会吃不消啊
1521792136(1).png
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
 楼主| 发表于 2018-3-23 16:03:58 | 显示全部楼层
孟亮 发表于 2018-3-23 12:37
L128芯片手册里有(13) Sector Erase (SE)  支持4K的擦除的~~您这个L64的应该有更小Sector的 ...

嗯,我看漏了一个,是还有一个SE擦除,这个是4K的
但是相对来说还是大了,如果我全部使用的话,需要临时分配一个4k字节大小的空间来存原来的东西么,感觉MCU会吃不消啊
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
 楼主| 发表于 2018-3-23 16:04:55 | 显示全部楼层
JUSTNIUB 发表于 2018-3-23 13:35
FLASH芯片好像没有单字节擦除的指令,你在手册上找找,没有就不行了

不是想要单字节,我觉得没有page擦除的话,每次我想更新其中一个或者几个BYTE的数据的话,会很麻烦,我怕loading会很大
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
 楼主| 发表于 2018-3-23 16:06:03 | 显示全部楼层
秋天 发表于 2018-3-23 15:47
标准答案flash属于广义的EEPROM,因为它也是电擦除的rom。但是为了区别于一般的按字节为单位的擦写的EEPROM ...

这个倒是知道
回复

使用道具 举报

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
发表于 2018-3-23 18:56:36 来自手机 | 显示全部楼层
BJTT 发表于 2018-3-23 16:03
嗯,我看漏了一个,是还有一个SE擦除,这个是4K的
但是相对来说还是大了,如果我全部使用的话,需要临时 ...

这个时候,你需要DMA~
回复

使用道具 举报

7

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2017-4-6
在线时间
67 小时
发表于 2018-3-23 18:59:07 | 显示全部楼层
BJTT 发表于 2018-3-23 16:04
不是想要单字节,我觉得没有page擦除的话,每次我想更新其中一个或者几个BYTE的数据的话,会很麻烦,我怕 ...

FLASH有一个特性是可以把1写成0,也就是说,擦除的时候是把所有的地址都写成1。那么在使用的时候,如果你第一次往地址里写1111_1110b,那么下次还可以把这个地址的内容写成1111_1100b。
理论上可以这么干,实际我也没试过。
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
 楼主| 发表于 2018-3-23 20:48:23 | 显示全部楼层
孟亮 发表于 2018-3-23 18:56
这个时候,你需要DMA~

你说的DMA是指内存到内存吗?
但是我要改变一页中的几个byte,还是需要空间来存其他的数据,然后才能擦除呀
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
 楼主| 发表于 2018-3-23 20:48:51 | 显示全部楼层
JUSTNIUB 发表于 2018-3-23 18:59
FLASH有一个特性是可以把1写成0,也就是说,擦除的时候是把所有的地址都写成1。那么在使用的时候,如果你 ...

好像这样的不太可行
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
 楼主| 发表于 2018-3-23 21:05:33 | 显示全部楼层
原子哥有啥好意见  @原子哥
回复

使用道具 举报

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
发表于 2018-3-24 07:16:41 来自手机 | 显示全部楼层
BJTT 发表于 2018-3-23 20:48
你说的DMA是指内存到内存吗?
但是我要改变一页中的几个byte,还是需要空间来存其他的数据,然后才能擦 ...

flash到内存,然后内存到flash,你在内存改数据,DMA帮你复制,CPU无开销
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
 楼主| 发表于 2018-3-24 10:34:39 | 显示全部楼层
孟亮 发表于 2018-3-24 07:16
flash到内存,然后内存到flash,你在内存改数据,DMA帮你复制,CPU无开销

嗯,确实是这样的,我试试看
回复

使用道具 举报

6

主题

315

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1669
金钱
1669
注册时间
2018-1-29
在线时间
160 小时
发表于 2018-3-24 19:12:42 | 显示全部楼层
单字节反复擦除? 啥样的频率? flash的写入次数也就几十K吧? 能承受得了吗?

回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
 楼主| 发表于 2018-3-25 18:05:50 | 显示全部楼层
正点原子 发表于 2018-3-23 11:49
最小擦除单位是4K,你没得其他办法想,只要擦就是至少4K。
但是你可以想其他办法,比如这个要频繁擦写的位 ...

如果是意外断电的话,内存里的数据岂不是都全丢了,那这样就糟糕了
那还得加个RTC电池么。。。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 07:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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