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

坑爹的D-Cache

[复制链接]
bssz1 发布时间:2017-2-24 21:32
串口+DMA接收,总是收不到数据,查了好几天,今天终于找到问题了,居然是D-Cache搞的鬼!!
收藏 2 评论8 发布时间:2017-2-24 21:32

举报

8个回答
bssz1 回答时间:2017-2-26 23:04:28
转帖,原帖见http://www.51hei.com/bbs/dpj-51303-1.html


STM32F7系列芯片集成了L1高速缓存,即L1 CACHE,包括D-CACHE和I-CACHE。它能够提升CPU访问数据或指令的速度,改善MCU的性能。关于STM32F7 L1 CACHE的应用,有个数据一致性问题需要注意,不然编程时可能会遇到些奇怪的现象。
    在聊这个话题之前,先说几个基本概念或术语。
1、芯片复位后,I-CACHE,D-CACHE默认是关闭的。可以分别打开或关闭以及配置各自大小。
2、对于STM32F7来说,只有经过AXI总线接口访问时才用到L1 CACHE。换句话,通过其它总线【TCM/AHBP/AHBS】做数据或指令访问时是不涉及到L1 CACHE的。
3、回写【WRITE BACK】:在写数据时,只是把数据写进D-CACHE而未写入二级存储器,并将缓存行里的数据标识为DIRTY,直到执行CACHE的清除操作才将D-CACHE里的内容写进二级存储器。
3、透写【WRITE THROUGH】:在写数据操作时同时将数据写入D-CACHE和二级存储器。这对于保持数据的一致性有好处,代码编写也相对简单。不过它需要消耗更多的写数据时间。当然,下次访问相同内容时还是可以直接从缓存里读取。跟回写相比,算是一种折衷处理办法。
4、STM32F7片内外各个存储单元的存储属性是通过MPU来配置的。在芯片复位之后,MPU是默认关闭的,此时各存储单元的存储属性遵照如下的默认配置。

    好,那什么时候会发生数据一致性问题?
    当有CPU和其它主设备【如DMA】共同访问某可缓存的二级存储器比方SRAM1,同时该存储器又具有回写属性,此时就可能发生数据一致性问题。因为该存储器的回写属性,导致通过CPU欲写入存储器的数据只是缓冲在CACHE里,而没有及时写入存储器。如果此时DMA访问该二级存储器的话,读到的数据可能跟预期不一致。
    为了避免数据不一致的问题,我们需要做D-CACHE维护操作。一般有如下四种方法:
1、当对一个可缓存的二级存储器做了写数据操作之后,通过软件对D-CACHE进行清除操作,即运行SCB_CleanDCache()。这样将CACHE里的缓存内容写回到二级存储器,比如把那些DIRTY CACHE行的数据写进SRAM1。
2、通过MPU调整可缓存存储器的存储属性,将其CACHE使用方式改为透写模式。这样保证每次写入CACHE里的内容也同时写入二级存储器,比如写进SRAM1。
3、通过MPU调整可缓存存储器的存储属性,将其共享属性改为可共享的【SHAREABLE】。此后该二级存储器将变为不可缓存。
4、通过配置CACR寄存器中的D-CACHE位,强制将所有写操作配置为透写属性。

    当然,跟上面描述相对应的还有一种情形。那就是DMA更新了可缓存存储器比如SRAM1的数据后,CPU再去读SRAM1,此时也会发生数据不一致的问题。因为CPU此时读的数据还是之前CACHE里的旧数据。为了避免这个问题,保证数据的一致,就得在CPU读SRAM1之前通过软件执行CACHE失效操作,这样保证CPU直接从二级存储器比方SRAM1读取数据。

    下面有个关于数据一致性的实例供大家思考。
首先CPU从片上FLASH存储块aSRC_Const_Buffer的128字节常量数据拷贝到SRAM1里的一个名为pBuffer的缓存区。
然后CPU配置并使能DMA执行从内存到内存的传输,将SRAM1里pBuffer缓存区的数据传输到DTCM  RAM的另一个aDST_Buffer缓存区。
最后,CPU将aDST_Buffer缓存区的数据与flash存储块aSRC_Const_Buffer的常量数据进行比较是否一致。

最后小结下,对于STM32F7系列MCU来说,可能发生数据一致性问题需要的几个因素:
1、有CPU和DMA参与数据访问;
2、有被CPU和DMA共同访问的可缓存的带回写属性的物理存储块;
3、开启了D-CACHE;

评分

参与人数 1ST金币 +5 收起 理由
zero99 + 5 赞一个!

查看全部评分

wenyangzeng 回答时间:2017-2-24 21:46:37
好像FSMC驱动TFT也是如此。
酱哒哒 回答时间:2017-2-25 10:19:26
楼主能说说,D-cache具体怎么影响的吗?没遇到过,可以提前留个心
五哥1 回答时间:2017-2-25 13:14:11
这个不懂能详解吗?
zhangxu56726 回答时间:2017-2-25 13:45:57
说明下啊,什么原因?就说解决了
zoomdy 回答时间:2017-2-25 16:23:15
哈哈,用上高档货了,可得好好研究Cache
mark0668 回答时间:2017-2-25 18:42:48
这个也没搞懂,确实有影响
破晓-2024005 回答时间:2018-7-14 22:58:30
还有一种情况,就是如果你这部分的数据是从flash里读到catch里的,这个时候你如果操作了flash里的这部分数据,这个时候catch同样也是不会更新的。

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版