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.

[参考译文] MSPBSL:UART 编程似乎并不是根据文档进行的

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/728433/mspbsl-uart-programming-does-not-seem-to-be-according-to-documentation

器件型号:MSPBSL
主题中讨论的其他器件:MSP430FR2422

您好!

在我们的产品中、我们将 STM32与 MSP430FR2422配合使用。 MSP430只能由 STM32通过 UART 进行寻址。

我们现在在 STM32中实施软件来更新 MSP430上的固件、但到目前为止、未能成功获得正确的响应。 我们将遵循 SLAU550P 中所述的协议。

通过向 MSP430FR2422上的固件发出命令、我们可以启动 BSL。 之后、我尝试发送一些命令(密码保护或不受密码保护)、但我没有得到我所期望的响应。 我尝试发送 CRC 校验、并期望返回有关命令被锁定的错误。 除了我接收的是两倍的0x51;标头不正确。 此外、这是在我仍在发送数据时发回的。 根据文档0x80应该是标头字节、这是不正确的吗?

其他命令会显示不同的行为、有些命令会发回一个0x51、有些命令不会发回任何内容、我将使用逻辑分析仪读取这些内容、然后将其添加到帖子中。

如果能在这方面提供任何帮助,将不胜感激。

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

    正如承诺的那样、下面是一些其他命令的捕获:

    • 更改波特率、无响应
    • TX BSL 版本、无响应
    • TX 数据块、错误的标头
    • 加载 PC、错误的接头

    这些捕获都是从 MSP430一侧获取的、因此我知道字节正确到达、我们也可以与 MSP430中的用户应用进行完美通信、因此我非常确信通信线路工作正常。

    改变波特率:

    TX BSL 版本:

    TX 数据块:

    加载 PC:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bas、
    是空白器件表示您是否使用第3.3.3章中所述的空白器件检测。 SLAU550P 的详细说明?
    如果不是、您可以提供 BSL 进入序列吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Dietmar 您好!

    不是、我并不是说检测到空白器件。 通过向 MSP430上的固件发送命令、我们可以输入 BSL。 我已经了解了 MSP430固件的来源、并发现我们从 STM32发送的命令会调用以下 asm 代码:

    _disable_interrupt ();//禁用中断
    
    SET_ERROR_LEed (true);
    
    //启动 BSL
    __asm (" MOV.W #1、 R12");
    __asm (" MOV.W #0xDEAD、 R13");
    __asm (" MOV.W #0xBEEF、 R14");
    __asm (" MOV.W #_BSL_START、R15");
    __asm (" MOVX.A R15、 PC"); 

    我对 MSP430的编程并不是很熟悉(我也不是 MSP430上固件的编程器)、因此如果这不是您的意思、我很乐意听到它。

    此致、

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

    您好、Bas、

    没问题、我还要求我们的 BSL 专家检查此案例。 同时、我仍然不确定您是否真正调用了 BSL。
    请查看

    这里重点介绍第1.3.1章"硬件 BSL 调用"。

    如果您可以在示波器屏幕截图上向我展示 BSL 输入序列、则可以帮助了解是否调用了 correcyty。

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

    Dietmar 您好!

    这里的问题是、我们不使用硬件 BSL 调用、而是使用软件 BSL 调用、如 SLAU550P 的3.3.1.1中所述。 我们可以通过 MSP430FET 对 MSP430进行编程、这很好、我不确定这是否使用 BSL、我们只是软件 BSL 调用有问题。

    另外、我认为 SLAU319T 文档适用于基于闪存的器件。 我们使用的是 FRAM 器件(MSP430FR2422)。 这就是我一直使用 SLAU550P 文档的原因。

    我将尝试通过 UART 使用硬件 BSL 调用、并使用相关数据返回给您。

    此致、

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

    很抱歉、您使用的文档是正确的。 那么、根据您说过的内容、您可以通过 STM32正确触发调用函数? 这是如何通过 UART 命令或端口中断实现的?
    您能否展示调用 BSL 的函数?
    BSL 指南介绍了如何调用 BSL
    _disable_interrupt ();//禁用中断((void (*)()) 0x1000);//跳转至 BSL

    我认为您也正确地实施了该操作吗? 上面的命令不会跳转至 BSL 启动的地址0x1000
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Dietmar 您好!

    到目前为止、我无法通过硬件序列启动 BSL、但这是因为我们使用的硬件。 这一工作仍在进行中。

    调用 BSL 的函数与上面的命令相同。 跳转至地址0x1000由 asm 命令完成:

    __asm("        MOV.W  #__BSL_START, R15");
    __asm("        MOVX.A R15,          PC");

    可能是我们必须在更改 R12-R14之前跳转到地址0x1000、这是需要的吗?

    但是、如果我们未正确输入 BSL、为什么它用0x51进行响应、我们会发现什么奇怪?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bas、
    不是这样、我想我会与我们的 BSL 专家进一步讨论、然后再回来。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Dietmar 您好!

    已发现问题;与 BSL 通信时似乎需要偶校验位、闪存器件引导加载程序文档(SLAU319T)中提到了这一点、但 FRAM 器件文档(SLAU550P)中没有提到这一点。

    添加奇偶校验位后、通信按预期进行、我现在收到一条"BSL 锁定"消息:

    TI 是否可以更新 SLAU550P 以包括 SLAU319T 中提到的偶校验位?

    此致、

    Bas Priest

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

    您好、Bas、

    感谢您的意见。 我们将更新有关 SLAU550奇偶校验信息的文档。