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.

[参考译文] MSP430FR2433:写入受保护的 FRAM 不会生成 NMI 故障、这是令人惊讶的

Guru**** 2558250 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/799818/msp430fr2433-that-a-write-to-protected-fram-does-not-generate-an-nmi-fault-is-surprising

器件型号:MSP430FR2433

系列用户指南 SLAU445I 指出:"启用写保护后、对受保护 FRAM 的任何写访问都会导致无效的写操作、但不会产生中断或复位。"

如果在 FRAM 中定义了一个 persistent 变量、但未启用 FRAM 写入、并且尝试写入该变量、则写入无效、执行过程正常。

IMO 这是令人惊讶的、因为大多数程序员会期望一个不起作用的写入会导致一个 NMI 总线故障、类似于对空存储器的写入。

SLAA628"FRAM 最佳实践"有一个部分"将其视为 RAM 一样"、但没有提到这一关键区别。  在不禁用 FRAM 写保护的情况下、不能将其视为 RAM。

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

    写入受保护的 FRAM 地址与写入空地址不同。 后一种情况是写入非法地址、以便系统总线解码器生成复位事件、这是系统总线的一种行为。 但前一种情况是写入现有(合法)地址、因此系统总线不会触发复位。 由于 FRAM 控制器保护您正在写入的地址、这是 FRAM 控制器的一种行为、因此您不会产生任何影响。

    SLAA628是有关 FRAM 的一些特定主题的应用手册。 当您在没有 RAM 等任何保护的情况下写入 FRAM 时、"将其视为 RAM 一样"一节只简单介绍了一些要点。 我建议您将器件用户指南(SLAU445I)作为 FRAM 的主要指南。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我建议在未来的产品中改进架构。

    我不是一个芯片设计人员、因此在硬件中实施可能比我意识到的要困难。 但是从软件的角度来看,我不关心 NMI 是如何实现的,不管是由总线控制器还是 FRAM 控制器实现的。 我知道 FRAM 控制器已经针对位错误生成 NMI、因此我想知道当启用写保护时、它为什么不为写操作生成 NMI。

    从我的软件角度来看,应该有一个合同:“任何将值写入内存地址的指令要么这样做,要么生成一个 NMI。” 对于此体系结构,没有此类合同,您必须添加一条子句“如果地址位于 FRAM 中且 FRAM 具有写保护,则不执行任何操作”。

    我说“惊讶”是指我认为大多数其他架构都具有简单的合同,没有额外的条款。