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.

[参考译文] CCS/MSP430FR2633:FRAM 示例不能#39;t make sense (对我而言)

Guru**** 2531900 points
Other Parts Discussed in Thread: MSP430FR2633

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/707201/ccs-msp430fr2633-fram-example-doesn-t-make-sense-to-me

器件型号:MSP430FR2633
主题中讨论的其他器件: MSP430WARE

工具/软件:Code Composer Studio

我正在尝试了解如何在 FRAM 中存储一个值(无符号长整型)、理想情况下、在对芯片重新编程时不会被擦除。  

首先、这些示例使用 PERSISTENT 和 NOINIT pragma、这看起来很简单。 但是、我是否需要担心这些变量的地址将来会发生变化? 例如、在该版本的固件中、我仅存储单个无符号长整型。 如果我决定将来存储其他变量、原始 unsigned long 的地址是否会保持不变? 使用 NOINIT pragma 时、如何查找其地址?

第二、关于 NOINIT、我阅读 SLAA628 - MSP430 FRAM 技术-操作方法和最佳实践。 在第5.1节中、它指出:(我添加了强调)"请注意、与 PERSISTENT 不同、声明为 NOINIT 的变量不会被默认链接器命令文件放置在 FRAM 中、如果需要此类功能、则需要对链接器命令文件进行少量修改。" 所以... 需要在链接命令文件中修改哪些内容以及如何修改

