文档章节

stm32 H7 DMA 串口发送,数据一致性问题

青春无极限
 青春无极限
发布于 04/23 11:43
字数 1222
阅读 49
收藏 0

 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;

 

https://blog.csdn.net/lu_embedded/article/details/78416041 这篇也讲的很透彻,从系统层讲的很细

 

本文转载自:http://www.51hei.com/bbs/dpj-51303-1.html

下一篇: DMA串口中断
青春无极限
粉丝 2
博文 129
码字总数 71498
作品 0
卢湾
程序员
私信 提问
STM32 串口采用DMA方式收发

转载:http://blog.csdn.net/gdjason/article/details/51019219 一直都没有整理STM32 DMA应用,这篇文章算是抛砖引玉吧,欢迎拍砖。 本人QQ 330952038,欢迎交流学习 什么是DMA —- Directi...

zn2016
2018/01/11
0
0
串口使用DMA发送数据时的数据覆盖问题

在STM32等单片机中,为了提高程序的执行效率,在使用串口时,经常会使用DMA的方式来进行收发数据,这样,CPU只需要把数据放在发送缓存区即可离开。 但是,由于在串口发送中使用的是引用调用,...

qq_40452910
2018/04/20
0
0
STM32串口接收不定长数据原理与源程序

转载:http://blog.csdn.net/u014515202/article/details/73293917 http://www.51hei.com/bbs/dpj-39885-1.html 方法1:串口接受数据,定时器来判断超时是否接受数据完成。 方法2:DMA接受+...

u013184273
2017/12/13
0
0
STM32 USART串口DMA 接收和发送流程详解

https://blog.csdn.net/weibo1230123/article/details/80506484 1.dma发送流程 1.配置DMA发送中断 - NVIC_Init 2.配置串口中断 - NVIC_Init 3.GPIO配置 - GPIO_Init 4.DMA发送配置 -DMA_Ini......

青春无极限
07/16
45
0
STM32 之 HAL 库串口(USART/UART)驱动 BUG 及解决方法

版权声明:进步始于交流,收获源于分享!转载请保留原文出处,谢谢! https://blog.csdn.net/ZCShouCSDN/article/details/84768101 问题 在使用HAL库的串口部分时,发现了有以下6个比较严重B...

ZCShouCSDN
2018/12/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
24分钟前
3
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
25分钟前
3
0
HTML5+CSS3从入门到精通 中文pdf版​

本文转载于:专业的前端网站➵HTML5+CSS3从入门到精通 中文pdf版 HTML5+CSS3从入门到精通是通过基础知识+中小实例+综合案例的方式,讲述了用HTML5+ CSS3设计构建网站的必备知识,相对于专业指...

前端老手
27分钟前
3
0
聊聊nacos client的ConfigFilterChainManager

序 本文主要研究一下nacos client的ConfigFilterChainManager IConfigFilterChain nacos-1.1.3/api/src/main/java/com/alibaba/nacos/api/config/filter/IConfigFilterChain.java public in......

go4it
33分钟前
4
0
《可复制的领导力:樊登的9堂商业课》读后感

初次接触樊登是在抖音上看他讲企业管理各种道理,讲得头头是道大部分还是认同的,也有一些初次听到的观点,初次印章樊登是有干货的 樊登这本《可复制的领导力:樊登的9堂商业课》是在亚马逊上...

lingch
41分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部