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.

[参考译文] MSP430FR2355:MSP430FR2355,BSL,不会擦除或加载新代码。

Guru**** 2538930 points
Other Parts Discussed in Thread: MSP430FR2355, MSP-EXP430FR2355, MSP-FET

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/736686/msp430fr2355-msp430fr2355-bsl-does-not-erase-or-load-new-code

器件型号:MSP430FR2355
主题中讨论的其他器件: MSP-EXP430FR2355MSP-FET

使用 I LOAD 下方的代码、在 CCS-8中以调试模式运行。 我运行脚本编写器。 我获得了大量 NACK 返回、在下电上电后、MSP430FR2355运行之前加载的代码、而不是通过 BSL 脚本程序加载的新代码。

代码:

#include


int main (空)

//
//时钟配置
//

//停止看门狗计时器
WDTCTL = WDTPW | WDTHOLD;

//根据 MCLK 的器件数据表的要求配置一个 FRAM 等待状态
//在配置时钟系统之前在8MHz 以上运行。
FRCTL0 = FRCTLPW | NWAITS_1;

_bis_SR_register (SCG0);//禁用 FLL

CSCTL1 = DCORSEL_3;// DCO 范围= 8MHz

CSCTL2 = FLLD_0 + 243;// DCOCLKDIV = 8MHz

_DELAY_CYCLES (3);

_BIC_SR_register (SCG0);//启用 FLL

//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;

_disable_interrupt ();
((((void (*)))))0x1000)();

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想我错过了、因为它说是可选的、显然不是。 这可能是我问题的全部原因。 通常有8个数据位加奇偶校验和1个停止位、但这似乎是正在传输的数据。 (我试过、不起作用、但我今天没有机会去探究。) 请向 George 发送提示以查找此信息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    为了澄清这一点、Don、BSL-Scripter 依靠硬件接口在/Reset 和 Test 上生成硬件调用模式以及芯片所需的8/E/1格式。   (默认情况下、Scripter 使用8/N/1、但如果在模式行上使用奇偶校验开关、则会切换到8/E/1。)  据我所知、这些接口可实现 SLAA535a.pdf 中所述的 MSP-FET、Rocket 和 klodge 等所有功能(我已经过测试、并且工作正常)。

    如果您不使用其中一个、那么您仍然可以使用 BSL 脚本程序、但是:

    1. 如果要使用硬化调用、则必须使用其他方法来生成模式。  但是、如果您通过固件中的软件调用、这不是问题。

    2、 必须使用奇偶校验开关。

    我曾在一开始就想您尝试从您的固件调用 BSL、但您可能会与其他人混淆。  无论如何、无论您如何调用、如果您不使用经批准的硬件接口、您都必须考虑奇偶校验开关。

    我想我还应该说、您可以使用通用 USB 转串行适配器作为硬件接口、但必须跳过一些糟糕的情况、正如我在关于这个主题的 Github repo 中所描述的那样:

    https://github.com/gbhug5a/CP2102-with-BSL-Scripter-for-MSP430

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

    想要查看是否还有其他问题? 如果没有、我将关闭帖子。

    谢谢、

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

    我已将这一点交给 Wes 来了解我们的配置为什么会起不同的作用。  我怀疑这是奇偶校验问题。  如果他需要一些东西、请多开几天。  谢谢!

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

    我使用脚本和我们的硬件系统(USB (虚拟 COM 端口)到 RS232转换器到 CMOS 3.3V 逻辑)成功运行了 BSL。

    模式 FRXX UART 9600 COM188奇偶校验

    批量擦除

    延迟200

    RX_PASSWORD pass32_default.txt

    RX_DATA_BLOCK your_program.txt

    但是、当我在应用程序代码中调用 BSL 之前将16MHz 系统时钟更改为8MHz 时、它不起作用。 我仍在处理这个问题。

    此外、我应该注意的是、当我在 MSP430FR2355 Launchpad 上使用 UART (虚拟 COM 端口)时、似乎不接受终端程序(如 HyperTerminal、Brays 或 TeraTerm)的奇偶校验更改、因此它不能在具有板载 USB 转 UART 转换器的 Launchpad 上工作。 这不是一个问题、但我们没有预料到。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我能够使用下面的代码片段从我们的应用代码调用 BSL。 我在不更改 UART 设置的情况下将时钟设置为1MHz、BSL 工作正常。 我发现在启用 FLL 后、它的工作更可靠、但有延迟。


    //禁用所有中断
    _disable_interrupt ();

    //将时钟重新配置为1MHz (默认值)
    _bis_SR_register (SCG0);//禁用 FLL
    CSCTL1 = DCORSEL_0;// DCO 范围= 1MHz
    CSCTL2 = FLLD_0 + 30;// DCOCLKDIV = 1MHz
    _DELAY_CYCLES (3);
    _BIC_SR_register (SCG0);//启用 FLL

    //设置时钟以调用 BSL 后的延迟
    _DELAY_CYCLES (3);

    //调用 BSL
    ((((void (*)))))0x1000)();


    总之、所需的修复主要是在调用 BSL 并使用脚本文件中的奇偶校验参数字之前将 DCO 设置为1MHz。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Wesley、您能解释一下您用作硬件接口的内容吗? 听起来就像您使用的是 USB 转串行适配器、而不是 MSP-FET。 对吗? 哪一个?

    此外、除了8/N/1之外、任何 Launchpad 都可能不使用。 我的旧 G2 Launchpad 也是如此、它似乎也适用于您。 如果所有这些都为真、则可以使用 Launchpad 进行 JTAG 闪存、但不能使用 BSL 进行闪存。

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

    很棒! 我很高兴您能让它正常工作! 同时、感谢 George 帮助解决这个问题。

    最后、我想提醒一下、您需要仔细检查 FR2355 BSL 使用的所有外设(时钟系统、eUSCI_A 和 Timer_B)是否都已清除、然后再调用 BSL。  一切似乎都正常、但我想提一下、如果您的应用代码在尝试调用 BSL 之前触及这些外设中的任何一个、 请参阅以下内容:

    这意味着您需要确保在调用 SW BSL 之前满足以下条件:

    1:时钟处于或低于8MHz (您正在执行的操作)

    eUSCI_A 寄存器被清零

    定时器_B 寄存器被清零  

    因为您"在不更改 UART 设置的情况下将时钟设置为1MHz ..." 符合条件1。 请仔细检查 eUSCI_A 寄存器和 Timer_B 寄存器是否被清除。  

    在调用 BSL 之前、还必须将 UART 配置为9600波特。 您已经这样做了、但出于完整性考虑、我想在我的帖子中强调以下内容:

    谢谢,很棒!

    Mitch