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.

[参考译文] MSP430FR59941:BSL 错误代码104 108

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1127490/msp430fr59941-bsl-error-code-104-108

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

我正在尝试通过 I2C 总线使用 BSL 对 MSP430FR59941进行重新编程。  我没有使用任何密码保护。  我可以使用 MSP-FET 工具将同一文件编程到芯片中。

在 MSP 之外、我使用 MSP430-i2cbsl-tool 将文件下载到 MSP。  我使用同样的工具和命令行在其他平台上对其他 MSP43059941芯片进行编程。

在 MSP 内部、我通过将程序计数器设置为0x1000来赞扬 BSL。  (此芯片的 BSL_START 地址。)  中断被禁用。  

I2C 通信是:0x48 NAK、0x54 NAK、.......... 0x48 NAK、.......... 0x48 NAK,......... 0x48 NAK,..........................................

流量是此尝试的结果:

MSP430-i2cbsl-tool -s 0x48 -i /dev/i2c-4 -n -f /media/sda1/MSP_FW/Modu/hwid_1b
swid_yy.txt

----------------------------------------
  TI MSP430 I2C Linux 引导加载程序01.00.00.00
----------------------------------------
INFO:指定了从机地址0x48
INFO:指定了 I2C 总线/dev/i2c-4
INFO:指定了固件文件/media/sda1/MSP_FW/Modu/hwid_1b/swid_yy.txt
信息:正在打开 TI-TXT 固件文件 firmware.txt ... 完成!
INFO:找不到密码文件,默认为0xFFs.r
INFO:已跳过软件调用。
INFO:正在尝试使用密码解锁设备... 失败!
INFO:无法解锁设备。 重置密码并重试。
INFO:已跳过软件调用。
INFO:正在尝试使用密码解锁设备... 失败!
INFO:无法解锁设备。 重置密码并重试。
INFO:已跳过软件调用。
INFO:正在尝试使用密码解锁设备... 失败!
INFO:无法解锁设备。 重置密码并重试。
INFO:已跳过软件调用。
INFO:正在尝试使用密码解锁设备... 失败!
INFO:无法解锁设备。 重置密码并重试。

错误:尝试调用或解锁器件时(响应代码0x104)。

第二次尝试不使用 n:

MSP430-i2cbsl-tool -s 0x48 -i /dev/i2c-4 -f /somefile.txt

----------------------------------------
  TI MSP430 I2C Linux 引导加载程序01.00.00.00
----------------------------------------
INFO:指定了从机地址0x48
INFO:指定了 I2C 总线/dev/i2c-4
INFO:指定了固件文件/somefile.txt
信息:正在打开 TI-TXT 固件文件 firmware.txt ... 完成!
INFO:找不到密码文件,默认为0xFFs。
INFO:调用 BSL (尝试1)... 失败!
INFO:器件裸机尝试!INFO:调用 BSL (尝试2)... 失败!
INFO:器件裸机尝试!INFO:调用 BSL (尝试3)... 失败!
INFO:器件裸机尝试!INFO:调用 BSL (尝试4)... 失败!
INFO:设备裸机尝试!
错误:尝试调用或解锁器件(响应代码0x108)时。

手册页:

MSP430-i2cbsl-tool?

----------------------------------------
  TI MSP430 I2C Linux 引导加载程序01.00.00.00
----------------------------------------

---- 德州仪器(TI) MSP430 Linux I2C 引导加载程序使用情况---

MSP430Bootloader f -I -s

--必需的参数----

f            编程到 MSP430的固件 TI-TXT 文件

 加上


-I            I2C 总线路径(ie /dev/i2c-2)
-s  I2C 从器件地址(十六进制)

--附加选项----

-p         指定要使用的 BSL 解锁密码。
                          应是包含空格分隔的 ASCII 文件
                          BSL 密码的32字节值。
-c         指定数据程序事务的最大块大小。
v                    对所有已编程的存储器执行 POST 验证。
-r

从地址读取长度字节。
-y
计算地址处存储器空间的 CRC16签名及长度。
-n 跳过调用序列。

1) 1) 当我查看 BSL 用户指南:slau550aa.pdf 修订版2021年2月时、没有提到-n、104或108。  有人提到"调用",但不清楚正在调用什么。  我建议它引用 BSL、但在 BSL 之外运行的某个东西如何导致 MSP 在内部执行某些操作?  那么、再说一次、"调用"这一概念是什么?

2) 2) 什么是响应代码0x104?

3) 3) 什么是响应代码0x108?

