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.

[参考译文] MSP430F5418A:使用 MSP BSL 更新应用固件,我遇到了一些问题。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/730455/msp430f5418a-updating-application-firmware-with-the-msp-bsl-i-meet-some-problems

器件型号:MSP430F5418A

地址分配

BOOT:0x5c00-0x6bff

引导的 XCL 文件:
-Z (代码) INTVEC=0xFF80-0xFFFF
-Z (代码) RESET=0xFFFE-0xFFFF

APP:0x6c00-0xfcff  0x10000-0x15672

应用程序的 XCL 文件:
-Z (代码) INTVEC=0x15F80-0x15FFF
-Z (代码) RESET=0x15FFE-0x15FFF

我想从 boot,跳转至应用程序, 并尝试使用 mov 命令--- asm (“mov &0x15FFE,PC;”),  但 编译错误。

错误信息为:

ERROR[OG006]:内联汇编中的错误:"ERROR[433]:地址超出范围。 有效范围为0至65535 (0xFFFF)。"  

那么 、如何跳转至引导代码?中的地址0x15ffe

谢谢!

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

    复位矢量和中断矢量由设计固定、需要位于链接器命令文件中提供的地址(位于64k 边界的顶部)

    -Z (代码) intvec=FF90-FFFF
    -Z (代码) reset=FFFE-FFFF

    因此、您不应更改这一行。

    此外、CSTARTUP 代码的输入以及中断处理程序的输入也需要位于低64k 存储器区域中、因为向量只能以16位的形式提供。

    当然、您可以立即跳转到较高存储器区域中的函数、并在该区域具有函数的主要部分。

    如果您想让链接器将正常函数的代码段放入上部存储器中、请将以下行更改为:

    -P (代码)代码= 0x15F80-0x15FFF
    -Z (code) code_pad

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

    感谢你的答复。

    好的,现在我更改 了地址分配。

    引导的 XCL 文件:

    -Z (代码) CSTART、ISR_code、CODE16=5C00-6BFF
    -P (代码) code=5C00-6BFF

    -Z (代码) INTVEC=0xFF80-0xFFFF
    -Z (代码) RESET=0xFFFE-0xFFFF

    应用程序的 XCL 文件:

    -Z (代码) CSTART、ISR_code、CODE16=6C00-FC7F

    -P (code) code=6C00-FC7F、10000-25BFF

    -Z (code) intvec=FC80-FCFF
    -Z (代码) RESET=FCFE-FCFF

    我编写两个应用代码。  这两个代码占用闪存 存储  器、具体如下所示:

    应用代码1: 6C00-6F8E

    应用程序代码2:  6C00-FC7F  10000-15482   

    在引导代码中, 使用命令【asm ("mov &0xFCFE,PC;");】  跳转到应用程序。

    当我下载应用程序代码1时, 它可以正常工作。

    当我下载应用程序代码2时、  它 无法正常工作。

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

    对于复位矢量、这看起来正常、但您也以同样的方式处理中断函数吗?

    您需要为引导加载程序和应用程序中使用的所有函数添加中断处理程序。

    一旦中断发生并使能、它将跳转到器件中断矢量表中定义的程序地址(复位矢量下方的存储器位置)、然后根据您的配置跳转到作为引导加载程序一部分的处理程序。 然后、您需要在这里决定这是否需要由引导加载程序处理、或者您是否进一步分支到应用程序中、类似于您已经完成的复位操作。

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

    APP 中断处理程序是-Z (code) INTVEC=FC80-FCFF。
    引导中断处理程序为-Z (code) intvec=FF80-FFFF。

    您是否有任何引导加载程序示例(应用程序代码>0xFFFF)?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    每当发生中断时、硬件都会检查0xFF80 - 0xFFFF 范围内的中断矢量。
    这在器件的硬件中是固定的、不能更改-中断源到中断矢量的映射请参阅数据表。

    现在、这是基于我们的设置和配置、始终位于引导加载程序区域、您需要为每个中断生成一个 trampoline 函数、该函数将跳转到应用程序的中断处理程序函数中。

    遗憾的是、我没有可用的引导加载程序示例。
    您是否已经检查了是否可以使用 BSL、BSL 是大多数 MSP430器件的一部分。 这是一个集成的引导加载程序、可用于更新 MSP430内部的固件。 如果需要、只需在数据表中搜索 BSL 即可找到更多信息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    由于已有一段时间没有进一步讨论、我认为您可以解决问题并找到解决方案。
    您是否可以按下 Resolved 按钮并关闭线程。
    如果对此主题有任何后续讨论、您可以随时再次打开主题。