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:Linux 上使用 UART BSL 的 MSPspdebug -无法调用 BSL 进入序列

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/945442/msp430fr2355-mspdebug-on-linux-using-uart-bsl---unable-to-invoke-bsl-entry-sequence

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

我在 Linux 中使用 MSPdebug 和 BSL 通过 UART 刷写器件时遇到问题。 我使用的是 SparkFun 的串行分线板、它使用 CH340G USB 转串行转换器。 /DTR 连接到/RST、/CTS 连接到 TEST。 如图1所示。 使用 ROM-BSL 驱动程序的默认进入序列、即`DR、r、R、r、d、R:DR、r、`(R:RTS 打开、r:RTS 关闭、D:DTR 打开、d:DTR 关闭。 逗号表示延迟。 进入和退出序列用冒号分隔。) 也许这应该更改为`dr、R、r、R、D、r`?

我在示波器上看到的 BSL 进入序列不是我所期望的;它首先使/RST 在释放之前低电平大约200ms、然后不执行任何操作。 图2显示了示波器捕获。 /RST 在我运行以下命令后变为低电平。 MSPdebug 超时并尝试执行批量擦除、但也失败了。

为了实现这一目的、我使用 launchpad (MSP-EXP430FR2355)、并且我通常可以使用 mspdebug 和使用 MSP430.DLL 的 utilb 驱动程序来刷写器件。 在目标器件上刷写的当前程序具有 LPM4.5中的器件。 我已移除跳线隔离块中的跳线、尝试通过 BSL UART 进行闪存。

$ mspdebug -d /dev/ttyUSB0 ROM-BSL
MSPDebug 0.25版-用于 MSP430 MCU 的调试工具
版权所有(C) 2009-2017 Daniel Beer 
这是免费软件;请参阅复印条件的来源。 没有
保修;甚至不适用于适销性或特定用途的适用性。
来自 MSP430.dll v3.3.1.4的芯片信息数据库版权所有(C) 2013 TI、Inc.

ROM_BSL:无法接收答复:连接超时
ROM_BSL:无法接收答复:连接超时
ROM_BSL:同步失败
ROM_BSL:命令0x1E 失败(addr = 0x0000、len = 0x0000)
警告:ROM_BSL:无法读取版本
正在执行批量擦除...
ROM_BSL:无法接收答复:连接超时
ROM_BSL:无法接收答复:连接超时
ROM_BSL:同步失败
ROM_BSL:命令0x18失败(addr = 0xfffe、len = 0xa506)
ROM_BSL:初始批量擦除失败
ROM_BSL:解锁失败 




图1:

