stm32H7DMA串口发送,数据一致性问题

stm32H7DMA串⼝发送,数据致性问题
luciano rivarolaSTM32F7系列芯⽚集成了L1⾼速缓存,即L1 CACHE,包括D-CACHE和I-CACHE。它能够提升CPU访问数据或指令的速度,改善MCU 的性能。关于STM32F7 L1 CACHE的应⽤,有个数据⼀致性问题需要注意,不然编程时可能会遇到些奇怪的现象。adma
在聊这个话题之前,先说⼏个基本概念或术语。
1、芯⽚复位后,I-CACHE,D-CACHE默认是关闭的。可以分别打开或关闭以及配置各⾃⼤⼩。
2、对于STM32F7来说,只有经过AXI总线接⼝访问时才⽤到L1 CACHE。换句话,通过其它总线【TCM/AHBP/AHBS】做数据或指令访问时是不涉及到L1 CACHE的。
3、回写【W RITE B ACK】:在写数据时,只是把数据写进D-CACHE⽽未写⼊⼆级存储器,并将缓存⾏⾥的数据标识为DIRTY,直到执⾏CACHE的清除操作才将D-CACHE⾥的内容写进⼆级存储器。
3、透写【W RITE T HROUGH】:在写数据操作时同时将数据写⼊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;

本文发布于:2024-09-20 21:13:00,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/334231.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   存储器   属性   缓存   致性   问题   操作
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议