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.

[参考译文] MSP430F5335:MSPFlasher 退出:10无法复位器件

Guru**** 2378980 points
Other Parts Discussed in Thread: MSP430F5335, UNIFLASH
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1249314/msp430f5335-mspflasher-exit-10-could-not-reset-device

器件型号:MSP430F5335
主题中讨论的其他器件: UNIFLASH

您好!

我们已经在我们的标准生产流程中使用 MSPFlasher (目前是 v1.3.20)实用程序在多种基于 MSP430F5335的产品上加载固件很长时间。 我们一直在加载自定义 BSL 映像以及正常的应用程序映像、没有任何问题。 我为此流程创建了一个批处理文件、以便我们的生产团队更轻松地完成该流程。 我要对 MSPFlasher 进行两次调用、一次用于对定制 BSL 进行编程、另一次用于应用。 最近、我更新了 BSL、以使用 JTAG 锁定功能、从而在现场部署产品时默认禁用 JTAG 访问。 如果复位期间某个 GPIO 接地、那么更新后的 BSL 允许在启动时启用 JTAG。 这一变更需要我们的生产人员将 GPIO 生产线接地、从而使标准批处理文件成功地对器件进行编程、即使对于具有默认出厂 BSL 的全新器件也是如此。

如果可能、我希望允许我们的生产人员进行初始编程(部分工厂 BSL)、而无需将 GPIO 线路短接至地。 为了达到此目的、我尝试了多种方法(未成功):

1) 1)我已经尝试使用 MSPFlasher 调整命令行选项、以便在对自定义 BSL 进行编程后不会重置器件、因此我可以进行第二次 MSPFlasher 调用以继续对应用进行编程、然后在完成后执行重置。 这是通过两次调用 MSPFlasher 完成的、似乎无法正常工作。

2) 2)如果先尝试对应用程序代码进行编程、然后对 BSL 进行编程。 我使用了带有-e 的 ERASE_SEGMENT 选项来尝试并允许 BSL 编程过程仅擦除 BSL 所需的存储器区域、但 BSL 代码显然超出了段边界、并且出现了错误。

3) 3)作为第三次尝试、我尝试将自定义 BSL 和应用程序代码组合到一个 Intel 十六进制文件中、以便我只需一次调用 MSPFlasher 即可对所有内容进行编程、但除非我将 GPIO 线接地、否则它似乎仍然不起作用。

以下是上面 GPIO 线未接地的选项3的结果:

D:\XA32>tools\MSPFlasher\MSP430Flasher.exe -w "E3_MSP.hex"-v -b -s -z [reset、VCC=3300]
*----- /|------------------ *
*/|_*
*/_/ MSP Flasher v1.3.20 *
*|/*
*----- |/------------------ *
*
*评估触发器...完成
*检查可用的 FET 调试器:
*找到 USB FET @ COM7 <-已选择
*正在初始化接口@ COM7……完成
*检查固件兼容性:
* FET 固件是最新的。
*正在读取 FW 版本...完成
*将 VCC 设置为3300mV...完成
*正在访问设备...完成
*读取设备信息...完成
*解锁 BSL 存储器...完成
*正在将文件载入器件。。。完成
*验证存储器(e3_msp.hex)...
#出口: 10
#错误:无法重置设备
*复位器件(RST/NMI)。。。完成
*开始执行目标代码。。。完成
*正在断开与设备的连接...完成
*
*------------------
*驱动程序:已关闭(EEM 轮询线程已激活)
*------------------

*/

当 MSPFlasher 退出时、应用程序不会自动启动。 如果我在完成上述尝试后对电路板进行下电上电、电路板将正常启动、看起来已成功对 BSL 和应用程序进行编程。

以下是上面的选项3在 GPIO 线接地的情况下的结果:

D:\XA32>tools\MSPFlasher\MSP430Flasher.exe -w "E3_MSP.hex"-v -b -s -z [reset、VCC=3300]
*----- /|------------------ *
*/|_*
*/_/ MSP Flasher v1.3.20 *
*|/*
*----- |/------------------ *
*
*评估触发器...完成
*检查可用的 FET 调试器:
*找到 USB FET @ COM7 <-已选择
*正在初始化接口@ COM7……完成
*检查固件兼容性:
* FET 固件是最新的。
*正在读取 FW 版本...完成
*将 VCC 设置为3300mV...完成
*正在访问设备...完成
*读取设备信息...完成
*解锁 BSL 存储器...完成
*正在将文件载入器件。。。完成
*验证存储器(E3_MSP.hex)...完成
*
*------------------
*参数:-w e3_msp.hex -v -b -s -z [reset,VCC=3300]
*------------------
*驱动程序:已加载
DLL 版本: 31400000
* Fw 版本: 31000000
*接口: TIUSB
硬件版本: U 3.0
JTAG 模式:自动
设备: MSP430F5335
* EEM : 7级, ClockCntrl 2
*擦除模式: ERASE_ALL
*程序文件: e3_msp.hex
*已验证: true
BSL 解锁: true
* InfoA 访问:错误
* VCC 打开: 3300mV
*------------------
*复位器件(RST/NMI)。。。完成
*开始执行目标代码。。。完成
*正在断开与设备的连接...完成
*
*------------------
*驱动程序:关闭(没有错误)
*------------------
*/

GPIO 线路接地时没有出现错误、并且应用程序会在 MSPFlasher 退出时自动开始运行。


