0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

stm32案例分享之使D-CACHE时FMC外设运行不正常原因

STM32单片机 来源:互联网 作者:佚名 2017-10-30 15:45 次阅读

前言

前段时间某客户反馈,在使用STM32H7的FMC时,如果使能了D-CACHE就运行不正常。数据没有写到FMC外部的存储器里,FMC接口也没有波形。而不使能D-CACHE是工作则是正常的。

其实对于这个问题,如果了解STM32H7的架构的话,就很容易理解了。下面我们就来看一看到底是什么原因让客户觉得使能DCACHE后FMC就工作不正常了。

STM32H7的架构

下面是STM32H7架构图中和FMC相关的部分。从图中可以看到,STM32H7是基于Cortex-M7内核,在内部的Cortex-M7内核里带有一个16KB的D-CACHE和一个16KB的I-CACHE。内核通过AXIM总线连接到64位的AXI总线矩阵,再经过这个总线矩阵连接到FMC接口实现对外部存储器的访问。这里,当D-CACHE使能的时候,对FMC接口上的存储器的操作会用到内核的缓存(CACHE)的。

使能了CACHE的好处就是可以提高内核访问存储器的速度。为什么使用缓存能提高速度呢?是因为在操作可以被缓存的存储器的时候,内核不是每次都去直接操作这些存储器,而是从缓存里读取数据,或者将数据先写到缓存里。看到这里,是不是觉得和前面客户说的现象有点联系了。

Cache的操作

简单的说缓存工作时有两种方式:回写和透写。

回写【write back】就是数据平时只写到缓存【cache】,必要时才同步到下一级存储器中。

透写【write through】就是数据每次都同时写到缓存和下一级存储器中。这种方式可以解决数据不一致的问题,但同时也会消耗更多的总线访问时间。

缓存的操作方式,在启用缓存后有一个默认的设置 。也就是下面这张表:

请参考AN4839了解更多的关于Cache的使用说明。

问题分析及解决

客户是通过FMC的NOR存储控制器外接一个FPGA。映射的地址范围是0x60000000~0x7FFFFFFF。从上图可以看到,它默认的缓存操作方式是WBWA(回写写分配)。也就是说,当打开DCACHE后,所有对该地址范围的操作都会先到缓存。这也解释了为什么客户发现数据没有真正写到外部存储器中。客户的数据需要实时写到FPGA中进行计算。所以对这个应用场景,回写的设置就不合适了。

对于客户的这个应用,可以通过MPU来进行配置,将0x60000000~0x7FFFFFFF范围地址的CACHE设置为透写的方式,这样数据就会实时的写到FPGA中去了。所以,针对这种情况,我们可以通过MPU合理配置来解决。

通过MPU,可以配置不同存储器空间的访问权限和Cache策略。HAL库里面提供了对应的函数和例程,参照例程用下面这段代码就可以解决客户的问题了。数据每次都是直接写到FPGA中,而不是缓存到内核的DCACHE中。

总结

D-CACHE的使用可以帮我们提高程序运行的性能,但也会带来缓存和二级存储器数据不一致和缓冲不击中带来的程序执行的时间不确定的情况,需要客户根据实际的应用来进行选择。对于实时性要求高的数据,可以像前面一样使用MPU配置成透写的方式,或者将数据放到DTCM RAM中。另外,在本文中只用MPU配置了FMC映射的部分存储区域。在实际使用中,应该对所有用到的存储空间(比如Flash, SRAM区)的属性根据实际情况进行合理配置,以免引起其它的问题。详情请参考AN4838.

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • D-CACHE
    +关注

    关注

    0

    文章

    1

    浏览量

    1015

