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.

[参考译文] MSP430F5244:基于闪存的固件更新

Guru**** 2560390 points
Other Parts Discussed in Thread: MSP430F5244

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/589472/msp430f5244-flash-based-firmware-updation

部件号:MSP430F5244

您好,

我正在将MSP430F5244与CCS 5.6 一起用于开发。 我正在尝试使用基于闪存的应用程序更新MCU固件。

我遵循的程序是:

1.编写示例代码并在CCS中生成TI.txt文件。

2.将Flash分为两部分。

FLASH_MEM:原点= 0x4400,长度= 0x0200
Flash:原始= 0x4600,长度= 0x5CC0
FLASH_X:原点= 0xA2C0,长度= 0x5CC0

3.为RAM功能制造区域。

RAM_MEM:原点= 0x2400,长度= 0x0200
RAM:原点= 0x2600,长度= 0x1E00

4.应用程序位于Flash的第一个分区,在第二个分区中,我存储了新映像。

5.然后跳到RAM功能,通过该功能,我们可以将映像从第二个分区复制到第一个分区。

6.复制完所有图像数据后,重新启动MCU。

WDTCTL = WDT_MRST_0_064;

我在MCU启动时遇到问题,在重新启动指令后停止。

请帮助我克服这个问题。

谢谢你。

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

    重置时,设备使用存储在0xFFFE (重置矢量位置)中的地址来确定从何处开始执行代码。 在新映像中复制的代码中,您是否处理过将中断向量表0xFF80-0xFFFF替换为刚刚复制的新代码段的中断向量表? 否则,重置可能仍指向旧代码的起始位置,而旧代码不再在该部件中,并可能导致问题。

    我们确实提供了一种称为MSPBoot www.ti.com/.../slaa600的功能 ,用于创建主内存引导装载程序,包括双映像支持(这基本上就是您所做的)。 我建议以这个例子为例。 我认为您现在的工作方式(仅根据您的简短描述-我不知道您实施的所有细节)令人担忧,这听起来好像加载程序是从RAM运行, 但在这种情况下,如果您在从一个图像位置复制到另一个图像位置时断电或出现错误,则可能会出现无法恢复的情况,因为RAM将会丢失。 MSPBoot仅为加载器代码("启动区域")设置单独的闪存部分,该部分与两个图像("下载区域"和"应用区域")分开,并提供从失败或中断的加载情况中恢复的功能。

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

    您好 ,Katie:

    感谢您的回复。

    是的,我在复制时处理了中断向量表0xFF80-0xFFff,0xFFFE上存储的地址是0x4600,这是新的图像地址。

    是的,您说得对,实施是一家银行,我将研究建议的实施。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我忘了提及的另一件事-由于您使用的是MSP430F5244,此F5xx器件在单独的2kB闪存区域中确实具有内置的BSL。 虽然您可能不想使用默认内置BSL,因为它不支持双映像,但如果它适合2kB,您可以将引导加载程序代码放在那里。 有关修改默认BSL 的更多信息,请访问:www.ti.com/.../slaa450。 如果2kB有足够的空间,这可能比使用我在上面链接的MSPBoot更容易。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Katie:

    我尝试基于RAM的解决方案有一些原因。 我的问题是不能  

    从闪存段复制中断向量表。 代码片段类似于:

    #define app_flash_vector_table 0xFF80

    作废Copy_Vector_Table (void)

    FLASH_PTR =(CHAR *) APP_FLASH_VICME_TABLE;
    FCTL3 = FWKEY;
    FCTL1 = FWKEY+ERASE;
    FCTL1 = FWKEY+WRT;

    (j=0;j<128;j++)

    *Flash_PTR++= test_data[j];
    }

    FCTL1 = FWKEY;
    FCTL3 = FWKEY+LOCK;
    }

    您能否为可能出现的问题向我提出建议?

    谢谢你。

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

    您好,Akshat,

    在写入之前,我不确定您是否确实在擦除包含IVT的段-您需要在设置擦除位后对要擦除的段执行虚拟写入,以使擦除实际发生。 如果您从RAM中启动了擦除,则还需要在尝试写入闪存之前检查占线位以查看擦除是否已完成。 请参阅用户指南Flash章 节www.ti.com/lit/pdf/slau208 -有一节称为"从RAM中启动擦除"。 是否可以尝试执行此操作,也可以在段中添加已知占用地址的读取(例如,重置向量0xFFFE),以便在写入数据之前检查0xFF?

    我仍然会担心在这段时间里你是否会断电,因为你的重置矢量可能没有正确的值,然后你将处于不可恢复的状态。 这就是为什么我仍然建议尽可能使用内置BSL区域的原因,因为您始终可以使用TEST + RST上的BSL HW输入序列或使用您在BSL内定义的其他标准重新输入,即使该部件为100 % 空白。 其中有一小部分总是在启动时在main之前调用,这样即使在重置向量中没有任何内容,您也可以访问BSL

    此致,
    Katie

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

    您好,Katie:

    我尝试了自定义BSL实施。您之前已建议。

    我正在为MSP430F5244 MCU实施此项。

    我已成功复制闪存段和中断向量表区域中的数据。

    之后,我使用新的映像开始地址尝试了API BSL430_callAddress(addr),但我无法跳转到该地址。

    重置MCU后, 它也处于未定义状态。

    您能帮我吗,可能是什么问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Akshat,
    您是否能够连接调试器以便在出现问题时设置断点等? 您是否可以在BSL430_callAddress()的开头设置断点,以便您可以单步观察代码是否正在输入IF语句“IF (LockedStatus == unlocked)”,或者绕过它而实际上不执行跳转? 请注意,如果跳转成功,您实际上将不会从函数返回,因此将不会获得任何返回值...

    如果你有一个简单的代码版本可以分享,那也会很有好处-但我理解,如果在公共论坛上不可能这样做的话。

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

    您好,Katie:

    感谢您的支持。

    我可以更新MCU固件,我认为问题在于编译器选择。

    在使用TI 4.2 .7正确编译项目时,我在链接器文件中收到警告。4.2

    此实现是单个银行,如果要在msp430F5244中实现双银行,我该怎么办。

    再次感谢您的友好支持。

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

    您好,Akshat,

    您是否能够立即获取代码? 我在您的帖子中不清楚您现在是否能够跳转到您的应用程序代码,并且不确定这与编译器选择有何关系? 您是否使用了上述断点和单步进?

    Akshat Saraf 说:
    当使用TI 4.2 正确编译项目时,我在TI 4.2 的链接器文件中收到警告。[/QUOT]

    您能否分享警告信息?

    要在BSL闪存区域使用自定义BSL,我通常建议使用IAR -如果您在MSP430BSL_1_00_12_00\5xx_6xx_BSL_Source中查看代码下载,我们将提供更多IAR示例源项目, IAR 编译器实际上倾向于将其构建得更小,以便更好地适应BSL领域。 您可以为此使用免费的代码大小限制IAR,因为BSL始终限制为2KB,因为这是所有可用空间。 CCS也能正常工作,但我想知道,不同编译器版本的链接器警告是否是由于达到BSL的代码大小限制而导致的...

    对于双组实施,我们没有这方面的示例,但您基本上需要添加代码来处理设备的一个区域的加载,然后在下载所有代码后 将其复制到部件的运行区域。 我建议您可能需要创建一个BSL可以从主机接收的新命令,该命令向BSL表示您已完成向其发送 所需的所有代码,  现在,它应该将其复制到主应用程序区域,而不是下载区域。 您可能还需要修改用于接收代码的命令,以检查从主机发出的命令上写入的地址, 以便将它们限制为您的下载区域特定的地址。 其他注意事项可能取决于您希望代码的行为方式,以及您要“自定义”您的BSL的实际位置。

    此致,

    Katie

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

    是否有任何更新? 您能否分享您收到的警告消息?

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

    由于不活动,我将关闭该主题,但如果您仍需要帮助,您可以回帖。

    此致,
    Katie