早上好
我们正在使用STM32H7同时采集3个16位@ 5MSPS ADC通道,并将数据存储在外部eMMC中。一切都值得无缝地如下: 3个具有3个DMA的从SPI至内部触发器/缓冲器; MDMA将数据交织到2个触发器eMMC缓冲区中; eMMC外围设备的SDMMC的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吗?
最好的问候, 克莱姆特
答案 0 :(得分:2)
看看数据表,我认为内部闪存不适合任务。
因此,写入266位(32字节+ ECC)需要100-200微秒。大约为2.66 Mbits / s,远不及您的传入数据速率。然后,必须先擦除闪存扇区,然后再使用,对于128 KB的块,这需要 seconds 。最重要的是,您可以预期仅经过10000次写入循环,闪存就会开始磨损。
答案 1 :(得分:0)
将数据保存到SRAM,然后就可以对FLASH进行编程了。如果需要存储大量数据,则需要外部S(D)RAM。
答案 2 :(得分:0)
感谢P__J__和berendi的反馈。 在给定时序的情况下,在内部闪存中数据记录ADC值实际上似乎是一个不好的解决方案。我们将在内部闪存中记录内部监测值(电压,温度)(不强制使用CPU,DMA)和eMMC中的RAW ADC值等边值。我们正在努力通过调整eMMC的缓存设置来减少等待时间,以提高采样率,但到目前为止还没有定论。
谢谢, 克莱门特。