gio*_*r91 4 c embedded flash-memory dma stm32f4
我使用的是 stm32f40x 微控制器 (UC),我必须使用其内部闪存来存储一些数据。写操作,如你所知,非常慢,占用UC很长时间。所以我想到了 DMA,这里是问题:
是否可以使用DMA将数据从SRAM传输到FLASH?
感谢您的时间。
简而言之:不。至少不是一种有用的方式。
更长:写flash的慢不是CPU太慢造成的,而是写flash内存的页写周期太慢造成的。(因此,DMA 并没有更快)。理论上您可以使用 DMA 写入闪存(即使这有点棘手并且有很多陷阱),但您不会获得任何速度。原因是,当 CPU 在写入时尝试访问闪存时,它会被暂停。因此,当 DMA 写入代码时,CPU 将无法从那里执行代码 - 没有时间。
手册上说:
在写入或擦除 STM32F4xx 上的 Flash 存储器时,任何尝试读取它都会导致总线停顿。编程操作完成后,将正确处理读取操作。这意味着在写/擦除操作正在进行时无法执行代码或数据提取。
这意味着在 DMA 运行时从任何闪存区域执行代码是不可能的 - CPU 将在该时间段内暂停。但是,您可以使事情变得更加复杂,并将部分代码复制到 RAM 以在那里执行以解决此问题。
某些 F4 系列具有 4k 的电池供电 RAM。使用它,它会更快,更容易处理。