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.

[参考译文] MSP430FR5739:在程序操作期间进入ROM Bootloader

Guru**** 2587365 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/617864/msp430fr5739-entering-rom-bootloader-during-program-operation

部件号:MSP430FR5739

我的MSP430设计使用UART进行通信。  如果用户将正确的命令发送到UART,我想将其插入ROM bootloader。  我用于执行此操作的c代码是:

__DELAY周期(200万);
ClockDriver_SetClockForBootloader();
__DELAY周期(200万);
__DISABLE_INTERRUCE();
(void (*))0x1000)();

这会将MCLK更改为8 MHz (引导加载程序用户指南指出需要此频率),然后调用跳转指令。  我在执行此操作时失去了与UART的连接,但我无法与引导加载程序通话。  但是,如果我在代码的开头调用这些代码行,我就会跳到bootloader,我就可以很好地与它交谈。  我使用的波特率(5.76万)与bootloader使用的波特率不同,但我确实尝试将自己的波特率更改为bootloader波特率(甚至使用像bootloader一样的奇偶校验),但这也不起作用。  对其他要尝试的事情有什么想法?  我真的不想依赖硬件输入序列与引导加载程序对话。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您指的是哪个引导加载程序指南? 在输入BSL空间之前,您不必手动更改MCLK,因为ROM代码会自动完成此操作。 由于该项在UART控制之前工作,您可能应该在跳转到BSL之前重置eUSCI寄存器。

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

    我指的是SLAU550H。  注意:  

    “MSP430FR58xx,MSP430FR59xx,MSP430FR68xx和MSP430FR69xx上的BSL必须具备
    以8 MHz的最大频率执行。 如果设备以频率运行
    如果MMCLK频率高于8 MHz,则在调用之前必须将其设置为8 MHz或更低
    BSL。"

    听起来不错。  

    关于重置eUSCI寄存器,是否有一种简单的方法可以轻松地将所有外设寄存器重置为整个eUSCI?  或者,是否有办法重置所有外设寄存器,但不修改程序计数器?  我想让微型电脑“记住”它应该在重置所有内容后跳到ROM Bootloader。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    啊,我当时假设你的工作频率是默认的1 MHz,但是如果它真的超过了8 MHz,那么改变时钟频率是一个明智的做法。 我不确定是否有一种简单的方法来重置eUSCI寄存器,但在执行(void (*))0x1000)()之前,您应该能够这样做;因此MCU在执行后将跳到正确的位置。

    此致,
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我重置了所有eUSCI寄存器,并修复了它。 UART引导加载程序中的某些内容未按照我的设置进行重置。 我没有花时间去弄清楚到底是哪一个寄存器,我只需要重置它们。