原文标题:使能D-CACHE时FMC外设运行不正常的案例

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    stm32H747在M4内核使用AXI SRAM不正常原因

    ,断电重启之后也不正常不正常的现象是2个内核里面的点灯程序都无法运行,感觉是哪里死掉了一样。在M7内核里已经配置了MPU和cache。在map文件看到数组开辟的起始地址确实是0x24
    发表于 03-28 09:20

    JTAG能烧写,程序运行不正常

    AS口,可以正常烧写程序,但上电程序没运行,conf_done位低电平,接了10上拉电阻也没用,估计没正常复位,到底什么原因了,焊了两块板也是一样的问题现在情况是:JTAG能烧写,程序
    发表于 08-03 11:04

    STM32串口发送不正常原因?如何解决?

    STM32串口发送不正常原因?如何解决?
    发表于 12-09 07:50

    启用D-Cache的TouchGFX 4.16.1发生硬故障如何处理

    你好,我有一个带有 stm32h743 的自定义板...我设计了一个带有 touchGFX 的图形页面,当启用 D-cache 时,系统检测到一些硬故障,特别是当我触摸一个按钮来更改屏幕时,有时它可以工作,有时却不能,当我禁用 D-ca
    发表于 12-26 09:45

    不正常自行放电原因

    不正常自行放电原因         极板材料或电解液有杂质,这样杂质与极板或不同杂质间就会产生电位差,形成闭合的“局部电池”而产
    发表于 11-10 15:21 586次阅读

    自架电子邮件系统收发不正常的几种原因

    自架电子邮件系统收发不正常的几种原因 1.DNS 服务器的设置不对。   2.DNS 服务器不正常工作。   3.MX 记录不对或者没有刷新
    发表于 01-29 11:10 673次阅读

    STemWin_Library_V1.1.1 中 STM324x9IEVAL 的 RTOS 工程显示不正常的问题

    STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题
    发表于 12-14 16:02 0次下载

    不正常关电脑会怎样

    本视频主要详细介绍了不正常关电脑会怎样,分别有硬件损坏、系统影响、损坏磁盘、导致数据丢失。
    的头像 发表于 03-12 16:29 3376次阅读

    交流接触器吸合不正常原因有哪些

    交流接触器吸合不正常,是指交流接触器吸合过于缓慢,触头不能完全闭合,铁芯发出异常噪声等不正常现象。交流接触器吸合不正常,可能是以下几个原因
    的头像 发表于 04-11 11:21 1.6w次阅读

    STM32上电复位不正常 手动复位正常原因资料下载

    电子发烧友网为你提供STM32上电复位不正常 手动复位正常原因资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,
    发表于 04-25 08:42 38次下载
    <b class='flag-5'>STM32</b>上电复位<b class='flag-5'>不正常</b> 手动复位<b class='flag-5'>正常</b>的<b class='flag-5'>原因</b>资料下载

    STM32H7的FMC外设在D_Cache使能的情况下运行不正常

    STM32H7的FMC外设在D_Cache使能的情况下运行不正常(大工20春电源技术在线作业3)
    发表于 08-04 18:19 13次下载
    <b class='flag-5'>STM32</b>H7的<b class='flag-5'>FMC</b><b class='flag-5'>外设</b>在D_<b class='flag-5'>Cache</b>使能的情况下<b class='flag-5'>运行</b><b class='flag-5'>不正常</b>

    关于STM32串口烧录后程序正常运行,但是掉电或复位后程序不正常运行的可能解决方法。

    关于STM32串口烧录后程序正常运行,但是掉电或复位后程序不正常运行的可能解决方法。 BOOT0 BOOT1
    发表于 12-14 18:52 20次下载
    关于<b class='flag-5'>STM32</b>串口烧录后程序<b class='flag-5'>正常</b><b class='flag-5'>运行</b>,但是掉电或复位后程序<b class='flag-5'>不正常</b><b class='flag-5'>运行</b>的可能解决方法。

    常见电机由机械故障引起的不正常声音有哪些

    首先应判断是机械还是电气的原因引起的? 方法是:接上电源,有不正常的声音存在,切断电源,不正常声音仍存在,则为机械故障;否则为电气方面故障。
    发表于 02-17 10:35 1399次阅读

    普源数字示波器-示波器辉度控制不正常排查

    调暗,或者波形的辉度暗淡,不能调亮;基至显示不出波形,即无法调亮。根据电子示波器的基本电路结构可知,产生辉度控制不正常的故障原因有两个方面,一种是示波器本身有问题,另一种是示波器的高压电路有问题,兹分述其检修方法与步骤如下。
    的头像 发表于 03-02 16:31 916次阅读
    普源数字示波器-示波器辉度控制<b class='flag-5'>不正常</b>排查

    自举电路不正常工作

    电路不正常工作可能会表现为无法正确启动设备,也可能会导致设备启动后运行不稳定,甚至直接崩溃。针对这种情况,我们需要仔细排查问题,找到原因并进行修复。下面就让我们一起详细地了解一下自举电路不正常
    的头像 发表于 09-17 09:44 561次阅读