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.

[参考译文] MSP430FR2433:无法使用 UART–TEST/RST 序列接收 BSL ACK

Guru**** 2538930 points
Other Parts Discussed in Thread: MSP430FR2433, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1559754/msp430fr2433-unable-to-receive-bsl-ack-using-uart-test-rst-sequence

器件型号:MSP430FR2433
Thread 中讨论的其他器件: UNIFLASH

工具/软件:  CCS 中完成
类别: 代替  
子类别: UART BSL 进入问题

说明:

在尝试调用时 对 BSL 进行编程 、MSP430FR2433 没有响应预期值 0x90 ACK 字节 在发送 UART 同步字节 ( 0x80 )。

  • 未接收到响应、或者 UART 显示垃圾数据。

  • 使用多个 USB-UART 适配器和 COM 端口进行了测试。

重现步骤:

  1. 初始化主机 MCU UART、网址为 9600 bps、8N1 和 8E1

  2. 迭代 RST 为低电平 。 适用 测试高电平→低电平→高电平 (需要两个上升沿)。

  3. 当 TEST 为高电平时释放 RST。

  4. 0x80通过 UART 发送同步字节。

  5. 观察0x90来自目标的预期 ACK。

观察到的行为:

  • 成功发送 SYNC 字节。

  • 目标开始 不发送 ACK (0x90)

  • 逻辑分析仪显示正确的测试/RST 波形。

  • 来自目标的 UART RX 保持空闲或产生无效数据。

预期行为:

  • 目标 BSL 应使用确认同步字节0x90

  • 应可以进行基于 UART 的编程。

尝试的方法:

  1. 通过硬件进入 BSL

    • 当 RST 保持低电平、TEST 保持高电平、RST 释放时、TEST 引脚切换两次。

    • 使用逻辑分析仪验证时序。

  2. 通过软件进入 BSL

    • 0x1000从运行固件跳转到 ROM BSL。

  3. BSL-Scripter 尝试次数

    • 脚本示例:

  • 发现的问题:

    • [ACK_ERROR_MESSAGE] Unknown ACK value在提供错误密码后。

