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.

[参考译文] MSP430FR6989:如何避免调试器擦除"Persistant"FRAM 中的数据、该数据应是 NV (EEPROM)

Guru**** 2826855 points

Other Parts Discussed in Thread: MSP430FR6989

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/941117/msp430fr6989-how-to-avoid-debugger-erasing-persistant-data-in-fram-which-is-intended-to-be-nv-eeprom

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

您好!

我的客户希望将器件中可用的 FRAM 的一半用作 EEPROM。 他们希望在应用程序中使用此空间进行数据记录。 但是、只要它们通过 IAR 或 CCS 进入调试模式、数据就会被完全擦除。 是否有办法防止这种情况发生?

此致、

Chander

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

    嗯、他们是如何拼写的? (应为"持久"[参考 CC430 UG (SLAU132U)第5.12.22]节)

    我不仅仅是挑剔的人--我记得 C 编译器需要忽略不识别的#-pragma 选项,因此它可能会静默不起作用。

    [编辑:也许一个代码片段会给人启发。]

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

    您好!

    拼写不正确。 这是我这边的一个拼写错误。

    您可以通过以下代码示例轻松重现此问题: C:\ti\MSP\MSP430Ware_3_80_07_00\fram_utilities\examples\NVS\IAR\NVS_ex3_datalog

    此致、

    Chander

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

    > 每当它们通过 IAR 或 CCS 进入调试模式时

    很抱歉,我没有收到这条规定。 加载代码时会重新初始化 persistent 变量、但不会在重置时重新初始化。 要在代码下载后继续运行、您需要 NOINIT。 [参考 C 编译器 UG (SLAU132U)第5.12.22节]

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

    当我们使用 NOINIT 时、这些变量不会进入 FRAM。 它们存储在常规 RAM 中。 因此、这没有什么帮助。

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

    要将 NOINIT 从 RAM 移到 FRAM、您需要更改链接器文件。

    删除此行(lnk_msp430fr6989.cmd 副本中的第191行):

    .TI.noinit:{}>RAM /*用于#pragma noinit *
    
    

    并在.TI.persistent (副本中的第137行)之后插入(略有更改):

    .TI.persistent:{}//*代表#pragma PERSISTENT */
    .TI.noinit:{}//*代表#pragma noinit */
    .cio:{}//* C I/O 缓冲器*/
    
    
    
    

    由于您希望使用较大的空间、您可能需要更改 MPU 定义("Build Settings->CCS General->MPU"选项卡)、因为它看起来像默认布局、只提供大约2KB 的读取/写入。

    这将为您提供小于48KB (低 FRAM)的工作空间。 如果您需要更多、您可能需要使用高 FRAM (FRAM2区域)、这需要更多的抖动。

    我在这里没有 FR6989可供使用、但.map 文件似乎表明我成功执行了这一操作。

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

    您好、Chander、  

    您需要使用调试而不下载函数、以不擦除和初始化变量。  

    对于 IAR、您可以找到"Menu button "debug without download"。  

    对于 CCS,请参阅此帖子以进行调试而不下载: https://e2e.ti.com/support/tools/ccs/f/81/t/538495?How-to-debug-existing-code-in-CCS-without-flashing-a-new-code- 。 您也可以直接观看视频: 快速提示视频

    谢谢、  

    Lixin

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

    您好、Lixin、

    "在没有调试的情况下下载"将不起作用、因为它也不会更新程序。 客户需要更新/调试源代码、但在此过程中不想丢失存储的 NV 数据。

    此致、

    Chander

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

    更改为 NOINIT 以及链接器文件(可能还有 MPU)是否有所帮助?

    说明显而易见:NOINIT 实际上意味着"不初始化"。 首次加载代码时、该区域可能存在过时(或无效)数据、CTPL 可能处理这些数据、也可能处理不好。 检测到"第一次"情况是"作为运动"。 (我通常使用 CRC。)

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

    不、当我将 NOINIT 空间分配更改为 FRAM 时、它们会在进入调试模式时开始被擦除。 我在 xcl 文件中的更改反映在下面:

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    /--------------
    //内存保护单元(MPU)边界
    //

    -Z (const) MPU_B2

    //--------------------
    //常量数据
    //

    -Z (const) DATA16_C、DATA16_ID、TLS16_ID、DIFUNCT、校验和=4400-FF7F
    -Z (data) DATA16_N、DATA20_N=4400-FF7F
    //--------------------
    //代码
    //

    -Z (code) CSTRT、ISR_code、CODE16=4400-FF7F


    //--------------------------------------------------------
    //所有内存0-FFFFF
    //

    --------------------------------------------------------------------

    此致、

    Chander

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

    我查看了 mspdebug 和 TI 调试库之间接口的源代码、并找到了几种不同的擦除函数。 除了一个擦除主存储器、还有一个擦除段。 因此、似乎可以执行所需的操作。

    但我不能想到任何使用擦除段函数的工具。 对器件进行编程将始终擦除所有主存储器。 希望用户数据能够承受这种情况是一个错误、因此如果您希望保留该数据、则必须读取该数据并将其存储在主机上。

    我想、如果您有足够的动力、您可以将 mspdebug 源代码用作基础代码、并对其进行修改以仅擦除编程的空间。 或完全跳过 FRAM 器件的擦除步骤。

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

    我在一段时间内没有使用过 IAR、但它曾经有一个选项"只擦除已更改的段"或这样的部分段。 我在 F2天内使用它来保留(非信息)闪存中的参数数据。

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

    您好、Chander、  

    在 Run->Debug Configurations...中有一个闪存擦除选项。 菜单。 对于 MSP430FR6989、如果要使用一半 FRAM 存储器进行数据记录、另一半 FRAM 存储器用于代码记录、以及在不擦除数据记录区域的情况下进行调试/编程、可以尝试最后一个选项:按地址范围。  

    谢谢、  

    Lixin  

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

    您好、Chander、  

    我的答案是否能帮助您解决问题?  

    谢谢、  

    Lixin  

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

    您好、Lixin、

    我还没有检查过它。 我将很快通知您。

    但是、我的客户使用 IAR。 在 IAR 中是否有任何类似的可能?

    此致、

    Chander

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

    我在一段时间内没有使用过 IAR、但它曾经有一个选项"只擦除已更改的段"或这样的部分段。 我在 F2天内使用它来保留(非信息)闪存中的参数数据。

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

    您好、Chander、  

    Bruce 是对的。 IAR 也具有类似的擦除选项。 但它与 CCS 有些不同。  

    在 IAR -> Options -> FET Debugger 中右键点击项目。 您可以找到如下所示的擦除选项。  

    谢谢、  

    Lixin  

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

    Lixin、Bruce、

    感谢您的参与。 这些已提供给客户。 我正在等待他们的反馈。  

    此致、

    Chander