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.

[参考译文] MSP430F5659:为 MSP430F5659 MCU 实现 USB 引导加载程序

Guru**** 2465220 points
Other Parts Discussed in Thread: MSP430F5659

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1383993/msp430f5659-implementing-usb-bootloader-for-msp430f5659-mcu

器件型号:MSP430F5659

工具与软件:

您好!

我正在为 MSP430F5659 MCU 实现引导加载程序。 我刚刚开始阅读该文档、但我无法完全理解如何实施它。 是否有适用于 MSP430F5659 MCU 的引导加载程序代码? 请使用指南

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

    TI 出厂预加载的开源 BSL 可在 slau319封装中找到。 一个存储在2KB 受保护的 BSL 闪存段内。

    slaa600还包含 TI 开源 MSPBoot。 该代码存储在主闪存中。

    F5659在出厂时预加载了最小化 USB BSL (2KB)、而使用时则是从器件 RAM 下载并执行完整的 USB BSL。

    提供固件更新示例 Win GUI (开源、可从 USB 开发包页面下载)。

    此外、还有开源命令行 BSL Scripter 以及脚本示例。

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

    Hi Baseer、

    您可以浏览以下文档并浏览 BSL 内容、我认为其中对资源进行了很好的总结。

    https://www.ti.com/lit/ug/slau840a/slau840a.pdf?ts = 1720424290256&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FMSP430F5659 

    另外附带 BSL 产品页面:https://www.ti.com/tool/MSPBSL 

    B.R.

    SAL

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

    您好!

    我下载了 USB 固件升级应用程序。 表明器件未处于 BSL 模式。 现在、我是否应该使用此命令通过我的主应用程序将其调用到 BSL 模式?

    disable_interrupt();//禁用中断
    ((void (*)()) 0x1000)();//跳转到 BSL

    进入 BSL 模式后、如何使用此应用。 我是否必须将文件转换为.txt 等任何不同的格式?如何转换?

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

    是的、可以。 同时,文档总结了 BSL 调用的所有方法:https://www.ti.com/lit/ug/slau319af/slau319af.pdf . 您也可以尝试硬件调用。

    我想 txt 文件适合 GUI。 我想有一些关于 GUI 的指南、您可以查看: https://www.ti.com/lit/an/slaa452c/slaa452c.pdf。它适用于旧版本、但提供了简要介绍。

    B.R.

    SAL

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

    大家好、我们尝试通过硬件调用、不幸的是、它不起作用、我也尝试了通过软件方法调用、它也不起作用。 您能指导我如何调用 BSL 吗?我需要任何密码或其他东西吗?

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

    如果要使用原始出厂预加载的 USB BSL、则 F5659电路板必须填充 USB 硬件相关器件(可以查看 LP 5529原理图)。 电路板上必须有4、8、12或24 (不能100%确定最后一个) MHz XT2。

    然后可同时按下 RESET 和 PUR / BSL 按钮来调用 BSL、并首先释放 RESET。

    如果电路板上没有按钮、可以擦除器件、在上电后具有空白复位矢量(0FFFFh 值)的器件应进入 USB BSL 模式、并由任何操作系统自动枚举、而无需请求任何驱动程序。

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

    如果我错了、请更正我。 如果我的 PC 跳转到 0x1000位置、这是否意味着 BSL 被调用? 遗憾的是、我的硬件是可定制器件、不适合通过我想通过软件调用至 BSL 的硬件来调用 BSL。

    因此、在调试过程中我检查了程序计数器是否跳转到0x1000位置、当它达到0x1018时、会显示错误"堆栈"STACK"(当前内存:0x3400)的堆栈指针超出堆栈范围"。 请参考

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

    Hi Baseer。

    PC 设置为0x1000后、应触发 BSL。  TI 建议清除 BSL 应用程序中使用的任何模块寄存器的配置、因为外部应用程序的配置可能会中断 BSL 应用程序并导致意外行为。

    由于您的项目尚未加载相关符号(ROM BSL)进行调试、因此我认为您不能在 BSL 模式下进行调试。 它使用项目符号。

    B.R.

    SAL

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

    大家好、 我可以成功调用 BSL 、但问题是我必须使用单独的固件来调用 BSL、然后通过引导加载程序加载我的主应用程序。  

    但如果我必须再次调用 BSL、我再次必须使用调用固件通过 JTAG 对 MCU 进行编程。 现在剩下的唯一问题是、我每次需要通过引导加载程序对应用进行编程时都无法对 BSL 调用固件进行编程、我需要一种机制来在主应用中处理此过程。  

    如果您能为我提供与此相关的任何指导、将会很有帮助。 感谢您的支持

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

    Hi Baseer、

    始终需要一些外部 触发源来 调用 BSL。 它在某种程度上是硬件触发信号、它简单且直接。

    虽然、如果不支持电路板中的硬件调用、则 需要设置一些逻辑来执行软件触发。  以下是 两个典型示例:

    1.有一个连接接口,如 UART。

    ->当接收到用户定义的特殊命令时、将处理软件 BSL 调用。

    2.存在 GPIO 输入。

    ->用户可以检测 GPIO 中的输入信号、如果该信号在特定时间内保持高电平或低电平、则应用程序代码中会处理软件 BSL 调用。

    我想您可以为您自己的电路板设计一个场景。

    B.R.

    SAL

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

    感谢您的详细解释。 我已经 通过 MODBUS 协议通过 USB Via 创建了这个场景 、目的是进入 BSL 模式、但这没有任何效果、或许我犯了一个错误、我想尝试解决这个问题。 但我非常感谢每一个帮助的人。

    只是指导我做另一件事。 如果我使用 MODBUS 协议通过 USB 发送命令以进入主应用程序中的 BSL 模式、那么我必须先执行所有预先的任务来重新启动 USB 以便在 BSL 模式下使用或复位任何外设。 因为如果我使用独立的调用代码、它会调用 BSL、但我在主应用程序中使用的代码则不会调用 BSL。 请提供相关指导。

    BR

    Baseer

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

    这是我的代码。

    执行 (void (*)()0x1000)()后;微控制器进入未知状态。

    if (mbRxBuff[2]== 0xF9 && mbRxBuff[3]== 0xE8 && mbRxBuff[4]== 0x5A && mbRxBuff[5]== 0x5A)//通过 docklight 接收数据

    WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器--在本例中未使用
    //激活 USB 电缆上的5V VBUS 检测
    USBKEYPID = 0x9628;//解锁 USB 寄存器
    USBPWRCTL |= VBONIE;//启用 VBUS 开启中断
    USBKEYPID = 0x9600;//锁定 USB 寄存器
    while (1)


    _disable_interrupt ();//确保在 BSL 期间不会触发应用程序中断

    (( void (*))0x1000 )();//这会发送执行
    }

    }

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

    Hi Baseer、

    执行后 ((void (*)()) 0x1000)();微控制器进入未知状态。

    执行后、演示应进入默认 BSL 并处理 BSL 任务。

    您是否已清除 BSL 应用程序中使用的任何模块寄存器的配置、因为外部应用程序的配置可能会中断 BSL 应用程序并导致意外行为。  我想 BSL 也使用了 USB、所以 USB 应该恢复为非配置状态。

    B.R.

    SAL