闪存自编程期间,ARM Cortex M的CPU是否停止?


8

大多数ARM Cortex M MCU不具有EEPROM存储器。取而代之的是,可以将持久性数据写入也保存该程序的同一闪存中。

  • 在此擦除/写入过程中,CPU的状态是什么?
  • 会停止吗?是否保持正常运行?
  • CPU的行为是否取决于所使用的特定MCU系列(例如STM32,Kinetis L)?

(在某些人看来,这可能是一个愚蠢的问题,但是Microchip的PIC16在闪存自编程期间将CPU暂停最多40ms。)


您有关于PIC16暂停的参考吗?
Daniel Grillo

@Wouter哪一个?您是否测试了它,例如说完全在RAM中执行了一个中断?
starblue

2
与我在从用户手册中阅读之前的评论相反,NXP芯片似乎在“应用程序内编程”期间仅禁用了闪存接口,因此在闪存擦除或写入期间可能完全从RAM运行中断。但是,在这个大不可行的领域,我可以想象一下,如果中断花费大量时间,就会出现时序问题,从而影响闪存的耐用性。
Wouter van Ooijen

是的,它们没有eeprom,但是,在这种情况下,诸如ST32之类的Cortex-M具有备份寄存器,您可以在其中保存有关PIC16的信息,我认为这很有趣。请提及您有关PIC16的消息。(数据表?)
Roh 2013年

@Wouter是的,时间安排可能是个问题。除了LPC8xx,“将RAM复制到闪存” IAP命令以时钟频率为参数,因此我怀疑它们使用了简单的延迟循环。
starblue 2013年

Answers:


4

核心的行为确实取决于实现。Flash不是ARM核心不可或缺的,因此,每个供应商都以不同的方式实现它。通常,在擦除/写入过程中,将从RAM执行,并且不应影响执行。

在STM32上,我相信在进行擦除/写入周期时会从闪存停顿中读取数据。这将导致内核的执行停止,直到操作完成。对于某些闪存配置,我相信您可以继续执行/读取闪存,并且只有当您访问要擦除/编程的闪存部分时,它才会停止。

我使用了其他Cortex M,在修改闪存内容时必须从RAM中执行,否则会遇到总线故障(如果总线故障/硬故障处理程序在闪存中,则可能会导致系统崩溃)。一些带有大量闪存的微控制器将其实现为两个独立的闪存阵列,这些微阵列通常允许完全访问其中一个存储体,同时在另一存储体上进行操作。

您需要参考特定部分的文档,以查看修改Flash内容时执行的限制。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.