硬汉嵌入式论坛

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

[Flash] 关于flash区域cache

[复制链接]

39

主题

1516

回帖

1638

积分

至尊会员

积分
1638
发表于 2024-10-18 15:23:19 | 显示全部楼层 |阅读模式
V7-049_内部Flash模拟EEPROM.rar     这个例程看着没考虑cache对读写flash的影响,不太严谨。如果不考虑的话,多次读取flash的同一片地址,实际上读取的是cache的内容,并不是真正flash里面的值,如果中途插入擦除函数,一定会造成数据不一致,项目使用上面需要注意这个造成的数据不一致。

解决方案:可以把FLASH区域的cache强制关闭(上电默认是WT模式),或者每次读之前,无效化一下cache

评分

参与人数 1金币 +2 收起 理由
年轻人讲码德 + 2 赞一个!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117564
QQ
发表于 2024-10-19 09:25:56 | 显示全部楼层
我之前也发现这个问题,MDK调试组件和调试器读取Flash,Cache命中的情况下,都是Cache里面的值,

测试发现如果Flash开启了指令Cache,H7-TOOL通过SWD访问常数变量,也会有影响
https://forum.anfulai.cn/forum.p ... 9620&fromuid=58
(出处: 硬汉嵌入式论坛)

所以读取前,加个SCB_CleanInvalidateDCache靠谱
回复

使用道具 举报

39

主题

1516

回帖

1638

积分

至尊会员

积分
1638
 楼主| 发表于 2024-10-19 22:47:43 | 显示全部楼层
eric2013 发表于 2024-10-19 09:25
我之前也发现这个问题,MDK调试组件和调试器读取Flash,Cache命中的情况下,都是Cache里面的值,

测试发 ...

实际上就是cache导致的。把flash区域的cache关闭即可。这样不知道会不会读取指速度造成影响
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117564
QQ
发表于 2024-10-20 10:40:50 | 显示全部楼层
sanit 发表于 2024-10-19 22:47
实际上就是cache导致的。把flash区域的cache关闭即可。这样不知道会不会读取指速度造成影响

不要关闭,因为内部的FLASH无延迟满速运行是70MHz左右,远低于CPU主频,需要Cache加速。

如果仅仅是简单的模拟EEPROM,使用SCB_CleanInvalidateDCache方便。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-14 21:34 , Processed in 0.039734 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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