4) 4) 最后、我想弄清楚为什么我无法对这个芯片进行编程。  I2C 流量向我表明芯片没有侦听。  我无法判断芯片是否实际运行 BSL。  如何确认?

5) 5) 在哪里可以找到解释此工具和/或 BSL 实际执行的操作的文档?

谢谢你

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

    您好!

    您必须先调用 BSL、然后才能开始通过 I2C 与器件通信。 这通常通过 TEST 和 RST 引脚上的特定模式来完成、而 RST 引脚则通过应用中的 SW 调用来完成。 假设您使用的是 MSP-FET、则不仅必须与 I2C 线路正确连接 、而且还必须与 MSP430的测试线路和 RST 线路正确连接。  

    有关 BSL 调用方法、请参阅《MSP430 FRAM BSL 用户指南》的第3.3节。 请记住、针对 BSL 调用的 MSP-FET 连接(至 TEST/RST)与典型的2线制 JTAG 连接不同。

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

    在尝试代码下载之前、系统会通知芯片进入 BSL。

    在 MSP 内部、我通过将程序计数器设置为0x1000来赞扬 BSL。  (此芯片的 BSL_START 地址。)  中断被禁用。  

    此 编程尝试的任何部分均未使用 MSP-FET。  MSP430-i2cbsl-tool 用于将 txt 文件下载到 MSP。

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

    您好!

    我们在嵌入式 Linux I2C 工具上提供的文档位于 https://www.ti.com/lit/swra500 。 遗憾的是、显示可能的错误代码的深度不如此。 可能嵌入到 Linux 软件包中。   

    首先、让我们检查您的硬件连接。 确保您连接到正确的 I2C 引脚(P1.6和 P1.7 --USCIB0)。 如果情况良好,请查看以下应用手册中的一些其他硬件/连接可能出现的问题:(www.ti.com/lit/slaa734 )。 然后,您可以通过加载默认 I2C 示例以仅与主机通信来确保 I2C 连接稳定: https://dev.ti.com/tirex/explore/node?node=AJ1xfM1celCMlxpY9n3bNw__IOGqZri__LATEST (在 USCIB0上运行时需要进行少量移植)。  

    如果您的硬件正常、并且您可以通过设置中的示例代码与器件通信、但您仍有问题、那么下一步是检查 BSL 调用。 之后、将 Linux I2C BSL 主机从图片中取出、并将 BSLScriptor 与 MSP-FET 结合使用。  

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

    当我使用硬件方法启动 BSL 时、我可以成功地对芯片进行编程。  无论使用或不使用-n 参数、这都是有效的。  (因此-n 以及它可能执行的任何操作都是"无关"。)

    当我赞扬 BSL 时:

    _disable_interrupt ();//禁用中断
    ((void (*)() 0x1000)();//跳转 BSL

    我看不到芯片实际执行任何操作的迹象。

    在 slau550aa.pdf 中有:

    3.3.2.1阻止硬件调用 BSL 的因素

    在哪里可以找到等效的软件部分?  即阻止软件 BSL 调用的因素

    谢谢你

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

    供将来参考... 从 SWRA500.pdf、... 对-n 参数进行了解释:

    硬件
    调用时、在调用终端之前、必须在 TEST 和 RESET 引脚上应用时序脉冲
    应用。 如果使用硬件调用、请指定–n 选项以省略软件调用。 如果
    –n 标志在发出任何 BSL 命令之前未指定、终端程序发送 I2C 写入
    main.c 文件的 invokeString 数组中指定的字节的事务。 默认情况下、此调用字符串
    由一个字符序列{0xCA、0xFE、0xDE、0xAD、0xBE、 0xEF、0xBA、0xBE}

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

    {0xCA、0xFE、0xDE、0xAD、0xBE、 0xEF、0xBA、0xBE}

    此调用字符串应该执行什么操作?

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

    {0xCA、0xFE、0xDE、0xAD、0xBE、 0xEF、0xBA、0xBE}

    此调用字符串应该执行什么操作?

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

    您好!

    从 SW 调用的角度来看、没有任何东西阻止它在这种方法中调用、因为您将 CPU 指向存储器的 BSL 部分。 唯一的例外是 BSL 被禁用并且芯片刚刚复位。

    现在、软件调用的诀窍是、在调用 BSL 之前、必须将器件配置回 BSL 所需的默认设置。 否则、BSL 可能无法正常工作。 两个主要问题是时钟速度和 USCI 设置。  

    请记住、Linux I2C BSL 程序应用于嵌入式系统。 因此、它假定 MSP430上有与 I2C 一起运行的应用代码、这些应用代码可以接受一个"调用序列"、MSP430随后解释并执行它需要执行的操作、以便软件调用 BSL。 由于您手动调用 SW BSL 调用方法、然后形成 Linux I2C BSL 驱动程序视图、它与硬件调用相同、因为此程序不必向 MSP430发出命令即可转到 BSL。  

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

    供将来参考。。 来自 MSP430_i2c_BSL_LINUX_TOOLS_v1_00_00_00.zip\MSP430_i2c_BSL_LINUX_TOOLS_v1_00_00_00\src\i2cbsl.h

    /*为响应代码定义*/
    #define MSP430_STATUS_OPERAT_OK              0x00
    #define MSP430_STATUS_PASSWORD_ERROR            0x05
    #define MSP430_STATUS_txtfile_error            0x101
    #define MSP430_STATUS_RESET_ERROR              0x102
    #define MSP430_STATUS_I2C_NOT_FOUND            0x103
    #define MSP430_STATUS_I2C_TRANSACTION    0x104
    #define MSP430_STATUS_INVALID_RESP_HEADER      0x105
    #define MSP430_STATUS_INVALID_RESP_LENGTH      0x106
    #define MSP430_STATUS_INVALID_RESP_CRC         0x107
    #define MSP430_STATUS_Invoke_FAIL              0x108
    #define MSP430_STATUS_VERIFICY_FAIL        0x109

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

    我一直在尝试弄清楚 BSL 运行的 USCI 设置应该是什么。  我发现最好的是:来自 :swra500.pdf 其中:TI 建议清除 BSL 应用程序中使用的任何模块寄存器的配置、因为外部应用程序的配置可能会中断 BSL 应用程序并导致意外行为。

    在哪里可以找到 BSL 应用使用的模块或寄存器?  (我必须查看代码吗?  该代码在哪里?)

    谢谢你

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

    您好!

    《FRAM BSL 用户指南》有一个第7节引导加载程序版本、其中列出了使用的器件、BSL 版本和 BSL 资源。 这将告诉您需要重置的内容。 通过复位、您可以将资源/外设复位为器件启动的默认设置、如器件用户指南中的寄存器说明所示。 这是因为 BSL 代码假定硬件调用、其中包括器件复位。  

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

    当我使用 JTAG 调试器查看存储器0x1000时、... 我看到转换为 JMP 0x1000的0x3FFF。

    我想知道我看到的是不是真的吗?  即、如果它在0x1000处循环、嗯、它永远不会进入 BSL。

    我是否应该能够使用调试器查看0x1000的内容?  BSL (ROM)是否可通过调试器查看?

    谢谢你

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

     我的代码... 未启动 SBL:

     UCB0CTLW0 |= UCSWRST;             //停止模块的 i2c
       UCB0CTLW0 &=~UCSWRST;            //停止模块的 i2c
       _disable_interrupt ();
       ((void (*)(void)) BSL_start)(); //跳转至 BSL

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

    您好!

    在 IDE 存储器查看器中、您无法查看 ROM 代码、因此将看到0x3FFF。  

    通过在软件调用之前复位外设、它旨在复位与外设相关的所有寄存器设置。 即任何控制或时钟寄存器。  

    同时仔细检查 BSL 签名存储器区域、以确保 BSL 未被禁用。 请参阅下面从 MSP430代码保护特性 应用手册中获取的表9。  

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

    BSL 签名为0xFFFFFFFF

    我确定 BSL 未被禁用、因为 A HW_invoke 正常工作。

    我从未使用过密码来访问 BSL。  在 HW_Invoke 中、第一次下载尝试失败、第二次成功地"解锁"器件。  我将其视为:失败的尝试失败、器件被擦除、默认密码现在适用于第二次尝试。  (我有这样的问题吗?)

    我必须缺少一个概念。  如果我可以读取器件、我可以读取密码。  那么、有密码有什么意义呢?

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

    了解硬件调用的工作原理。 因此、您的问题很可能是在通过 SW 调用 BSL 之前未将器件设置为正确配置。  

    从 BSL 安全的角度来看、该器件可以:1)禁用;2)受批量擦除保护的密码;3)受密码保护、不擦除。

    默认情况下、BSL 设置为密码保护和批量擦除。 这就是为什么您必须尝试两次、因为它会提供"错误的密码"以批量擦除器件、因此您可以提供默认密码来解锁所有 BSL 功能。 这样、您可以保护器件上的代码、但仍然允许访问、例如、如果您锁定了 JTAG。