第三、看一下 msp430fr243x_framwrite.c 示例、我很困惑。 (我想链接到它、但编辑一直在奇怪地行事。 因此、位于:TI Resource Explorer > Software > MSP430Ware > MS430FR2XX_4XX > MSP430FR2633 > Peripheral Examples > Register Level > msp430fr243x_framwrite.c"。

该说明指出您应该在写入主 FRAM 时禁用中断。 但随后说"此代码示例使用 DFWP、这不会带来危险。" 我不知道这种说法是什么意思。 我认为唯一有意义的是、该示例声称使用 DFWP。

在代码中、FRAM-TEST_START 定义为0x1800。 查看与 INFOA 相对应的链接器命令文件。 其注释为"//* MSP430 info FRAM Memory Segments */"。 (请注意、什么是信息 FRAM 存储器段?) 如果这个示例写入 FRAM、那么起始地址0xC400为什么不写入?

在 FRAMWrite()函数中,它看起来像 SYSCFG0解锁 PFWP 而不是 DFWP。 我认为明确的书面说明明确地指出、该代码与 PFWP 没有任何关系。 那么、那里发生了什么呢?

此外、在线路上、LED 被切换、注释为"show 512 bytes"。 这毫无意义。 写入5120字节后、LED 将切换。 或者我是否缺少了什么?

最后、我发现的所有营销数据都表明 FRAM 没有闪存的生命周期问题。 然而、该示例清楚地警告"长时间运行此示例将影响 FRAM 的寿命。" 是的! 运行此代码有多危险?! 什么被定义为"延长期限?"

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

    尊敬的 James:

    感谢您发帖。 我想您可以在 《MSP430FR263x、MSP430FR253x 电容式触摸感应混合信号微控制器》数据表(修订版 B) 和 《MSP430FR4xx 和 MSP430FR2xx 系列用户指南》(修订版 H)中找到有关混淆的更多详细说明。 对于您的问题:

    您可以在绝对地址对变量进行编程。 请参阅 在特定存储器位置放置变量- MSP430。 并确保代码引用了您的变量、或使用.retain 指令以避免由链接器删除。 有关更多详细信息,请参阅此主题帖( https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/707158 )。

    2.您可以在 lnk_msp430fr2633.cmd 文件中找到 persistent 和 NOINIT 段定义。 在 cmd 文件中、您需要删除".TI.noinit :{}> RAM"并添加如下所示的代码、这会将.TI.noinit 部分从默认 RAM 移动到 FRAM。

    3.PFWP 用于 FRAM 代码存储器保护、以防止任何不必要的代码更改。 DFWP 用于 FRAM 信息存储器保护。 信息存储器通常用于存储用户的数据。 更改的数据不比更改的代码更危险。 仅当 PFWP 禁用时、才能写入 FRAM 主存储器。 因此、请在写入完成后立即启用 PFWP。 但是、如果此时发生中断、它将在不受保护的情况下长时间暴露 FRAM。 因此、建议在 代码写入主 FRAM 时禁用中断。

    FRAM 存储器包括主存储器和信息存储器。     更多详细信息、请参阅 MSP430FR263x、MSP430FR253x 电容式触摸感应混合信号微控制器数据表(修订版 B)和 MSP430FR4xx 和 MSP430FR2xx 系列用户指南(修订版 H)。  

    5.您说得对,“每100次写入后切换 LED”是正确的。 FRAM 具有 10^15的写入周期耐久性、这意味着在实际应用中"无生命周期问题"。 但是、如果您仅使用此代码示例测试 FRAM 的耐久性、则可能会超过10^15的限制。

    此致、

    如果我的帖子有助于解决您的问题、请单击  验证答案    按钮 

    冬季、

    搜索 E2E! 您的问题可能已经得到解答!  

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

    [引用 user="Winter Yu"]在 cmd 文件中,您需要删除“.TI.noinit :{}> RAM

    是的。 我明白了。 我感到困惑的是、我参考的应用手册中没有包含这2句话的解释。 此外、您忘记了提到还需要禁用 CCS 8中项目属性的 Debug 标签中的"Main memory"擦除选项。 同样、令人困惑的是、TI 为什么会隐藏这些关键细节。 (但是、这是一种非常有效的方法、可以防止对平台感兴趣的新工程师采用它。)

    [引用 USER="Winter YU"]PFWP 用于 FRAM 代码存储器保护、以防止任何不必要的代码更改。 DFWP 用于 FRAM 信息存储器保护[/QUERP]

    这种解释没有回答我原来的问题。 我不明白为什么该示例中包含有关使用 DFWP 的密码语句、但代码明确引用了 PFWP。 为什么...? 我发现的其他 FRAM 示例按预期使用解锁 DFWP。 而不是我参考的那个。 原因。 必须有理由。 这是什么原因?

    此外、我仍在寻找有关 FRAM 写入/生命周期的说明。 我引用的示例清楚地警告了 FRAM 的磨损。 我在我的应用中对此非常关注。 请解释该示例为什么会发出警告。 有哪些关键因素使该示例的作者认为有必要纳入这一警告?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、James、我能理解您的沮丧。 我是 Winter 共享的另一个线程、我还在管理器件存储器。

    对于您关于 FRAM 写入周期的问题(我可能无法完全理解您的问题)、闪存具有10^5周期的常见写入周期限制(根据 Wikipedia)、而该 FRAM 具有10^15的预期写入周期限制。 我认为、在这种情况下、TI 合理地宣称大多数应用的寿命"永远"。 当您专门编写代码、反复写入同一位置时、风险就会出现。 现在、我对包络计算的背面是、每秒写入100k 次、仍需要317年才能达到10^15次写入、但编写该示例的人可能只是用该警告覆盖他们的背面。 )

    我将亲自探究 DFWP 和 PFWP 之间的差异、看看我是否能够理解为什么我不能正确初始化存储在信息存储器中的常量。 如果我发现一些看起来有用的东西、我会在这里发帖。

    希望这对您有所帮助、
    Paul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >而该 FRAM 的预期写入周期限制为10^15
    是的、我找到了有关预期写入次数的各种营销信息。 然而,这个例子的提交人认为,有必要警告这一准则对 FRAM 的寿命是危险的。 在这种情况下、我需要知道运行此代码有多危险。 (他们毕竟特别使用了"危险"一词。)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的问题将继续得到解答。 此问题未得到解决、但我想结束这个问题。 我决定采用不同的平台。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 James:

     

    感谢您使用 MSP430器件并发表您的问题。 我和社区成员Paul Shepherd17 (感谢 Paul)已经尝试回答您的问题。 很抱歉,您对这些答案不满意。 我想做一个总结并进一步解释:

     

    1、如何在 FRAM 中存储一个值(无符号长整型)、理想情况下、在对芯片重新编程时不会被擦除。  

    根据我的回答、您已经解决了这个问题。

     

    2.我感到困惑的是,我所引用的应用手册没有包括这2句解释。 此外、您忘记了提到还需要禁用 CCS 8中项目属性的 Debug 标签中的"Main memory"擦除选项。 同样、令人困惑的是、TI 为什么会隐藏这些关键细节。 (但是、这是一种非常有效的方法、可以防止对平台感兴趣的新工程师采用它。)

    实际上,“.TI.noint:{}>FRAM”一句使“.TI.noinit”变量定位到 FRAM 中”一句在应用手册中描述如下。 是的、我忘记提到还需要禁用"仅主存储器"擦除选项。 感谢您的提醒。  尽管它是默认设置,但无论如何,我们应该注意它。



     

    3.我不明白为什么示例中有有关使用 DFWP 的密码语句,但代码明确引用了 PFWP。 为什么...? 我发现的其他 FRAM 示例按预期使用解锁 DFWP。 而不是我参考的那个。 原因。 必须有理由。 这是什么原因?

    此代码示例演示了如何写入信息存储器(1800h-19FFh、受保护的 DFWP)、并提醒编写代码存储器时需要注意的事项(受 PFWP 保护)。 实际上,我看不到这件事会让你感到困惑。 在写入 FRAM 信息时,首先代码通过将 DFWP 设置为0来禁用 DFWP (SYSCFG0 = FRWPPW | PFWP),然后启用 DFWP。 总之,使用“SYSCFG0 &=~DFWP”可以更清楚地理解。 感谢您的反馈。

     

     

    4.请混淆为什么这个例子的作者认为有必要警告这个代码对 FRAM 的耐久性是危险的。

    也许"危险"不合适。 这只是一个需要小心谨慎的提醒。 总之、感谢您的反馈。 我将与进行讨论

    此代码示例的作者进行了一些改进。

    对于上述问题和答案、您会对哪一个感到困惑? 请随时在 E2E 论坛上发帖。 即使我们尽最大努力提供优质产品、丰富的资源和易于使用的生态系统、仍有很大的改进空间。 正是像您这样的人让 TI 变得越来越好。

     

    此致、

    冬季