OpenEdv-开源电子网

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

FLASH擦除期间,必须禁止数据缓存

[复制链接]

40

主题

137

帖子

0

精华

高级会员

Rank: 4

积分
581
金钱
581
注册时间
2019-8-4
在线时间
187 小时
发表于 2021-1-11 15:29:33 | 显示全部楼层 |阅读模式
25金钱
编程与缓存
如果 Flash 写访问涉及数据缓存中的某些数据(缓存中的数据是什么呀)Flash 写访问将修改 Flash 中的数据和缓存
中的数据。
如果 Flash 中的擦除操作也涉及数据或指令缓存中的数据,则必须确保在代码执行期间访问
这些数据之前将它们重新写入缓存。如果无法可靠执行这一操作,建议将 FLASH_CR 寄存
器中的 DCRST ICRST 位置 1,以刷新缓存。
[size=10.2741pt]注意:
I/D [size=10.2741pt]缓存只有在被禁止 (I/DCEN = 0) [size=10.2741pt]的情况下才能刷新。
[size=10.2741pt]

[size=10.2741pt]以上为F4中文参考手册看到的,有谁能解释一下
[size=13.6988px] FLASH_DataCacheCmd(DISABLE);//FLASH擦除期间,必须禁止数据缓存

最佳答案

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

背景知识 对于现代CPU来说,Flash是非常非常慢的器件,但又不得不把指令放到Flash中固化保存。 芯片运行时,需要一条一条地从Flash中读取指令或数据,然后执行,一条指令一般2字节或4字节,如果每执行一条指令就去访问一次Flash,那CPU基本就一直在读取Flash了。 因此诞生了cache技术,就是在CPU附近放置一小块高速内存(cache)。CPU想去读取Flash前先看看cache中有没有:如果有(cache hit),则直接从cache读取到立即返回;如 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2021-1-11 15:29:34 | 显示全部楼层
背景知识
对于现代CPU来说,Flash是非常非常慢的器件,但又不得不把指令放到Flash中固化保存。
芯片运行时,需要一条一条地从Flash中读取指令或数据,然后执行,一条指令一般2字节或4字节,如果每执行一条指令就去访问一次Flash,那CPU基本就一直在读取Flash了。
因此诞生了cache技术,就是在CPU附近放置一小块高速内存(cache)。CPU想去读取Flash前先看看cache中有没有:如果有(cache hit),则直接从cache读取到立即返回;如果没有(cache miss),则必须要去Flash中读取进来,但不同的是它会一次性读取好多(取决于算法),存到cache中以供后续可能会使用,由于flash的特性,连续读取多个字节需要的时间并不会增加很多,因此本次取数据虽然慢了一点点,但下一次将会快非常多。
在STM32中,这个cache容量是 64*128bits指令chache,8*128bits数据cache,别看就这么一点点,对于提速CPU已经非常非常有用了。
flash-cache.png
那么可能还会有问题:如果你一次性读取好多,但下次比如说CPU跳转到很远的地方去了,你预先读出来的东西不就没用了?是的。但现代CPU有一个技术叫分支预测,准确度已经达到很高了,关于cache还要非常多的理论知识和算法,这些都是对于软件工程师屏蔽的,无形之中提高CPU速度,一些高阶的软件工程师会尽量将经常要执行的代码(比如频繁执行的for循环)放到一条cache line里面去,这样就能保证每次cache都处于命中状态,提高代码执行速度,这,已经是面向CPU级别的代码优化了,普通的程序员很难接触到这些。



说了那么多,以上的情况都是只有CPU一个人去访问Flash,那么cache就不会有一致性问题。
如果你同时又调用Flash控制器,把Flash擦除或者改写,那么同时就会有CPU和Flash控制器两个人去访问Flash内容,这是cache里面的数据就不可预料了(cache dirty),这时最佳的办法就是暂时关闭cache功能。
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2021-1-12 02:24:44 | 显示全部楼层
你这是有CACHE的情况吧?
回复

使用道具 举报

40

主题

137

帖子

0

精华

高级会员

Rank: 4

积分
581
金钱
581
注册时间
2019-8-4
在线时间
187 小时
 楼主| 发表于 2021-1-12 08:52:30 | 显示全部楼层
正点原子 发表于 2021-1-12 02:24
你这是有CACHE的情况吧?

探索者板子用那个flash模拟EEPROME例程,拿来用的时候不小心把FLASH_DataCacheCmd(DISABLE)屏蔽了,出现了问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-25 15:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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