你有什么建议,我可以做到这一点。 我希望在对 TI 的新器件进行编程时、无需将 GPIO 线接地、从而最大限度地减少我们的生产步骤。 我理解并希望以后所有的 JTAG 访问都需要将 GPIO 线路接地。

谢谢。
格雷格·邓恩

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

    1.您好像想再次报告您的设备中您定制的 BSL、对吗?

    2.为什么不能接受连接到 GND 的 GPIO ? 您能否在 BSL 中添加通信命令以启用 JTAG?

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

    在这种情况下、我不对 BSL 进行重新编程。  我正在尝试创建一个流程、供我们的生产部门首次对器件进行编程。  在这种情况下、器件中仍将有默认的出厂 BSL。  如有必要、我们只需将 GPIO 线路接地、但它只是在生产过程中增加了一个额外的步骤、因为器件最初仍具有出厂默认 BSL、我认为我们可以消除该步骤。  我不确定我是否准确展示了您的意思、即在 BSL 中添加通信命令以启用 JTAG。  我们是否可以添加一些允许 MSPFlasher 与 BSL 通信的内容?

    更多信息: 我们的定制 BSL 监控 GPIO 线、只要它在启动时处于高位、JTAG 就处于锁定状态。  如果 GPIO 在启动时处于低电平、则 JTAG 保持开路。  好像 MSPFlasher 正在尝试在验证步骤后发出复位。  此时已加载定制 BSL、很可能导致此问题、因为如果 GPIO 为高电平(未连接)、JTAG 将会锁定。  不能将复位延迟到该过程的最后、也不能在验证步骤之后执行必要的复位。  这可能已经是该过程的最后一步、但 MPSFlasher 正在尝试验证该应用是否以某种方式通过 JTAG 运行。  我还没有准确研究 MSPFlasher 在该过程结束时是如何工作的。  

    我想要的可能无法实现。  我只是想消除对 GPIO 接地的需求、前提是我们只能在初始生产期间解决它。  我知道、对于我们的定制 BSL 的任何更新、都必须将其建立在基础上。

    谢谢。

    格雷格·邓恩

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

    如果您要通过 JTAG 解锁器件、则是不可能的。

    解锁 JTAG 的唯一解决方案是通过:

    • 1. 通过工厂 BSL
    • 2.通过软件(如 GPIO 设置)

    我的意思是、您可以发送一些推荐、通过 UART 端口解锁器件。 我假设您需要生成一个新的 PC 软件并更新您的 BSL。

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

    我并不是真的要解锁 JTAG。  这是一款全新的器件、最初具有出厂 BSL。  默认情况下已解锁 JTAG。  MSPFlasher 程序正常连接、对固件进行编程并尝试验证。  问题似乎是 MSPFlasher 未能在验证过程结束时复位器件、并且实际上并未指示验证是否成功、只是复位失败。  如果您对器件进行循环通电、器件将正确引导、定制 BSL 和应用程序似乎已成功编程。  不会向用户表明验证确实成功。  似乎有一种方法可以在新器件(系数 BSL)上执行所有编程、仅执行验证和输出验证状态、然后在整个过程结束时复位器件。  如果我们知道映像实际上已在器件中验证、则我们可能会遇到复位失败的情况。

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

    MSPFlasher 似乎没有通过 JTAG 正确复位设备。 那么您无法进行函数测试。

    另一种解决方案是执行 CRC 检查、以帮助您了解该计划是否正确? 然而,CRC 在某些裁决中不会报告结果是对的? 何时会发生此问题?

    *验证存储器(e3_msp.hex)...
    #出口: 10
    #错误:无法重置设备
    *复位器件(RST/NMI)。。。完成
    *开始执行目标代码。。。完成
    *正在断开与设备的连接...完成

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

    我不确定我是否完全理解您的问题、但我会尝试回答。

    我收到了您显示的错误结果、当我在第一篇文章中使用我的原始选项3时、我在其中将自定义 BSL 和应用程序组合到一个 Intel hex 文件中、并尝试通过以下命令行在调用 MSPFlasher 的同时对这两个文件进行编程、 闪存芯片进行编程。   

    D:\XA32>tools\MSPFlasher\MSP430Flasher.exe -w "E3_MSP.hex"-v -b -s -z [reset、VCC=3300]

    仅当 GPIO 行保持打开状态、自定义 BSL 将使 JTAG 保持关闭状态时、才会发生该错误。   如果我将 GPIO 线路接地、则一切都成功。

    此时、除非您有任何建议、否则我想我们只会放弃、只是在我们的过程中将 GPIO 线路接地。  这不是一个大问题,我只是试图让事情尽可能简单。

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

    抱歉、您收到的信息太多。

    我想您遇到的问题是、当您使用 GPIO 打开的定制 BSL 对器件进行编程时。 MSPFlasher 将无法成功复位器件。

    我认为原因是:

    MSPFlasher 通过 JTAG 执行 CRC/复位(复位可以通过 JTAG 或硬件完成)

    编程后可以让 MCU 运行一小段时间

    3.当您定制的 BSL 会锁定 JTAG 时、MSPFlasher 将无法通过 JTAG 执行 CRC/RESET。

    我建议您使用 Uniflash 进行试用。 它可能会解决您的问题。

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

    谢谢你。  我将尝试 Uniflash、看看运行方式是否有所不同。