ST意法半导体
直播中

贾大林

7年用户 1324经验值
私信 关注
[问答]

DMA在H7设备上不工作怎么解决?

当我在寻找 H7 DMA 数据时,

我看到下面的文章说 DMA 在 H7 设备上不工作。
https://community.st.com/s/article/FAQ-DMA-is-not-working-on-STM32H7-devices

该文章中的解决方案 1 如下所示。

---------------------------------------------- ---------------------------------------------- --------------------------
解决方案示例1:所有内存简单放置到D1域
“必须全局禁用 D-Cache 才能使此解决方案起作用。”
GCC(用于 STM32/Eclipse 的 Atollic TrueStudio/System Workbench)
“用 RAM_D1 替换 DTCMRAM”用于链接描述文件(.ld 文件扩展名)中的部分放置。例如像这样:

。数据 :
{
... /* 保持不变 */
} >RAM_D1 AT> 闪存
---------------------------------------------- ---------------------------------------------- --------------------------

但是,“STM32Cube_FW_H7_V1.9.0/NUCLEO-H743ZI/Examples/ADC/ADC_DMA_Transfer”

例子中DTC MRAM改为RAM_D1(STM32H743ZITx_FLASH.ld),
但是 Main.c 文件是:(第 58 行)

/* 启用 CPU 缓存 */
CPU_CACHE_Enable();

解决方案应该是把DTC MRAM换成RAM_D1,全局禁用D-Cache,但是例子好像不是这样。

哪一个是正确的?







回帖(1)

周睫蒙

2023-1-5 09:55:25
在为 STM32H7 设备使用 DMA 时,应注意内存分配。
大多数 ST 项目使用的默认内存是 DTCM,STM32H7 设备中的 DMA无法访问它。
因此,您应该将其更改为 DTCM 可访问的其他内容(例如 AXI SRAM 0x2400 0000)。请参阅系统架构 部分下的相应参考手册 。
在大多数情况下,这可以解决问题。然而,有时对于更高级的应用程序,D-Cache 会影响 DMA 传输的功能,因为产品 SRAM 的默认缓存策略是普通内存(可缓存)。缓存会将新数据保存在内部缓存中,不会将它们写入 SRAM 内存。然而,DMA 控制器从 SRAM 存储器而不是 D-Cache 加载数据。读取数据时可能会发生相同的行为,因为 DMA 将更新 SRAM 中的缓冲区,并且 SRAM 的内容不会立即对 CPU 可见,因为 CPU 会看到以前缓存的数据。这将导致数据一致性问题。
因此,如果更改内存分配没有解决问题,则必须禁用 D-Cache。但我认为在您的情况下,将内存分配更改为 AXI SRAM(例如)足以解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分