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

【经验分享】STM32F2xx / STM32F4xx DMA最大传输问题

[复制链接]
STMCU小助手 发布时间:2021-12-3 16:00
以下是译文,有误之处欢迎提出。: S  K# e  {9 `0 ~0 x
从我们所看到的情况来看,似乎只要在任何时候发生2次DMA传输,或者看起来有3个同时的DMA传输将导致随机错误。
; Y' X& l2 R' I% Y3 q* t" l& Y我们一直在使用STM32F207和STM32F407处理器,一直在同时执行3个DMA。具体来说:从DCMI端口接收数据,从ADC接收数据以及接收或发送数据到SDIO端口(SD卡)。我们看到发生的事情是:
  f+ A5 j' D; a( W2 Z6 ~4 c4 r2 Q有时候SDIO传输只会在中途停止,没有错误,并且卡不忙。数据传输没有明显的原因停止,但它会。查询SDIO状态寄存器SDIO_STA指示其发送FIFO为空(在写入SD卡的情况下)并且它处于传输中。
+ c( s/ x+ ?. M; |0 u9 [ADC有时会报告ADC超限错误,这应该是不可能的。随着ADC数据通过DMA读出,完全在任何软件控制之外,它不应该溢出,但有时候会。
: G/ {4 S, l; j7 j/ S6 v我们最初将这些行为归结为外设错误,但有一天我们注意到当关闭DCMI端口时问题就没有了。很令人费解。进一步的调查发现,如果这3个外设中只有2个外设正在运行,我们就没有这个问题,这产生了一个疑问:“这3个外设之间存在的问题是什么?”,很显然答案是DMA,在这种情况下,具体是DMA2。. f+ u0 v4 s  f# a8 {
我们的理由是,当一个外设需要一个DMA服务时,它会产生一个标志,导致DMA为该外设提供服务,无论是通过写入数据还是从中读取数据,如果3个外设同时产生标志,可能会发生其中一个被“永久忽略”的情况。它没有得到响应,在ADC的情况下,这会导致溢出。在SDIO的情况下,这会导致它最终将FIFO清空(写入SD卡时)。在DCMI的情况下,我们看到了一些明显的错误,但很难确定。
0 U3 {/ F% b  b- H" H8 {- r- c5 k7 f基于这种理论认识,我们在2011年11月初将测试案例列举出来(在F2x和F4x上),并将其发送给ST。我们在12月初看到他们已经查看了该问题,但我们后续没有听到任何声音。9 R4 d$ A9 @  O; W
到12月底,我与另一家使用SMT32F2xx的公司进行了交谈,他们碰巧提到了一个类似的问题,他们也有3个DMA同时运行,它们是:SPI,USART和SDIO。与我们不同,他们分布在DMA1和DMA2上。然而,里面不明原因的数据中断的基本症状是相同的。
6 u, I. j+ r, W5 m; L, o& U: A基于这一切,我只能假设来自任何1个DMA控制器或2个DMA控制器或者 3个同时DMA都可能产生这个问题。4 W  P. n1 @/ a2 G8 G
在我们的例子中,我们采用了带宽最低的外设,即ADC,并将其移至中断运行状态。由于STM32F407 ADC没有内部FIFO,因此它可以非常容易地溢出,因此它的中断必须处于最高优先级并且被允许抢占中断。由于我们已经完成了这3个外设都正常工作。
4 Q7 D0 n1 _6 w$ ^+ @7 r$ _我需要再次强调,我们相信发生的事情不过是一种基于我们所看到的症状的理论。虽然ST已经确认看到了这些症状,但他们没有提供任何有关实际情况的信息,所以我们在一定程度上是在摸黑走。我可以有把握地说,你会非常明智地将同时DMA的数量限制为2,至少在ST提供更多关于实际造成这种情况的信息之前。2 ~) V8 D# ~" w6 L
2012年6月更新:
7 t; j0 A8 z1 O. j1 H4 l# V* Y# e2012年1月,ST在他们的用户论坛上提供了回复:
1 ^8 f/ Q) s3 H1 w6 u它没有回答所有的问题,但似乎表明问题不在于DMA的数量,而在于DMA2。他们表示:5 j5 l" F6 g4 J: v9 N
*我们确认您的发现,这是一个仅涉及我们DMA2的限制,以下是详细说明:
  n) g5 }7 \; y3 z& q当以并发方式管理AHB和APB2外设时,DMA2控制器可能会破坏数据。; X: [7 I8 m1 `
说明:9 F, H) D  o3 A. ^* D7 ]& Y/ M) p
这种情况对于嵌入FIFO的外设很重要,并且会产生数据损坏。对于闪存来说,影响是多重访问,但数据没有被破坏。嵌入式FIFO的AHB外设是DCMI,CRYPT,HASH。在没有CRYPTO的STM32F2 / 40xx上,只有DCMI受到影响。
' d; ^0 m9 }0 C) {3 Q含义:, s- U, s4 T; J# N( j: {
DMA传输到AHB外设的数据在FIFO目标的情况下可能会损坏,或者在访问存储器的情况下可能会多次访问。
7 R* ]! c) `! A3 }" e1 L解决方法:0 s. ~  A& j# l. W
避免使用DMA2进行并发AHB和APB2传输。可以使用以下方法之一来解决该问题:
7 B! ]. t+ ]/ e) {- k( A5 x如果DMA2用于管理AHB外设(DCMI,CRYPT,HASH),则可以使用Cortex-M CPU管理APB2外设。
/ q% p2 n8 K4 \8 C2 o如果使用DMA2来管理APB2外设,我们可以使用CPU来管理AHB外设(DCMI,CRYPT,HASH)。
  c6 d9 p; Z' g) [: \
收藏 评论0 发布时间:2021-12-3 16:00

举报

0个回答

所属标签

相似技术帖

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