图2:

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

    您好、Gary、

    您的 CH340G 和 MSP430FR2355之间的硬件连接看起来正常。  

    请参阅 《MSP430 FRAM 器件引导加载程序(BSL)用户指南》的第3.3.2节硬件 BSL 调用、了解有关该器件的 BSL 进入序列以及导致错误硬件 BSL 调用的问题的信息。

    www.ti.com/.../slau550z.pdf

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

    我又四处闲逛了一会、发现硬件连接错误;mspdebug 的手册页指出了将串行芯片的 RTS 连接到 MSP430的 TEST 引脚。 事实证明、我从 SparkFun 获得的分线板没有连接 CH340G 的/RTS 引脚(图1)。 我将一根导线焊接到 CH340的引脚14上、我看到正确的 BSL 调用、如图2中的 mspdebug 所示。


    图1:


     
    图2:

    修复了 BSL 进入序列后、MSP430FR2355现在不会响应进入序列、如下面的输出中所示。 (MSP430FR2355超时、当 mspdebug 尝试启动批量擦除时、mspdebug 会得到错误的 ACK 字符:54。):

    $ MSPdebug ROM-BSL -d /dev/ttyUSB0
    MSPDebug 版本0.25 -用于 MSP430 MCU 的调试工具
    版权所有(C) 2009-2017 Daniel Beer 
    这是免费软件;请参阅复印条件的来源。 不
    提供任何保证;甚至不提供适销性或特定用途适用性。
    来自 MSP430.dll v3.3.1.4的芯片信息数据库版权所有(C) 2013 TI、Inc.
    
    ROM_BSL:接收回复失败:连接超时
    ROM_BSL:接收回复失败:连接超时
    ROM_BSL:同步失败
    ROM_BSL:命令0x1E 失败(addr = 0x0000、len = 0x0000)
    警告:ROM_BSL
    :无法读取版本执行擦除...
    ROM_BSL:错误的 ACK 字符:54
    ROM_BSL:无法接收答复:连接超时
    ROM_BSL:同步失败
    的 ROM_BSL:命令0x18失败(addr = 0xfffe、len = 0xa506)
    ROM_BSL:初始批量擦除失败
    ROM_BSL:解锁失败 

    为了检查这是否是串行器件或 Launchpad 的问题、我使用了较旧的 MSP-EXP430G2 Launchpad (MSP430G2553)进行了测试。 我能够使用 mspdebug 通过 BSL 和 UART 进入器件:

    $ MSPdebug ROM-BSL -d /dev/ttyUSB0
    MSPDebug 版本0.25 -用于 MSP430 MCU 的调试工具
    版权所有(C) 2009-2017 Daniel Beer 
    这是免费软件;请参阅复印条件的来源。 不
    提供任何保证;甚至不提供适销性或特定用途适用性。
    来自 MSP430.dll v3.3.1.4的芯片信息数据库版权所有(C) 2013 TI、Inc.
    
    ROM_BSL:收到 NAK
    ROM_BSL:命令0x1E 失败(addr = 0x0000、len = 0x0000)
    警告:ROM_BSL:无法读取
    执行批量擦除的版本...
    正在发送密码...
    芯片 ID 数据:
    ver_id: 5325
    ver_sub_id: 0000
    修订版: 00
    制造: 60
    个自: 0000
    配置: 00
    保险丝: 00
    器件:MSP430G2xx3
    

    MSP430FR2355是否使用串行器件对 BSL 序列做出响应? 设置 BSL 签名对错误的 BSL 密码执行批量擦除、并且 JTAG/SBW 也被解锁。

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

    嗨、Gary、

    您能否确认此 BSL 进入序列是否适用于其他 FRAM 器件或 Launchpad (如果有)?

    我们正在内部调查此问题、明天我或另一位团队成员将向您回复更多详细信息。  

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

    Aaron、

    我可以确认下周是否正常工作;我目前没有任何额外的 FRAM 器件。

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

    您好、Gary、  

    不用担心、很好知道。

    最好检查的一点是确保从 BSL 进入到发送第一条命令有足够的延迟。 对于 MSP430FR2355、器件至少需要从 BSL 进入调用序列开始300ms、直到 BSL 准备好接收第一条命令。 这摘自 《MSP430 FRAM 器件引导加载程序(BSL)用户指南 》:https://www.ti.com/lit/ug/slau550z/slau550z.pdf 的第3.6节

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

    我尝试了 MSP430FR2311和 MSP430FR4133的 LaunchPad、结果相同。
     
    似乎进入序列对器件有影响、因为正在运行的程序在进入序列开始时冻结。 (例如、如果有闪烁程序、则 LED 将在调用进入序列后保持亮起。)
     
    图1显示了发送 BSL 序列和第一条命令后 MSP430FR2355的示波器截图。 大约550ms 后、mspdebug 会在 P1.6上发送第一条命令、但 P1.7上没有回复、因此 mspdebug 会超时。 P1.6在大约820us 内处于低电平。

    图1.


     
    我在 e2e 上找到了有关 FR 器件和 MSPdebug 的前一个主题、但我无法判断 FR2355器件是否忽略 BSL 进入序列: https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/199601?tisearch=e2e-sitesearch&keymatch=mspdebug%2520bsl

    我还能做些什么来继续对此进行故障排除?

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

    您好、Gary、

    您能否捕获 MSP RXD 线并将其展开以显示它在红色圆圈内的表现吗?

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

    您好、Gary、

    您是否还能说明您使用的波特率以及 mspdebug 发送的命令类型?

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

    图1显示了展开的红色椭圆形。

    图1. FR2355上一个柱红色椭圆形展开

    当我在 G2553器件上运行时、会出现某种响应(NACK?) 然后再发送一些命令。 请参阅图2。
    根据 mspdebug 输出、这也会执行以下操作:0x1E 失败命令、执行批量擦除、发送密码。 图3中展开了绿色椭圆形。

    图2. MSP430G2553 BSL 进入序列和一些命令

    图3. 图2中的 MSP430G2553绿色椭圆形展开

    返回到 FR2355器件。 经过几次超时、mspdebug 将 P1.6 (MSP RXD)保持在低电平的时间达840us、并在 P1.7 (MSP TXD)上有活动。 请参阅图4。

    图4. FR2355将大约60秒添加到开始 MSPTXD 行上显示活动的 mspdebug 中

    :这个*应该*是9600波特。 根据 mspdebug 的输出:0x1E 命令出现故障、尝试执行整体擦除、但失败。

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

    我一直在偷猎 mspdebug 源代码、我认为这是一个 mspdebug 问题。

    我尚未找到修复程序、但我遇到了这些 BSL 命令、它们看起来是错误的:

    #define CMD_MUS_ERASE      0x18
    #define CMD_ERASE_SEGMENT   0x16
    #define CMD_TX_DATA      0x14
    #define CMD_RX_DATA      0x12
    #define CMD_TX_VERSION      0x1E
    #define CMD_RX_PASSWORD      0x10

    以上是否可以是旧的 BSL 命令?

    这些#defines 应为:

    #define CMD_MUS_ERASE      0x15
    #define CMD_ERASE_SEGMENT   0x16
    #define CMD_TX_DATA      0x18
    #define CMD_RX_DATA      0x10
    #define CMD_TX_VERSION      0x19
    #define CMD_RX_PASSWORD      0x11

    我仍在尝试确定发送了哪些命令。 我现在怀疑 mspdebug 的作用如下所示:

    1. 发送 BSL 进入序列(正确)
    2. 在发送第一个命令之前延迟500ms (正确)
    3. mspdebug 写入0x80标头(正确吗?)
    4. MSPDebug 等待来自 MSP 的 ACK (MSP 是否会在标头之后立即发送 ACK?)
    5. mspdebug 在放弃之前尝试项目3和4两次(mspdebug 调用此"无法同步")。
    6. 发送 TX 版本命令
    7. 等待回复,但在没有回复后失败
    8. 此地址0xFFFE 处的批量擦除、长度为0xA506
    9. mspdebug 尝试同步(此列表中的项目3和4)并失败

    是否需要进行这种"同步"? 我将"同步"定义为仅发送标头0x80并等待 ACK。

    理想情况下、写入 BSL 进入序列后、我只需擦除器件并传输新的程序数据。

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

    您好、Gary、

    我们明天将在一天结束前收到您的回复、感谢您的耐心等待。

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

    不用担心、我一直在深入探讨这一点、我认为这更多是一个 mspdebug 问题。 我不认为 mspdebug 已更新为使用'5xx、6xx'协议、如 SLAU550Z 的概述表1中所示。 我怀疑 mspdebug 的 ROM-BSL 驱动程序使用'1xx、2xx、4xx'协议、这可能解释了为什么它在 G2553器件上工作、而不是在任何 FRAM 器件上工作。

    我正在尝试修改 mspdebug 中的代码(即添加一个 fram-BSL 驱动程序)以使用 SLAU550Z 中描述的协议。 我希望在接下来的几天内有一些工作。

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

    您好、Gary、  

    再次感谢您的耐心等待。 如果您有任何进展、请告知我们、请继续遵循 SLAU550Z 中描述的协议。 我们目前正在积累更多有关 mspdebug 和 FRAM 定制 BSL 的知识。 下周初、我将更好地回答 MSPDebug 驱动程序的外观以及协议使用的器件。

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

    Welp、我觉得很愚蠢。 mspdebug 适用于 FRAM 器件和 BSL;我碰巧为使用较新 BSL '5xx、6xx'协议的器件使用了错误的 mspdebug 驱动程序。 无需修改代码源代码;P

    TLDR:

    使用此 mspdebug 命令通过使用'5xx、6xx'协议的 UART BSL 对 FRAM 器件进行编程:
     
    $ mspdebug -d /dev/ttyUSB0 flash-BSL --bsl-entry-sequence DR、r、R、r、d、R:DR、r --long-password "prog a.txt"
     
    其中 a.txt 为 TI 文本格式。

    更长的版本

    自从您询问 mspdebug 后、我将介绍我如何在各种 MSP LaunchPad 器件上使用该工具。 在前面、我会说我不是很熟悉 mspdebug、所以我的理解是普通用户、而不是工具的开发人员:我主要在 Makefile 中设置 mspdebug、而不是忘记它。
     
    MSPdebug 使用它所谓的"驱动程序"与各种调试器/编程器(例如 eZ-FET、eZ430、RF2500等)连接。
    连接到编程器或器件后、您可以通过交互式或非交互式方式发出命令。 (我发现非交互方式或编程器件非常有用、因为我只是在 Makefile 中删除命令。)
     
    对于具有 eZ430调试器的旧 G2553 Launchpad 器件(MSP-EXP430G2)、我使用"RF2500"驱动程序。 以下是在 LaunchPad 上对器件进行编程的示例:
     
    $ mspdebug RF2500"prog a.out"
     
    对于使用 eZ-FET 调试探针的器件、我使用"utilb"驱动程序、这需要在主机上安装 TI MSP430.DLL/libmsp430.so 才能访问器件:
     
    $ mspdebug utilb"prog a.out"
     
    在最后两个示例中、a.out 是使用 MSP430-elf-gcc 创建的编译和链接的 elf 程序。
     

    BSL 详细信息:

    关于 BSL、有几个 BSL 驱动程序。 我错误地假定我应该为 FRAM 器件使用"ROM-BSL"驱动程序、因为 FR2355器件在 SLAU557z - MSP430TmFRAM 器件引导加载程序(BSL)的表1中将其 BSL 存储器类型列为"ROM"。
     
    MSPdebug 文档不太清楚其 BSL 驱动程序使用的协议。 查看源代码并查看 ROM-BSL 的实现、它使用 SLAU319c 中描述的'1xx、2xx、4xx' BSL 协议。
     
    "flash-BSL"驱动程序会尽可能地实现'5xx、6xx'协议。 它至少执行我关心的基本功能:发送 BSL 进入序列、擦除器件以及写入器件。
     
    默认情况下、"FLASH-BSL"不会为 FRAM 器件使用正确的 BSL 进入序列、只会发送16字节 BSL 密码、因此您必须发出--BSL-entry-sequence 和--long-password (32字节密码)标志才能更改驱动程序的默认功能:
     
    $ mspdebug -d /dev/ttyUSB0 flash-BSL --bsl-entry-sequence DR、r、R、r、d、R:DR、r --long-password "prog a.txt"
     
    d /dev/ttyUSB0标志指定我正在使用的 TTY 设备(CH340G USB 转 UART 转换器)。


     
    我感谢您的耐心、并帮助我完成这项工作。 总的来说,我对 mspdebug 工具和 BSL 协议有了更深入的了解:)

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

    您好、Gary、

    很高兴您使用 FRAM 器件的 BSL 协议启动并运行了 MSPDEBUG! 非常感谢您花时间输入这些信息、因为与团队和其他许多类似问题的人员分享这些信息将非常有帮助。