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.

[参考译文] MSP430FR5994:MSP430FR5994上的 BSL 批量擦除

Guru**** 2535150 points
Other Parts Discussed in Thread: MSP430FR5994, MSP-FET, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/896123/msp430fr5994-bsl-mass-erase-on-msp430fr5994

器件型号:MSP430FR5994
主题中讨论的其他器件: MSP-FETUNIFLASH

您好!

我正在尝试使用整体擦除来实现基于 MSP430FR5994的控制。  BSL 的工作大部分正常(除批量擦除之外的所有操作)。  我可以输入 BSL、读取信息并将信息写入 MCU、甚至可以进行固件更新。  但是、批量擦除完全不起作用...

首先、我将通过 UART 条目使用 BSL。  我修改了 BSL Scripter 应用程序、将"FORCE_BSL" UART 命令发送到我们的应用程序、以强制其进入 BSL。  我们将此方法用于上述所有命令-因此此方法有效。

COM 设置为9600波特。

一些背景:

  1.  文档指出、我们的芯片不会回复批量擦除命令。  但是、它似乎正在使用一条 BSL 消息进行响应。
    SLA550q -"MSP430FR5xx 和 MSP430FR6xx 引导加载程序不发送针对批量的 BSL 内核响应
    擦除执行。 BSL 确认为0x00或0xFF。 忽略确认、然后
    再次初始化与 BSL 的通信。"

    请参阅下面#5中 BSL 的回复...
  2. 整体擦除、即使它表示成功、它也不会擦除芯片...  只需重新启动它、我们的应用程序就会继续运行。
  3. 我们的 IP 封装已关闭。  针对这个的所有寄存器被设定为0


  4. 此外、根据我们的芯片、文档规定、如果 BSL 签名设置为除0x5555 0x5555或0xAAAA 0xAAAA 以外的任何内容、则芯片应自动将其自身擦除。  
    这不是发生的。  我们的签名设置为0xFFFF 0xFFFF、所有发生的事情都是重启。

    slaa685 -第4.2节
  5. 我们知道密码、并且在设置密码(每个文档都允许)之前尝试发送批量擦除、之后、两者都不会擦除芯片。
    文档 slau550q -第4.1.5.3节-说明无需密码。 (不受保护)
    来自 BSL-Scripter -请注意、我们的芯片不需要回复。
    密码后:
    批量擦除
           [80][01][00][15][64][A3]
           <80><05><00><3a><00><08><35> <35><9f>
           批量擦除成功!
    密码前:
    批量擦除
           [80][01][00][15][64][A3]
           <80><02><00><3b><04> <84>
           [ERROR_MESSAGE]BSL 已锁定!
  6. 作为参考、我们的 BSL 版本:
    TX_BSL_VERSION
           [80][01][00][19][e8][62]
           <80><05><00><3a><00><08><35> <35><9f>
           供应商:[TI] CI:[08] API:[35] PI:[B3]

那么、我的问题是、如何使其正常工作?  我缺少什么?  芯片的连线方式是否能够防止批量擦除(将 GPIO 连接到高电平与低电平)?

谢谢、

