This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294KCPDT:EEPROM 耐久性和内置磨损矫正

Guru**** 2340950 points
Other Parts Discussed in Thread: TM4C1294KCPDT
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/603232/tm4c1294kcpdt-eeprom-endurance-and-built-in-wear-leveling

器件型号:TM4C1294KCPDT
主题中讨论的其他器件: TM4C123

我需要对 TM4C1294KCPDT 的 EEPROM 进行一些澄清。  数据表使用的术语未在数据表中定义、因此会引起混淆。  

我们的应用对不同的数据使用不同的块。  块0包含一些在工厂写入的校准数据、通常只写入一次。 它不会填充块的整个64个字节、因此我们不会写入每个字、而只写入我们使用的字。

块1包含一些很少更改的校准数据。 与块0一样、它不使用整个64字节、只写入需要的字节。 此数据在产品生命周期内可能会更改(最多)几百次。

接下来、在块2中、一直到块96中、我们存储各种信息。 在产品生命周期内、可以多次写入此信息。  它始终写入静态地址、这意味着我们始终将其写入块2、偏移为零。  我们并非使用全部96个块、但数据确实跨越了许多块。

通过这些信息、EEPROM 的耐久性会是多少?  我看过这个 帖子、这里的解释似乎与我们正在做的事情不符。  这也与我 在这篇文章中所读的内容不符

我需要澄清一下,因为这两种说法对我来说似乎都没有意义。 按照我对数据表的读取方式、EEPROM 中的每个字都至少可以写入500K 次、最多可以写入1500万次、具体取决于所用的方法。  来自 TI 的人能否清楚地解释如何能够实现1500万次写入?  此外、有人能否验证、无论我们如何写入每个单元格、最低写入量确实是500K?  最后、有人能告诉我如何确定我们的 EEPROM 实施将如何持续?

我提前感谢大家的帮助和见解!

编辑:

我还应该提到的是,我们的程序使用 Tivaware 驱动程序库来执行所有的写入和读取操作,并且数据通常使用 EEPROMProgramNonBlocking()函数一次写入一个字。

我还打算询问数据表第8.2.4节中提到的内置磨损矫正。 我在 EEPROM 部分没有看到与此功能相关的任何其他内容、我想知道是否有任何有关此功能的详细信息!

此外、有人能否告诉我 EEPROM 的故障模式是什么?  如果超过块2和3的寿命、块0和1是否会受到影响?  此外、故障如何表现出来? 块0和块1是否仍保留最初写入它们的数据、只有块2和3无法进一步写入?  

