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.

[参考译文] MSP430F5438A:FLASH34勘误表的含义

Guru**** 2589275 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/733824/msp430f5438a-meaning-of-flash34-errata

器件型号:MSP430F5438A

你好。

我无法完全理解 SLAZ290T 的以下勘误表:

FLASH34:闪存模块
功能:组擦除期间的并发闪存读取失败
说明:在组擦除期间、不能执行驻留在闪存中的代码。
解决方法:将组擦除期间要执行的代码放置在 RAM 中。

在第7.3.1.4节(从闪存启动擦除)中、系列用户指南(SLAU208Q)断言:

(...) 对于任何段擦除、CPU 被保持、直到擦除周期完成、而与代码组无关
驻留在中。 段擦除周期结束后、CPU 用指令恢复代码执行
在假写入之后。

因此、勘误表显示 CPU 未按预期保持、闪存擦除必须始终从 RAM 启动?

并行读取失败的结果是什么? 当我的(组)擦除函数从(另一组)闪存启动时、我偶尔会尝试闪存密码违规 PUC。 这是已知行为吗?

提前感谢您。

此致、

Peppe

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

    勘误表比用户指南更相关、因此您应以与所提供文档相反的顺序阅读这两个文档。

    功能:组擦除期间的并发闪存读取失败
    问:因此、勘误表显示 CPU 未按预期保持、闪存擦除必须始终从 RAM 启动?
    答:是的。 FRAM 擦除已启动后、您无法安全地跳转到 RAM。

    问:并行读取失败的结果是什么? 当我的(组)擦除函数从(另一组)闪存启动时、我偶尔会尝试闪存密码违规 PUC。 这是已知行为吗?
    A:说明:驻留在闪存中的代码不能在组擦除期间执行。 功能:组擦除期间的并发闪存读取失败。
    勘误表显示、在组擦除期间、您无法从任何 FRAM 组可靠地读取数据。

    问:这是已知行为吗?
    答:以上答案是"是"。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Tomasz、感谢您的快速回复。

    当然、我知道勘误表与用户指南的相关性更高。

    但在阅读完您的回复后、我仍然认为该勘误表的描述确实具有误导性。
    它表示在擦除闪存时不能从闪存中提取任何代码、这与 CPU 应等待完成这一事实相矛盾。

    然后、它应该澄清、与预期相反、CPU 根本没有被保持、因此它会不断从闪存中获取代码、并且这个操作失败。 但是、它的失败方式并不完全清楚:例如、在所有其他无法获取的情况下、CPU 读取0x3FFF、这相当于跳转到同一台 PC、这会使 CPU 按设计的方式完全锁定。

    最后、我要指出的是闪存、而不是 FRAM、但也许您的只是一个拼写错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Piergiuseppe:

    <<<当然、我知道勘误表与用户指南的相关性更高。
    >>>太棒了! 我更喜欢阅读勘误表、而无需用户指南的上下文、以避免任何预期和假设、从而找出最坏的情况。

    <<<它表示在擦除闪存时无法从闪存中提取任何代码。
    >>我不同意你的意见。 它表示从任何闪存位置读取都失败。

    <<<但是、不清楚它是如何失败的
    >>我同意你的意见。 我的法律顾问曾经说过:它在签署之前不会签署。 如果失败、则失败。

    <<<在无法获取的所有其他情况下、CPU 读取0x3FFF、这相当于跳转到同一台 PC、这会使 CPU 按照设计的方式完全锁定。
    >>>非常了解详情和概念!

    <<<最后、我要指出的是闪存、而不是 FRAM、但您可能只是一个拼写错误。
    >>>不是拼写错误。 在应答时拨打2-3个电话、FRAM、SRAM、闪存等没有什么区别。

    您是否有一个如何避免"偶尔试验一个闪存密码违反 PUC "的概念?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Tom、

    请注意、勘误的闪存34讨论的是闪存的组擦除特性。

    而您提到的用户指南的摘要讨论了段擦除。 这是一个很大的差异、它将通过 FCTL1寄存器内的 MERAS 和 ERASE 位进行设置。

    以进行澄清
    用户指南第7.3.1.4章中说、在组擦除期间、允许从闪存和 RAM 执行代码。
    但是、FLASH34勘误表显示从闪存执行组擦除不起作用
    ->表示在组擦除期间只能从 RAM 执行、因此组擦除应该从 RAM 中完成!

    3.用户指南还指出、对于段擦除、CPU 被保持在完全的状态并且段擦除期间不能执行代码

    希望这有助于更好地理解用户指南和勘误表的组合。 其效果是组擦除期间的读取操作不可靠。
    为了更好地了解如何通过闪存密码违规触发 PUC、我需要代码序列。
    但是、如果您从闪存启动组擦除并在闪存之后放置代码、这会将 PW 写入 FCTL1、这可能会发生、因为读取代码或数据可能不可靠。
    因此、请将组擦除代码放入 RAM。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dietmar Walther、非常感谢您的澄清。

    此时、我只想添加一个内容、即组擦除 RAM 函数必须位于一个关键部分、以避免从闪存中提取其他代码(例如通过 ISR)。

    关键段可在 BUSY 返回0后关闭、此外、除了 GIE 之外、还要禁用任何之前启用的 NMI。

    值得注意的是、所有这一切还意味着最新的 DriverLib 组擦除实现(FlashCtl_eraseBank)出现故障、因为它被放置在闪存中并且不会阻止 IRQ。

    此致、

    第页

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

    Piergiuseppe、

    除了检查 RAM 中的忙线 直到组擦除完成外、清除 GIE 绝对是正确的、以防止闪存访问是必要的。

    感谢您提供有关 DriverLib 的信息、我将负责解决此问题。

    此致、
    Dietmar