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.

[参考译文] MSP430FR5949:5949与5849上的存储器分段差异?

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1336574/msp430fr5949-memory-segmentation-difference-on-5949-vs-5849

器件型号:MSP430FR5949
主题中讨论的其他器件:CCStudio、、 MSP430WARE

我有几个 PCB、其中 MCU 是 MSP430FR5949、而不是_5849。  我们有一段使用 CCStudio 启动的加载器固件。  该加载程序依次将加载"实际"固件的十六进制文件、以便用户能够现场更新。  它在_5849上可以正常运行、我修改它以便在_5948 (48K)上运行。  

它看起来应该在_5949上正常工作、而没有任何更改、因为两者都是64K。  加载固件后、我遇到了存储器分段问题。  擦除期间会崩溃、这会指定存储器开始/结束。  由于两个 MCU 都是64K 并且属于同一个系列、因此它们的布局似乎应该是相同的。  

在我见到的固件定义中、

#define USERSTART   0x5200      //加载程序结束保留 FRAM -在5949上使用5,000,5849使用5200
#define USEREND   0x13FFF   //物理 FRAM 的结束 MSP430FR58x9 63K
#define USER_CK_END_L  0xFF7F    //应用于校验和也不擦除我们的矢量
#define USER_CK_START_H 0x10000    //擦除和校验和
#define USER_CK_END_H  0x13FFF    //擦除和校验和

请注意关于为5949与5849使用不同端保留存储器的注释。  我已经尝试按照建议将 USERSTART 更改为5000、并且也将 USER_CK_END_L 移回200位。  我在文档中翻了一圈、找不到任何东西来解决这个问题。  非常感谢有人能提供任何见解。

此致

吉姆

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

    您好、Jim、

    您是否在两者上加载了完全相同的图像?  或者您是否已将项目从 FR5849切换到 FR5949并重新编译、然后尝试执行此操作?   

    我同意、从内存的角度来看、它们应该是相同的。  我唯一想说的是、如果您切换到新器件、它可能会自动引用导致您出现问题的新.cmd 链接器文件?   

    谢谢。

    JD

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

    我本应该打算仔细检查链接文件、而不是假设它们是相同的-可以肯定的、在5949 .cmd 中、 我发现了这个:

       FRAM2                  :origin = 0x10000、length = 0x3FF8 /*边界被改变以修复 CPU47 */

    在5849 .cmd 长度为0x4000、我们的固件假设在擦除时出现这种情况、因此我将擦除越过边界。  我明天会尝试,但似乎很可能是问题。  我认为我们的 f/w 中的评论是一个红色的错误,让我寻找一个不存在的问题。  谢谢!

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

    嗯、听起来可能就是问题所在。  

    此外、CPU47也适用于 FR5849。  如果我从最新的 MSP430ware 导入一个示例、我在两个.cmd 文件中都看到此注释。  在您的原始项目被创建后、.cmd 文件有可能在 MSP430ware 中被更新、因此、直到现在才会拉入更新。  

    检查这是否修复了您的问题、但我可能会更新两个版本以避免可能的错误。  

    谢谢。

    JD   

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

    对于 CPU47、我读出的代码是必须从这些地址执行代码。 而不仅仅是任何代码:

    "如果在 PC 上
    修改指令(例如- ret、PUSH、CALL、POP、JMP、 BR)获取..."

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

    尽管有个好主意,这不是问题。  我(最后)查看了 来自两个不同 MCU 的 map.out 文件。  在_5849中、加载程序的所有内容都写入到第一个 FRAM 区域、但在_5949中、加载程序同时写入到 FRAM 和 FRAM2。  向下搜索.cmd 文件、发现使用了以下 mod:

    ifndef __large_data_model__
       .text            :{}> FRAM          /*代码*/                              
    #else
       .text            :{}> FRAM        /*代码-调制自 FRAM2 | FRAM */  

     不过、我会进行修改以考虑 CPU47。  感谢您指出正确的方向。