Embedded 一个紧密的环路会破坏微控制器的单元吗;闪光?

Embedded 一个紧密的环路会破坏微控制器的单元吗;闪光?,embedded,microcontroller,rom,busy-waiting,Embedded,Microcontroller,Rom,Busy Waiting,众所周知,闪存的写入耐久性有限,因此读取也可能有上限结论(第3点) 在微控制器上,代码通常存储在闪存中,并通过直接从闪存单元获取码字来执行。(至少在8位微控制器上最常见,一些32位微控制器可能有一些小的缓冲区) 根据特定的代码,可能会非常频繁地访问某个位置,例如,如果在主执行路径上有一些繁忙的循环,例如等待中断(例如,从计时器,将执行同步到固定间隔)。这可能会生成100K甚至更多(读取)平均每秒访问单个闪存单元(取决于时钟和特定代码) 这样的代码真的会破坏它下面的闪存单元吗?(在为微控制器设计代

众所周知,闪存的写入耐久性有限,因此读取也可能有上限结论(第3点)

在微控制器上,代码通常存储在闪存中,并通过直接从闪存单元获取码字来执行。
(至少在8位微控制器上最常见,一些32位微控制器可能有一些小的缓冲区)

根据特定的代码,可能会非常频繁地访问某个位置,例如,如果在主执行路径上有一些繁忙的循环,例如等待中断
(例如,从计时器,将执行同步到固定间隔)。

这可能会生成100K甚至更多(读取)平均每秒访问单个闪存单元(取决于时钟和特定代码)


这样的代码真的会破坏它下面的闪存单元吗?

(在为微控制器设计代码时,是否有必要关注这个特殊问题?例如,系统的一部分将运行数年?当然,闪存可以通过CRC定期验证,但这并不能防止系统发生故障,只是故障更可能发生在控制器中。)LLD方式)

< P>只有擦除/写入会影响存储单元,而不是读取。在设计程序时,不需要考虑读取次数。

不过,编程闪存确实会老化,这意味着电池的值在若干年后可能不可靠。这称为数据保留,主要取决于温度。MCU制造商通常以年为单位指定更糟糕的情况,假设零件保持在规定的最高环境温度下


对于预期寿命长(10年)的产品来说,这是一个值得考虑的问题。,特别是在可能出现高温的环境中。CRC和/或ECC是防止数据保留的一种很好的对策,尽管如果您确实发现某个单元已损坏,它通常只意味着应用程序应关闭到不可恢复的安全状态。

我知道有两种方法可以解决此问题:

1) 一种技术是在系统代码中留出一个常量32位整数变量。然后计算已编译二进制图像的CRC32校验和,并使用ELF编辑器将校验和插入保留变量。 然后,系统软件中的模块将计算应用程序占用的闪存区域上的CRC32,并与“存储”值进行比较。 如果您使用的是GCC,那么链接器可以定义一个符号来告诉您该段停止的位置。此方法可以检测错误,但无法更正错误


2) 另一种技术是使用支持Flash ECC的微控制器。TI销售支持Flash ECC(Hercules系列)的Cortex-R4 MCU。

我怀疑这是一个实际问题。你引用的那篇文章含糊其辞地断言这是可能发生的,但没有支持证据或效果的量化。引言中有一个模糊的、不受支持的和未量化的参考:

[…]由于擦除/写入(甚至只是读取,尽管衰减较慢),闪存会随着时间的推移而退化[…]

然后在结论中再次指出:

  • 我们没有检查读取的闪烁衰减,但读取也会导致长期衰减。看看我们是否能读到足够多的时间导致失败,这将是一件有趣的事情
作者可能指的是NAND闪存中的读取干扰,但微控制器不使用NAND闪存进行代码存储/执行,因为它不是随机访问。读取干扰不是永久性影响,擦除和重新写入受影响的块可恢复耐久性。NAND控制器保持块的读取计数,并根据需要自动复制和擦除块。他们还使用ECC来检测和纠正错误,并识别“写磨损”区域

长期的“点滴腐烂”是有可能的,但我怀疑它是否是由阅读而不仅仅是衰老造成的


大多数RTOS系统将其大部分处理时间花费在一个无所事事的空闲循环中,并且一年365天24/7愉快地运行。一些处理器支持等待中断指令,该指令将CPU停止在空闲循环中,但决不是全部,而且不使用这种指令并不少见。带有闪存加速器或缓存的处理器也可能会阻止从单个位置进行连续快速提取,但这也不是所有微控制器的问题

我从来没见过这样的事。我只尝试过超越写周期,开发板在数千次写周期之后就磨损了。在我的工作中,我们部署了已经运行了几十年的嵌入式软件。我理解你的担心,但我不认为你应该担心内部闪存的读取周期会超过这个范围。@AlexandreLavoie可能它也适用于那里,但我想也适用于这里。如果问题存在,那么它就变成了一个软件问题(你需要进行设计,这样你的代码中就不会有这样紧密的循环)。@MortenJensen我也这么认为,这个问题刚刚在别处出现,我很惊讶我找不到任何明确的答案(而Flash技术存在读取周期限制)@Jubatian我刚问了两位资深同事。他们说闪存没有上限读取计数。仅针对擦除周期。我知道这些,即数据保留和对策,可能在指定零件的数据保留时,制造商特别假设我所指的最坏情况(以最大频率连续访问单元)。实际上,在小型微型计算机上,闪存的任何单元都被大量使用(对于具有1K闪存的阁楼而言,连续运行的最佳情况仅为每个单元磨损量的1/1000,而不是最坏情况)。您不需要根据数据保留量来衡量,而是根据数据丢失量来衡量。再