-Mike

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

    您好 Mike

    您使用什么主机?

    MPU 在 CCS 默认情况下启用、您是否禁用 了它?

    您是否在空白器件中尝试过它?  

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

    您好、Gary、

    感谢您的回复...  关于您的问题...

    1.  对于主机、我假设您是指连接到...的硬件。  HW 是定制板...  这就是为什么我想知道我们是否缺少一些关键硬件连接来允许批量擦除...
    2. 我们确实使用 MPU -并对其进行设置。  我们不使用该模块的 IPE 部分。  根据我所读的内容、只有 IPE 部分会阻止批量擦除...  
    3. 我尚未尝试使用空白设备。  我必须调查我是否可以...  在检测到空白时、此芯片不会自动进入 BSL。。。  我们还没有编程板可用于检查 RST 和测试线...  现在、我们使用了软件应用程序。  我们通过 UART 向我们的应用发送命令、然后应用将使用 BSL 指南中的信息跳转到 BSL。

    奇怪的是、我们可以通过设置密码和发送固件映像来执行固件更新、而无需批量擦除。  

    在跳转到 BSL 之前、我可以轻松地尝试禁用 MPU。  并且还将尝试完全禁用并跳转到 BSL...  至于空白器件、到目前为止、我不能这么做。  我们的编程接头未将仿真器(MSP-FET)连接到 UART 引脚...  在检测到空白时、该 MCU 不会跳转到 BSL ...

    谢谢、

    -Mike

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

    Gary 是您的专家、但我发现从正在运行的应用程序进入 BSL 可能会有问题、因为从 BSL 无法预期的方式启动以来、情况可能发生了变化、如果在重置后立即进入 BSL、情况就不会发生变化。  但是,令人惊讶的是,除了批量擦除之外,一切似乎都正常。

    我认为、尝试使用测试/复位调用触发器来查看批量擦除是否与之配合使用可能会很有用。  有一个适用于 Windows 的 Scripter 版本、它可以选择生成该模式、并允许您将通用 USB 适配器用作硬件接口(只要它包含 DTR 和 RTS)。  请参阅此 REPO 中的版本:

    https://github.com/drcrane/bslscripter-vs2017

    但我必须提出与我在另一个主题中提出的问题相同的问题。  为什么需要批量擦除?  这是一个 FR 器件、您可以说无需批量擦除即可成功更新固件。  为什么需要擦除任何内容?

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

    您好、George、

    关于通过应用程序进入 BSL、我同意...  除批量擦除之外、所有功能都正常工作...  批量擦除仅会导致重新启动...  我只能假设我们在从应用程序进入 BSL 时有正确的设置、因为实际上每个东西都可以...

    跳转到引导的代码非常简单、与指南中的示例类似...

    • 我们关闭 UART 并清除寄存器(允许 BSL 使用)
    • 禁用中断
    • 切换时钟以在1MHz 时使用 DCO
    • 软件延迟三个周期
    • 将 FRAM 重置为新的 DCO 时钟时序
    • 另一个 SW 延迟- 10个周期
    • 跳转至引导-((void (*)() 0x1000)();

    不确定如果所有其他工作正常、我们还需要什么才能使批量擦除正常工作...  当我们读出数据、然后跳回到我们的应用中的复位矢量时、也可以正常工作...

    为了回答您关于为何需要整体擦除的问题、我们的目标是避免为了对我们向硬件团队分发的许多调试构建执行固件更新而必须处理密码维护...  在我们的开发周期中、我们有许多构建迭代(以及一些通用硬件测试构建)。  我们不需要维护所有密码的列表、然后将它们与所有不同的调试构建相关联...  到目前为止、我们只有少数 MSP-FET (我们可以使用 uniflash)。  最后、我们的目标是使用 BSL 读取/写入编程所需的数据、或者在不记得 MCU 上的构建时进行批量擦除...

    关于测试/重置调用...  我们计划将该功能添加到我们的编程板和通过 BSL 进行通信的 PC 工具中。  但是、硬件将在本周晚些时候至下周初推出。  SW 取决于下一优先级(固件更新与应用程序命令等)

    谢谢、

    -Mike

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

    我知道。  嗯、看到解决方案是什么会很有趣。  在最坏的情况下、您可以为向量使用跳转表、以便每个版本都具有相同的密码。  但是批量擦除应该只起作用。

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

    大家好、

    根据建议、我们现在知道启用 MPU 将防止批量擦除...  对于我的修复、在跳转至 BSL 例程中、我只需在跳转到 BSL 之前禁用 MPU。  我想、如果我们使用测试/复位线路来进入 BSL、我们不会看到这个问题、因为从 BOR 进入 BSL 时、MPU 未启用。  如果我们决定锁定 MPU、我们只需在我们不知道密码的情况下、如果我们要更新固件(批量擦除)、就必须强制使用硬件调用 BSL。。。

    我确实验证了即使启用了 MPU、我们仍然可以输入 BSL 密码、并直接在任何位置写入 FRAM ... 因此、MPU 使能似乎只阻止批量擦除...

    非常感谢、

    -Mike