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.

[参考译文] MSP432E401Y:无法通过 ROM BSL 对闪存地址0-7进行编程

Guru**** 2561060 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/899764/msp432e401y-unable-to-program-flash-addresses-0-7-through-rom-bsl

器件型号:MSP432E401Y

我正在编写一个 PC 应用程序来与 ROM 引导加载程序通信、以便通过 UART0串行接口加载我的代码。  我的应用程序会同步波特、发送下载和状态命令、发送所有数据、BSL 不会报告错误。  然后、我使用 JTAG 检查闪存、我看到除了前8个字节外、每个字节都是正确的。  由于这是堆栈指针和复位矢量、我的代码不会运行。  

我尝试过不同大小的块、仅8、32、200。  在所有情况下、前8个字节都不会编程。

我已经尝试在刷写映像的其余部分后返回、然后仅刷写前8个字节。  BSL 不报告错误、但字节0-7保持在0xFF、

前几个字节上是否有某种类型的锁定?  如何通过 UART0使用 ROM BSL 对其进行编程?

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

    这听起来像是 Erratum MEM#15的记忆[参考勘误表(SLAZ709)第7页]。 这似乎是指一组不同的词语,但我想知道这是否相关。

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

    问题已解决。  一个巧妙的未记录功能。

    BSL 使用递增计数的内部地址计数器。  这让我感到担忧、因为这会先写入矢量、然后是应用。  如果应用程序加载失败、则会设置矢量、BSL 会在复位时尝试运行错误代码。

    为了防止这种情况的发生、BSL 在代码的其余部分被载入后等待对前8个字节进行编程。  我的错误是、我发送的大小比下载命令所需的大小稍大、然后编写了我的应用程序、而不是其余的应用程序。  如果您没有准确写入下载命令中指定的整个范围、BSL 将不会完成并写入前8个字节。  正确编程准确的字节计数后、向量被写入。

    这是一个针对上述情况的出色保护特性。  如果您未完成加载、BSL 仍将在复位时运行、因为向量仍为0xFF。  应该在 BSL 文档中对其进行描述。