请求:

  • 有关的指导 UART BSL 无响应的原因 MSP430FR2433 的估算。

  • 确认打开 正确的硬件接线和 TEST/RST 时序

  • 推荐 脚本命令 支持批量擦除、密码处理和固件编程。

  • 不限 变通办法或更新的工具 以便使 UART BSL 正常工作。

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

    尊敬的 Keshavamurthy:

    很抱歉、没有人就您的问题与您联系。  您是否仍需要 BSL 方面的帮助?

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

    尊敬的 Dennis:


    是的、我仍然需要有关 BSL 的帮助。

    我正在使用的器件 MSP430FR2433 UART BSL 主器件实现生成示例。
    UART 在上配置 9600 波特、16MHz SMCLK、8N1 在主机和 MSP430 之间建立正确的交叉连接。

    观察到的行为

    • 后续命令通常会返回错误代码(标头不正确或长度不正确)0x540x51

    • 日志记录确认主机正在将 0x80 传输为第一个字节、但 MSP430 有时会误解它。

    • 数据包长度或校验和计算可能会出现问题。

    公钥

    1. 指定 FR2xx UART BSL Length字段的确切定义是什么—它只包括地址+数据、还是同时包括校验和?

    2. 是我的 RX_PASSWORD Mass_erase MSP430FR2433 的数据包格式是否正确?

    3. 在上运行 UART BSL 时、是否存在任何已知问题 16MHz / 9600 波特

    的任何指导或有效示例数据包格式 FR2433 UART BSL 非常感谢。

    谢谢、
    Keshavamurthy

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

    尊敬的 Keshavamurthy:

    我在最后进行此设置是为了重现问题、但首先、您的“主机“是否可能没有为 9600 波特生成正确的位时钟?  您能否测量和确认 9600 缓冲量(每位宽度 104 usec)?

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

    尊敬的 Dennis:

    感谢您的建议。 我重新检查了 UART 配置。 MSP430FR2433 上的主机侧 UART 按如下方式初始化:

    static void clock_init_16MHz(void)
    {
        FRCTL0 = FRCTLPW | NWAITS_1;
        CS_initClockSignal(CS_FLLREF, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_1);
        CS_initClockSignal(CS_ACLK,   CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_1);
        CS_initFLLParam trim = {0};
        CS_initFLLCalculateTrim(16000, 488, &trim);
        CS_clearAllOscFlagsWithTimeout(1000);
        CS_initFLLSettle(16000, 488);
        CS_initClockSignal(CS_MCLK,  CS_DCOCLKDIV_SELECT, CS_CLOCK_DIVIDER_1);
        CS_initClockSignal(CS_SMCLK, CS_DCOCLKDIV_SELECT, CS_CLOCK_DIVIDER_1);
    }
    
    static void uart_init_9600(void)
    {
        EUSCI_A_UART_initParam param = {0};
        param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
        param.clockPrescalar    = 104;
        param.firstModReg       = 3;
        param.secondModReg      = 0;
        param.parity            = EUSCI_A_UART_NO_PARITY;
        param.msborLsbFirst     = EUSCI_A_UART_LSB_FIRST;
        param.numberofStopBits  = EUSCI_A_UART_ONE_STOP_BIT;
        param.uartMode          = EUSCI_A_UART_MODE;
        param.overSampling      = 1;
    
        if (!EUSCI_A_UART_init(EUSCI_A0_BASE, &param)) while (1);
        EUSCI_A_UART_enable(EUSCI_A0_BASE);
    
        EUSCI_A_UART_clearInterrupt(EUSCI_A0_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT);
        EUSCI_A_UART_enableInterrupt(EUSCI_A0_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT);
    }

    这给了我 104.17µs per bit (≈9600 波特)、SMCLK = 16MHz。
    按照您的建议、我还测量了逻辑分析仪上的 UART 输出以进行确认。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尝试调用时 对 BSL 进行编程 、MSP430FR2433 没有响应预期值 0x90 ACK 字节 在发送 UART 同步字节 ( 0x80 )。

    由于这是一款基于 FRAM 的器件、您应查看 FRAM BSL 用户指南 (SLAU550)。 我认为它中没有任何同步字节。 根据本用户指南、您发送的 BSL_RX_PASSWORD 和 BSL_MASS_ERASE 命令看起来不正确。

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

    您好、Jackson、

    根据  FRAM BSL 用户指南 (SLAU550) 、我正在传输 BSL 内核命令、但会按如下所示做出响应。

    BSL_CORE_Command TX:0x80、0x3B、0x04、0x00。 RX:0x54、0x51、0x51、0x51
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    根据用户指南、您发送的内容不是有效的命令;请参阅第 4.1.1 节。 您必须有标头、两个字节(用于指定大小)、带关联数据的实际命令、然后是两字节校验和。

    例如、按照第 4.1.5.2 节所述发送 BSL_RX_PASSWORD。 所有 BSL 命令都有此类示例。 请阅读用户指南。

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

    感谢 Seth 帮助发布此帖子。  非常感谢Slight smile

    您好、Keshavamurthy、这会让您的 BSL 为您工作吗?

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

    尊敬的 Dennis, Seth:

    感谢您的指导—我现在已根据 SLAU550 更正了我的数据包格式。

    当前状态

    • 是的 接收所有命令的有效响应 (RX 密码、批量擦除、RX 数据块、CRC 校验、加载 PC)。

    • 数据包通过预期的 0x00 ACK 标头进行确认。

    • CRC 校验返回正确的校验和。

    因此、UART BSL 通信现在似乎完全正常运行。

    剩余问题

    加载固件映像(格式,起始地址).txt@C400并发出命令后 加载 PC 为 0xC400、器件似乎不会运行应用程序。

    我的问题

    1. 固件格式 –我使用由 CCS 生成的 TI-TXT 映像。 它是否与 FR2433 UART BSL 直接兼容、或者在编程前是否需要将其转换为原始二进制/INTEL-HEX 格式?

    2. 起始地址 0xC400使用 CCS 构建的 MSP430FR2433 应用程序的正确入口点 (PC) 是否正确? 或者我是否应该使用不同的矢量(例如,0xFFFE 处的复位矢量)?

    3. 加载 PC 命令 –成功的程序+ CRC 检查后,我发送BSL_LOAD_PC (0x17)0x00 0xC4. 命令已确认、但没有应用程序运行。 这是否意味着我的映像链接在错误的基地址、或者未设置复位向量?

    此时、通信层已解决、但我需要有关的指导 验证固件映像格式和正确的执行起始地址 FR2433 的可用外设示例。

    再次感谢您的帮助、
    Keshavamurthy

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

    尊敬的 Keshavamurthy:

    请为您的应用共享 TI-TXT 输出文件的副本。

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

    根据需要、我将分享 由 CCS 生成的 TI-TXT 文件的内容、以及为 UART_BSL 应用转换的数组。 这包括起始地址(0xC400 区域)。

    我还想补充一点、即使用 Uniflash 工具将 CCS 生成的 TI-TXT 文件进行了 I 验证、结果为正。

    请确认:

    1. 是起始地址 0xC400 使用 UART BSL 时针对 FR2433 应用程序代码是否正确?

    2. 上述 TI-TXT 格式是否对 BSL 编程有效?

    3. 我是应该在加载后显式触发到复位矢量的跳转、还是 BSL 会处理这个问题?

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

    尊敬的 Keshavamurthy:

    是的、TI-TXT 格式正确、数组看起来也不错。

    是的、0xC400 是正确的、是的、这是应用映像放置在 FRAM 中的位置。  但是、这通常不是实际应用程序启动(应用程序的启动代码部分)所在的位置。 该位置作为矢量存储在复位位置 0xFFFE 内、如下面的示例所示、无论是在.txt 输出文件中还是在我的存储器结构中。   检查应用程序的.map 文件以查看其来源。  

    我附加了一个 ppt 与下面的片段,以防它是很难 see.e2e.ti.com/.../FR2633-example-BSL-mapping.pptx

    对于您的应用、请使用 0xC4C0 作为引导地址。

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

    尊敬的 Dennis:

    我已根据您的建议进行了修改。

    现在、使用给应用程序供电时、应用程序工作正常 外部 3.3V 电源 —它连续运行而不停止。
    但当我通过给它供电时 LaunchPad/开发板电源(USB 或板载稳压器) 、应用程序启动、但在几秒钟后停止。

    这可能与 LaunchPad 的电源或复位电路有关? 请提供建议。

    谢谢、
    Keshava.

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

    尊敬的 Keshava:

    有趣的是...通常在连接 LaunchPad 的 USB 电缆为电路板供电时、它应该只会上电并连续运行。

    但我怀疑这与 MSP430 和编程器/调试器之间的 SBWTDIO 和 SBWTCK 连接有关系、当 Launchpad 首次通电时、调试器/编程器可以切换这两个信号、以将 MSP430 置于 BSL 模式。

    请尝试以下操作:

    1) 在将 USB 电缆连接到电源时按住复位按钮,等待 1-2 秒钟,然后松开复位按钮

    2) 移除 SBWTDIO 和 SBWTCK 跳线、然后对 LaunchPad 上的下电上电、看看问题是否仍然 存在

    3) 尝试使用一些仅用于切换 LED 的简单代码对 MSP430 进行编程、并查看下电上电时是否发生相同的行为

     让我知道您找到的内容。

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

    尊敬的 Dennis:

    感谢您的建议。 我尝试了您提到的步骤:

    1. 连接 USB 时保持复位 –应用程序在发布后连续运行。

    2. 移除 SBWTDIO 和 SBWTCK 跳线 –移除后、MSP430 会通电并正常运行、而不会卡住。

    3. 简单的 LED 闪烁代码 –我编程了基本的 LED 切换代码、可以观察到相同的行为(仅在复位或移除跳线后才有效)。

    在随附的视频中、MSP430 加载完毕 UART BSL

    • 从板载 LaunchPad 通电时 3.3V 电源 、代码仅运行几秒钟。

    • 保持高电平 外部 RTC 3.3V 电池电源 、代码连续运行、不会出现问题。

    此外、当通过 UART BSL 刷写相同代码时:

    • 在上 首次刷写 、固件无法开始运行。

    • 在上 第二次闪烁 (相同的图像)、则固件可以正常运行。

    这让我怀疑在第一个编程周期中如何处理电源或复位条件存在一些差异。

    我附上了 UART BSL 源代码  供您审查。
    请帮助验证:

    1. 如果是 UART BSL 实现 正确(进入序列,复位处理,矢量表)。

    2. 为什么选择 第一个应用程序闪存 不启动、而是 第二次闪烁 工作正常。

    3. 首次编程后是否需要执行复位/批量擦除步骤。

    这是否与上电期间残留的 SBWTDIO/SBWTCK 影响有关、或者可能与第一个和第二个闪存周期之间的存储器初始化差异有关?

    谢谢、
    Keshava.

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

    因此、问题似乎是在编程 MSP 将无法开始运行后。  执行手动重置或下电上电似乎使其正常工作、对吗?  让我看看调试/编程配置设置。

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

    1. 正常闪烁 LED 代码

    • 首次刷写 →运行正常。

    • 重新连接(通过 USB 下电上电) A 的→运行 然后几秒钟就会停止

    • 如果您按下 RESET 或移除 SBWTDIO/SBWTCK(调试程序线路) →代码持续运行。

    2. UART BSL 代码

    • 首次闪烁 →无法正常工作。

    • 第二次闪烁 →开始工作。

    • 通过 USB 电源重新连接 A 的→运行 几秒钟后停止

    • 通过外部 RTC 电池重新连接(清洁电源,未连接调试器) →正常工作、但仅在闪烁 2 次后。

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

    这是很好的信息。  我需要考虑这一点、看看是否可以重现问题。

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

    尊敬的 Dennis:

    感谢您的指导。 我想给你一个更新:

    MSP430 主机和 MSP430 从器件之间的 UART BSL 序列现在完全正常工作 。 主机成功发送命令、从器件正确响应、并且包括校验和验证和错误处理在内的整个序列可靠运行。

    接下来、我计划实施 MEC1521 作为主机 MSP430FR2433 作为从站。 如果有任何关于处理的建议或最佳做法、我将不胜感激 UART 序列、时序和 Zephyr RTOS 集成 在 MEC1521 一侧。

    再次感谢!

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

    尊敬的 Keshavamurthy:

    恭喜您让一切顺利完成。  Clapμ s

    我对 Zephyr 或 Zephyr 了解不多  MEC1521.

    对于主机端实现 、我不熟悉任何具体的实践、但我相信还有一些应用手册。

    我建议检查的最佳位置是以下内容: MSPBSL 驱动程序或库| TI.com

    在这个页面上有一个文档列表,可能没有所有的答案集中在一个地方,但足以满足您的需要。

    最好是查看网站或有关该主题的其他 E2E 帖子。