STM32H7上的MDMA和内部FLASH R / W.

问题描述 投票:1回答:3

早上好,

我们使用STM32H7同时采集3个ADC通道16位@ 5MSPS,并将数据存储在外部eMMC中。所有值得无缝的如下:3个slave-SPI,3个DMA到内部触发器/缓冲器; MDMA将数据交织到2个触发器eMMC缓冲器; IDM是eMMC外设的IDMA。我们有一些意外的等待时间由eMMC引入,需要在内部缓冲比预期更多的数据,因为我们没有足够的内部RAM来缓冲eMMC等待期间(并且不能在FMC上添加外部RAM,或者在Quad上添加nvSRAM) -SPI,......由于集成限制),我们研究了使用MDMA和内部FLASH存储器暂时缓冲数据。这是个坏主意吗? STM32H7上的FLASH分为2个存储区,第一个可用于程序存储器(因此在DMA访问期间没有冲突和处理器暂停),并且有2个AXI控制器,MDMA也是AXI外设...可能过慢?你有没有试过这个?

在阅读参考手册(第13章:MDMA控制器(MDMA))时:

主直接存储器访问(MDMA)用于在存储器和存储器之间或外围设备和存储器之间提供高速数据传输。 MDMA可以快速移动数据,无需任何CPU操作。这可以使CPU资源免于其他操作。

但MDMA可能只能将数据从AXI移动到AHB或AHB到AXI,而不是AXI到AXI?

最好的问候,克莱门特

stm32 dma flash-memory amba
3个回答
2
投票

看一下数据表,我不认为内部闪存可以胜任这项任务。

H743 Flash memory programming

因此,写入266位(32字节+ ECC)需要100-200微秒。它大约是2.66 Mbits / s,远不及您的输入数据速率。然后必须在重新使用之前擦除闪存扇区,这对于128 KB的块需要几秒钟。最重要的是,在10000次写入周期后,您可以预期闪光灯开始磨损。


0
投票

将数据保存到SRAM,然后您可以实际编程FLASH。如果需要存储大量数据 - 将需要外部S(D)RAM。


0
投票

感谢P__J__和berendi的反馈意见。鉴于时间安排,对于在内部闪存中对ADC值进行数据记录,它实际上似乎是一个糟糕的解决方案。我们将记录侧面值,例如内部闪存中的内部监控值(电压,温度)(CPU,DMA不是必须的),以及我们eMMC中的RAW ADC值。我们正在努力通过调整eMMC的缓存设置来缩短等待时间以提高采样率,但目前尚无定论。

谢谢,克莱门特。

© www.soinside.com 2019 - 2024. All rights reserved.