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