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.

[参考译文] MSP430F2274:在 BSL MSP 程序下载期间、MSP430F2274发出意外的 NACK 响应

Guru**** 2426140 points
Other Parts Discussed in Thread: MSP430F2274, AM5746

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/980284/msp430f2274-unexpected-nack-response-from-msp430f2274-during-the-bsl-msp-program-download

器件型号:MSP430F2274
主题中讨论的其他器件: AM5746

在我们的设计中、我们使用 MSP430F2274器件、我们希望在每次主 CPU (AM5746)启动时对其进行编程。 因此、我们在主 CPU 上运行 MSP430_BSL 应用程序(在 Linux 5.4 OS 下)、我们从 TI 在 slaa760.zip 文件中提供的"SITARA Linux Host for MSP430 UART BSL"文件夹中编译该应用程序。

在"SI塔拉 Linux Host for MSP430 UART BSL"文件夹中、我们使用 UART_BSL_MSP430子文件夹中提供的 BSL 应用文件集来编译 MSP430_BSL 应用。 为了进行开发定制 MSP430_BSL 应用的初始测试、我们使用简单闪烁的 LED MSP430程序。

最初、我们通过 JTAG 编程器将闪烁 LED MSP430程序下载到 MSP430F2274微控制器、从而成功测试了它。

因此、在编译 MSP430_BSL 编程应用程序后、我们会在操作系统启动后手动运行该应用程序、并观察到以下情况:(请参阅 main.c 文件)

  • 在尝试读取器件 ID (第198行)时、MSP 器件编程的第一次尝试(第168行)总是失败。
  • 此故障会导致再次尝试执行相同的代码(第168行)、同时编程成功!

一个明显的问题是:为什么会发生这种情况?

文件0_BSL_timing_overall.png 包含 BSL 编程所涉及信号的总体时序、并参考以下文件、提供了逻辑分析仪收集的总体时序图的更详细视图:

  • 文件:1_detail_bsl-entry_wrt-pwd_def.png
  • 文件:2_bsl-entry_wrt-pwd_def_with_delayed_ack.png
  • 文件:3_detail_delayed_ack_and_tx_data_block_nack.png
  • 文件:4_tx_data_block_nack_rst_new_bsl_entry_with_success_seq.png

Fist 尝试
--------------
信号序列从件复位(第176行)开始、后跟 BSL 进入序列(第185行)、后跟 MSP430_BSL 应用(MCU_BSL_RX)和 MSP 器件(MCU_BSL_TX)信号之间的标头(80)和 ACK (90)字符交换。  在后面的文本中、该字符的交换标记为同步事件。

有关详细信息、请参阅1_detail_bsl-entry_wrt-pwd_def.png。

然后、MSP430_BSL 应用发送'RX password'命令(第187行)、MSP 器件 ACK 来响应该命令、但仅在~450ms 的相当长的时间后!? (请参阅2_BSL-entry_wrt-pwd_def_with _delayed_ack.png)。 随后是同步交换。

然后、MSP430_BSL 应用程序发送'TX 数据块命令'、尝试获取器件 ID。  但是、此时、MSP 器件 DATA_NACK (A0)进行响应、表示命令执行失败。 有关详细信息、请参阅3_detail_pelayed_ack_and_TX_data_block_nack.png

由于这个故障、MSP430_BSL 应用随后开始第二次尝试 MSP 器件编程 过程。

第二次尝试
--------------------
有关详细信息、请参阅4_tx_data_block_nack_rst_new_bsl_entry_with_success_seq.png

与第一次尝试一样、生成一个新器件复位、然后是 BSL 进入序列、之后是个同步事件。

MSP430_BSL 应用再次发送'RX password'命令、但这次 MSP 器件 ACK 无延迟进行响应、后跟一个与之前相同的同步事件。

然后 MSP430_BSL 应用再次发送'TX 数据块命令'、但这次 MSP 器件通过发送器件 ID 数据做出正确响应

从那时起、剩余的 BSL 编程序列正确完成、MSP 器件开始正确执行其新下载的程序。

问题:

  • 这是正常行为吗?
  • 是否可以避免这种行为并仅尝试进行 BSL 编程?
  • 获取器件 ID 的目的是什么、因为除了打印之外、器件 ID 在代码中不使用?
附件
 main.ce2e.ti.com/.../0552.main.c
0_BSL_timing_overall.png

 
 
1_detail_bsl-entry_wrt-pwd_def.png

 
2_bsl-entry_wrt-pwd_def_with_delayed_ack.png

 
 
3_detail_delayed_ack_and_tx_data_block_nack.png

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

    您好!

    感谢您的详细解释。 请从 SLAU319X 中查看此信息:

    这是正常操作。 其工作方式如下的原因是:

    您已经在其中包含代码。

    2.在尝试中:器件检查密码(您可以发送32字节0xFFFF)。 它与 FFE0h 至 FFFFh 中保存的数据不同

    3、器件执行批量擦除、 将保存在 FFE0h 至 FFFFh 中的数据全部为0xFFFF。

    4. 在尝试2: 器件检查密码(您可以发送32字节0xFFFF)。 它与保存在 FFE0h 至 FFFFh 中的数据相同

    5.器件对其他 BSL 命令的响应。

    伊斯天

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

    感谢您对伊斯迅的解释!

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

    实际上、我有一个问题。

    当您说"器件执行批量擦除、并且 保存在 FFE0h 至 FFFFh 中的数据全部为0xFFFF。"时、您是否意味着 MSP430器件仅因为发送的密码不正确而自行执行批量擦除?

    由于 MSP430_BSL 应用程序不发送批量擦除命令、这种情况似乎就是这样。

    将 ACK 发送到 RX 密码的时间是否因大量擦除器件闪存所需的时间而延迟很长?

    耳塞

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

    您好、Bud、

    抱歉、我不知道引导加载程序代码的详细信息。 我不确定它是否会先擦除代码、然后再发送 ACK。

    如果需要大约1秒、我认为是的。

    伊斯天