你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G4 Flash Erase问题?

[复制链接]
熊紅 提问时间:2021-5-10 18:17 / 未解决
请问为什么HAL库在操作Flash erase的时候,需要把I-Cache和D-Cache关闭呢?
这有什么原因呢? 有人可以解答吗?

收藏 评论11 发布时间:2021-5-10 18:17

举报

11个回答
xmshao 回答时间:2021-5-11 11:02:07
[这你也关注到了,厉害!这里分享下我的看法和理解供你参考。这是出于程序执行的安全考虑比较保险的推荐做法。我们知道CPU运行程序时往往会用到Cachecache里的数据往往来自flash程序。如果说Cache里的内容刚好是你即将擦除的内容,如果不做Cache的清空操作,Flash擦除或编程后CPU可能继续从cache里取数据执行,这时就可能出现问题,因为既然擦除了或重新编程了,代码运行不该还跟之前指令扯上关系。为了安全起见,在做FLASH擦除前干脆将Cache清空,下次执行代码时全部重新来,不跟之前Cache里的东西有啥瓜葛。所有就有你提到的操作或类似操作。]*

奇迹 回答时间:2021-5-11 07:58:06
I-Cache和D-Cache是取命令以及取数据的加速的方式,而操作flash时如果打开有可能出现还没擦完然后就开始向里面写的问题。
熊紅 回答时间:2021-5-11 09:43:47
奇迹 发表于 2021-5-11 07:58
I-Cache和D-Cache是取命令以及取数据的加速的方式,而操作flash时如果打开有可能出现还没擦完然后就开始向 ...

操作flash时如果打开有可能出现还没擦完然后就开始向里面写的问题
Q:  请教,上面那段话,在什么时候会发生这个情况呢?
熊紅 回答时间:2021-5-11 14:37:33
xmshao 发表于 2021-5-11 11:02
[这你也关注到了,厉害!这里分享下我的看法和理解供你参考。这是出于程序执行的安全考虑比较保险的推荐做 ...

Hi, 你好,想再请教一下,若是我的App一开始只规划在0x08000000~0x08003FFF的flash记忆体区块执行程序,若我去Erase 0x08004000~0x08007FFF的Page,这样我还需要Disable I-Cache和D-Cache吗?
熊紅 回答时间:2021-5-11 20:50:16
xmshao 发表于 2021-5-11 11:02
[这你也关注到了,厉害!这里分享下我的看法和理解供你参考。这是出于程序执行的安全考虑比较保险的推荐做 ...

Hi 您好,我想再请教一下,如果我的APP规划只在0x08000000~0x08003FFF的flash区块执行程序,而我去对0x08004000~0x08005FFF的page执行Erase,还需要关闭I-Cache和D-Cache吗?
熊紅 回答时间:2021-5-11 20:50:39
Hi 您好,我想再请教一下,如果我的APP规划只在0x08000000~0x08003FFF的flash区块执行程序,而我去对0x08004000~0x08005FFF的page执行Erase,还需要关闭I-Cache和D-Cache吗?
奇迹 回答时间:2021-5-11 22:22:40
熊紅 发表于 2021-5-11 09:43
操作flash时如果打开有可能出现还没擦完然后就开始向里面写的问题
Q:  请教,上面那段话,在什么时候会发 ...

cache本身是一段内存,随着芯片主频的提升,flash的速度要远慢于主频。聪明的工程师们就想到了预加载的方式来提高程序的运行速度,也就是cache,程序逻辑变成了先把预测到即将要使用的代码以及数据拷贝到cache中,然后运行的时候优先去cache中去找,如果没找到再去flash中找。也就是为啥跳转次数很多的代码的效率不如跳转次数少的代码的原因。既然有个预加载,就有可能出现数据被拷贝到cache中,但是实际flash的数据已经被修改了。这样就会产生不对应导致错误。因此在特定的代码运行时需要清空或者关闭cache。
xmshao 回答时间:2021-5-12 10:49:56
熊紅 发表于 2021-5-11 20:50
Hi 您好,我想再请教一下,如果我的APP规划只在0x08000000~0x08003FFF的flash区块执行程序,而我去对0x08 ...

你也不必太过纠结这个地方。即使在擦除操作时关会也无所谓,对你代码运行没啥影响,
一般来讲【除非双BANK],擦除时程序并不被执行。 如果说待擦除的地方跟当前代码运行
肯定扯不上任何关系,不关清也没关系。
熊紅 回答时间:2021-5-12 13:50:26
xmshao 发表于 2021-5-12 10:49
你也不必太过纠结这个地方。即使在擦除操作时关会也无所谓,对你代码运行没啥影响,
一般来讲【除非双BAN ...

您好,我就是刚好有Dual Bank的需求,才会关心这个问题。
我需要对固件实现在线更新,当前APP在BANK 1执行,要更新固件时,会去擦除BANK2的Flash,此时擦除Flash时,HAL Flash的API去关掉I-Cache和D-cache会影响到,我Bank1的程序执行时间,最危险的情况可能会导致快速中断程序执行不完。
若我在Bank1执行程序,擦除Bank2的Flash需要关闭I-Cache, D-Cache吗? 我不会在线交换Bank1和Bank2的Flash。

熊紅 回答时间:2021-5-17 10:20:06
Hi ST,有人可回答我以下问题吗? Thx

您好,我就是刚好有Dual Bank的需求,才会关心这个问题。
我需要对固件实现在线更新,当前APP在BANK 1执行,要更新固件时,会去擦除BANK2的Flash,此时擦除Flash时,HAL Flash的API去关掉I-Cache和D-cache会影响到,我Bank1的程序执行时间,最危险的情况可能会导致快速中断程序执行不完。
若我在Bank1执行程序,擦除Bank2的Flash需要关闭I-Cache, D-Cache吗? 我不会在线交换Bank1和Bank2的Flash。


奇迹 回答时间:2021-5-19 10:52:20
熊紅 发表于 2021-5-17 10:20
Hi ST,有人可回答我以下问题吗? Thx

您好,我就是刚好有Dual Bank的需求,才会关心这个问题。

建议关闭,因为不知道ST Cache加载的规则。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版