再次感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您计划像这样使用 EE、请确保您已阅读勘误表。 他们不高兴。

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Hi Cam、
    为了澄清任何疑问、我们将进一步调查并返回。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    稍后我将尝试综合更广泛的解释、但您描述的方法属于最低500K 周期类别。 1500万个周期数是指您将数据从一个位置移动到另一个位置。 它减少了可存储的数据量并增加了软件开销。

    数据的写入方式确实会影响写入/擦除耐久性。 如果同时更改元块的所有数据、则会提高有效寿命。 让我们使用700K 周期。 (元块是一个闪存扇区、是一次可擦除的最小闪存容量。 在 TM4C129器件上、一个元块有8个块。  在 TM4C123器件上、元块有两个块。)  另一方面、如果元块中的一个变量经常变化、而另一个变量很少变化、则在很少变化的变量上可能不会获得500K 周期。

    电池磨损时会发生什么情况? 在这些电池上、最常见的磨损机制是由擦除氧化层中的电荷捕获引起的。 在简单的语言中、单元格会变得更难擦除。 它们需要更多的擦除时间、最终无法在允许的时间内擦除。 这将影响该部门。 (每个元块组成一个扇区。) 在低温条件下擦除速度较慢、因此在低温条件下擦除最有可能在使用寿命结束时失败。 正在擦除的元块以外的其他块仍将包含其数据。 在我们的大多数合格器件都远远超过此限制的情况下、我们谨慎地设置了写入擦除限制。

    (2017年6月16日编辑、以定义元块而不是块对、从而正确解释 TM4C129器件和 TM4C123器件。)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Bob、

    我期待您提供更详细的解释、但这是一个很好的信息。

    一个问题是、一个块对两个相邻的 EEPROM 块吗? 例如块0和块1、块2和块3等

    更多详细信息:在块2和更高版本上、我们的应用每次写入时都会写入整个块。 它使用 Tivaware 函数一次写入一个字(4字节)、但每次写入时它都会写入我们的所有数据。 在我们的一些应用中、此数据仅从块2到块5的末尾、但其他应用将编写大量块、并且可能会在最后一个块的中间某处结束写入。

    这是否意味着我们可能会从完全写入的块中获得超过500K 的写入、不包括任何不写入整个块对的应用?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    原谅-根据您的需求、"稳健的 EEPROM 操作和存储至关重要"-为了避免使用专用 EEPROM 器件、任何潜在的(节省的)[尺寸、成本]是否可以证明 MCU 所造成的额外设计时间/复杂性/风险(将其闪存存储器弯曲到这个角色中)?    (具有极高的寿命和性能规格-并旨在实现(而不是融入(某种形式的) EEPROM 合规性?)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Hi Cam、
    我刚刚认识到、当我使用术语"块对"时、我实际上是在谈论 TM4C123器件、而您正在使用 TM4C1294器件。 我编辑了上述帖子以更正和澄清。 TM4C1294器件在一个扇区中有8个连续的块、称为元块。 考虑到这一点、您可能会考虑在不使用所有 EEPROM 块从块8开始的应用中移动频繁更改的数据。 这会将其放置在与您的校准数据不同的元块(扇区)中。

    现在、让我解释一下"磨损矫正"。 这是 EEPROM 状态机的内置硬件功能。 闪存单元可支持100K 的写入擦除周期。 EEPROM 仿真组中使用的单元与主闪存中使用的单元相同。 EEPROM 闪存实际上大于 EEPROM 大小。 每个块中有7个数据副本的空间、还有一些状态和控制变量的空间。 (这全部由 EEPROM 状态机控制、应用程序无法直接访问。) 在前七次写入单个 EEPROM 位置时、状态机会更新指针、并将新值写入新位置。 无需擦除。 在第八次写入时、该值被写入一个额外(隐藏)的复制扇区、并且整个元块中每个字的最新值也被复制到此复制扇区。 然后擦除原始元块、并将复制扇区中的数据复制回原始元块。 因此、我们通过一个写入擦除周期获得7次更新。 每次更新元块的所有数据时、您可以至少计算700K 个周期。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="CB1_MOBILE "]原谅-由于您需要这样做、"稳健的 EEPROM 操作和存储至关重要"-为了避免使用专用 EEPROM 器件、任何潜在的(节省)[大小、成本]是否可以证明 MCU 所造成的额外设计时间/复杂性/风险(将其闪存折弯到此角色)合理?    [/报价]

    由于耐久性是一个问题、因此 FRAM 可能是合理的。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bob、您好!

    感谢您的出色解释。 我还有一个问题、您可能可以为我回答。

    就磨损矫正而言、在需要擦除之前、使用了7个不同的位置。 我想弄清楚每次写入一个字时磨损程度如何受到影响。 内部状态机是否会在从复制/位置1移动到复制/位置2之前跟踪元块中的特定地址是否正在被第二次写入、或者它是否会在每次调用该元块的字写入时移动到下一个位置? 我只想验证我们的 EEPROM 驱动程序实现不会导致内存过度磨损。

    在我的案例中、我正在调查一个现有产品的故障、并尝试跟踪故障可能源于何处。 我发现 EEPROM 的块0和1已全部恢复为空(擦除值0xFF)。 我们的应用程序中没有写入这些位置的内容、它只写入块2和更高的数据。 如果数据位于同一个元块中、并且在复制/擦除执行期间发生了一些情况、则可能会解释我们看到的内容。 我试图弄清楚我们是否超出了 EEPROM 的耐久性等级、还尝试弄清楚其他哪些因素可能会导致我们看到的故障模式。 如果您有任何想法、请告诉我、我很乐意探索任何可能性。

    编辑:

    我还有一个问题要问。 我已经编写了一个读取和写入 EEPROM 的测试程序。  当我执行读取操作且没有正在进行写入时、我看到 EEPROM 中断(闪存控制中断)被触发。  根据数据表、这应该只在出现错误、或者写入或擦除完成时才会触发。  为什么在发出读呼叫后会看到这种情况?

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bob 尤其会提供有关 TM4C 的更好的信息、但让我分享一些来自其他器件的现场观察结果。

    我曾遇到 EE 故障、尤其是在电源故障和高 EMI 条件下、断电或干扰导致的故障可能会导致器件中的任何位置发生写入。 我听说过、如果在断电期间中断、故障会优先影响第一个位置(一些人出于这一原因保留了前几个位置) 由于这是闪存仿真 EE、因此编程的早期步骤之一是擦除更新后的块。

    Robert