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.

[参考译文] MSP430FR2311:UART 闪存后无法从 BSL 跳转至用户程序(Energia)

Guru**** 2390735 points
Other Parts Discussed in Thread: ENERGIA, MSP430FR2355

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/992665/msp430fr2311-unable-to-jump-to-user-program-energia-from-bsl-after-uart-flash

器件型号:MSP430FR2311
主题中讨论的其他器件:EnergiaMSP430FR2355

在上一个主题中、我从 Energia/.PlatformIO 中写入的程序跳转到 BSL 后、上载并连接 BSL 以通过 UART 工作

现在、我希望能够仅使用 UART 命令退出 BSL 并开始执行程序。

根据 BSL 用户指南、我似乎应该能够发送 PC 命令?

浏览程序.hex 文件、我应该跳转到的起始地址似乎是0xF100?

生成的数据包 I 为:0x80 0x04 0x00 0x17 0x00 0xF1 0x00 0xBA 0xEE

但是、似乎不会发生任何情况、尽管有时 BSL 看起来不再执行命令。

我不确定 MCU 是否正在跳转到"limbo"?

或者启动程序、但由于它是在 Energia/Catformio 中编写的、因此有些设置不正确、因此它会锁定?

还是发送了错误的命令?

我们非常感谢您的任何帮助和指导!

谢谢、

Matt

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

    您好、Matt、

    您的数据包看上去一切正常。

    1.愚蠢的问题、但你确定你实际进入了 BSL 吗? BSL 不会向负载 PC 返回内核响应、因此我假设您正在对器件进行重新刷写。  写入 FRAM 后、您是否会得到响应?

    2.是否确定新的 FW 映像从此地址开始?

    3.您可以闪烁 LED 指示灯还是指示代码不同的指示灯?

    4.如何进入 BSL?  采用 RST/TST 引脚的硬件方法或软件跳至1000美元?

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

    尊敬的 Dennis:

    很高兴我至少得到了一个部分,哈哈。

    答案:

    1. 很确定。 进入 BSL 后、我可以执行批量擦除、并使用该实用程序刷写了新固件的.hex 文件。 我也可以先闪存、然后再闪存、而无需复位
    2. 十六进制的第一行是0xF100  
    3. 是的、程序会使 LED 闪烁、然后在我发送字母 c 后跳转到 BSL
    4. 软件跳转(我使用我添加的代码更新了我之前的帖子、以便在跳转之前清除串行中断)

    我怀疑终端实用程序发送的一次性命令由于某种原因未被读取。 这可能是问题所在。

    UART COM 可以正常使用 MSP430.NET 实用程序。 但是、如果我尝试使用终端工具发送像批量擦除这样的命令来直接发送十六进制数据包、则不会发生任何情况。 如果它在终端上发生故障、我立即尝试使用 MSP430.NET 实用程序、它的工作正常、表明我实际上是在引导加载程序中。

    我已经尝试过 PuTTY、RealTerm、XCTU 和 Pololu 发送器以及直接从 MCU 进行的发送器、一切都很顺利。

    以与 Wireshark 进行比较。 使用终端实用程序发送批量擦除命令:

    以及 MSP430.NET 上的相同命令:

    我是否在如何实际发送这些值方面做了一些一般性的错误?

    我还尝试使用 tensy 和 Serial.write({},length)发送数据包,但也没有得到回复。

    谢谢、

    Matt

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

    我解决了无法通信的问题(奇偶校验设置不正确)。

    但我仍然无法跳转到该程序。

    当我发送 LoadPC 命令时、我现在失去了对 BSL 接口的访问权限、但程序不会开始执行。

    是否需要执行一些特殊操作来恢复 Energia 程序并使其运行?  

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

    您好、Matt、

    很好的酒店!  是的、它通常是被忽视的小细节。

    好的、那么您是否尝试使用器件的复位矢量地址而不是 PC 负载?  它是0xFFFE。  我怀疑、虽然存储器从0xF1000开始、但并不一定意味着应用程序的第一条指令加载在该处。

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

    我刚刚尝试了0xFFEE。 运气差。

    数据包: 80 04 00 17 00 FF FE 64 C3

    我首先得到的答复是 :52 51 51 51 51

    指示校验和错误。 但我的计算方法与我计算上一个的方法相同(使用 下面粘贴的脚本)。

    再次发送相同命令后、我得到:

    回应:00

    然后引导加载程序停止响应。

    程序仍然无法正常工作;没有闪烁的 LED

    我还转到了 MSP430FR2355上的测试、以查看这些功能是否更好(并且因为我的程序需要额外的存储器)。

    我尝试了0x8000 (来自十六进制文件)、0xF100和0xFF80 (来自链接器脚本)以及0xFFFE 的程序起始地址、一切都很顺利。  

    每个代码退出引导加载程序、但不启动程序。

    还有其他值得尝试的建议?

    CRC16的代码示例:

    无效
    CRC_CCITT_INIT (空)

    CRC = 0xFFFF;


    无效
    CRC_CCITT_UPDATE (无符号字符 x)

    unsigned crc_new =(unsigned char)(CRC >> 8)|(CRC << 8);
    crc_new ^= x;
    crc_new ^=(unsigned char)(crc_new & 0xff)>> 4;
    crc_new ^= crc_new << 12;
    crc_new ^=(crc_new & 0xff)<< 5;
    CRC = CRC_NEW;


    unsigned int
    CRC_CCITT_CRC (空)

    返回 CRC;

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

    对下一步要尝试的内容有任何建议?

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

    您好、Matthew、

    不幸的是,我空手地把这一个交给了我。  我忘记问的一件事是、如果您循环通电、MCU 是否开始运行您的代码?

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

    感谢您的最终检查

    最后、我使用 CCS 中内置的 Energia 代码工具让它在我的终端上正常工作。 当我在 CCS 中编译代码时、它看起来工作正常。

    在 PlatformIO 配置中使用的链接器或构建标志可能存在问题?

    谁知道?

    感谢您的帮助、

    Matt