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.

[参考译文] CC2340R5:器件 ROM 引导加载程序:发生电源故障时进行后门引脚处理。

Guru**** 2974170 points

Other Parts Discussed in Thread: CC2340R5

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1658797/cc2340r5-device-rom-bootloader-backdoor-pin-handling-in-case-of-power-failure

器件型号: CC2340R5

大家好、TI 支持团队

我在工程中使用 CC2340R5、该器件通过 UART 与 MCU 连接。

正如其中一位成员建议使用串行 ROM 引导加载程序来更新器件固件、我对此主题有一个主要问题。

经告知、在突然断电的情况下、使用串行 ROM 引导加载程序通过 UART 更新固件时、引导加载程序不会保持其先前的状态。

器件仅保持在引导加载程序模式下。 但如果我们要再次启动固件传输、则有一个条件表明后门/引导引脚必须保持置为有效。

但是、在电源故障的情况下、更难保持引脚之前的状态。

我想知道是否有任何其他选项可将器件保持在引导加载程序状态、而在下一次下电上电时、我们可以安全地开始传输固件?

我已经尝试过此操作、器件在突然出现电源故障后保持在引导加载程序状态、但在发出下一次下电上电时不会响应握手命令 (AUTO_BAUD)。  

 

 

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

    您好 Rushikesh、

    从器件 技术参考手册中 、我们可以看到器件有两种方式进入引导加载程序

    1. pAppVtor 是无效值(即空白器件)
    2. 将 pinTriggerDio 设置为指定的 pinTriggerLevel

    这两个值都保存在 CCFG 中、会在 BLDR_CMD_CHIP_ERASE 命令中擦除。  因此、如果在使用 ROM 引导加载程序进行编程之前擦除器件、则下载应用程序过程中的电源故障应导致无效的 CCFG pAppVtor、这将导致器件复位时默认进入 ROM 引导加载程序。  pinTrigger 同样无效、但 FCFG 默认值为 DIO21 低电平、在这种情况下值得使用。  唯一的问题是在对 CCFG 本身进行编程时是否进行下电上电、这是整个过程的一小部分。  您需要以自动波特序列开始、在主机上重新启动 ROM 引导加载程序过程。

    我已经尝试过这种方法、器件在突然断电后保持在引导加载程序状态、但在进行下一次下电上电时、它不会响应握手命令 (AUTO_BAUD)。  [/报价]

    如何知道器件正在进入引导加载程序?  您使用哪个主机程序与 ROM 引导加载程序进行交互、是 TI CC2340 Linux SBL?

    此致、
    Ryan

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

    您好、Ryan、

    我使用的是 CC2340R5 24 引脚封装。  

    分别使用 DIO8 作为引导加载程序触发引脚以及用于 RX-Tx 的 DIO12 和 DIO13、如屏幕截图所示。

    您如何知道器件正在进入引导加载程序?

    >>我正在通过发送 AUTO_BAUD、 CHIP_ERASE等命令进行确认、ROM 引导加载程序反过来 为每条命令发送 0x00CC 响应。 能够成功发送每条命令、新固件也会成功更新。

    问题是电源故障。  

    在这种情况下、我看到了在器件复位时 DIO8 引脚的电源故障状态发生变化。

    我们可以执行什么恢复来重新开始固件传输?

    因为、正如您提到的、我们必须从 AUTO_BAUD 序列重新启动。

    您使用哪个主机程序与 ROM 引导加载程序进行交互、是 TI CC2340 Linux SBL?

    编号 我使用另一个 MCU、它通过 UART 连接到 BLE。

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

    您好、Ryan、

    还有一点、您提到 FCFG 默认的引导加载程序触发器引脚 DIO21 — 低电平。

    它是 40 引脚 (RKP) 封装的 GPIO 吗?  

    24 引脚 (RGE) 封装的情况相同吗?

    此致、

    Rushikesh。

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

    我认为问题不在于您的引导加载程序触发引脚。 与我之前的响应一样、CCFG 在应用程序编程前会被擦除、直到之后才会编程。  因此、当在此过程中发生电源故障时、器件将以其空白器件/FCFG 默认值重新启动。  如我之前所附的图片中所示、24 引脚封装将使用串行索引 0。  这意味着后门引导加载程序在此状态下需要用于 RX 的 DIO20 和用于 TX 的 DIO6、这就是您的引导加载程序序列失败的原因。  如果您无法访问 DIO20/6、则需要使用 SWD 对器件进行重新编程、并考虑重新设计硬件来解决该问题。

    此致、
    Ryan

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

    您好、Ryan、

    感谢您的答复。

    从目前的情况来看、我们在任何情况下都不能更改我们的硬件设计。

    是否有任何选项可以在任何情况下部分擦除存储器或保留 CCFG 内容?

    TI 能否在任何情况下支持我们要更改这些 FCFG 设置?

    请告诉我、我们是否可以对此采取任何其他解决方法、因为这是我们向前推进的主要阻碍因素。

    此致、

    Rushikesh。

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

    您好 Rushikesh、

    最终 、若要刷写器件、您需要先擦除存储器、而 ROM 串行引导加载程序唯一的擦除命令是 BLDR_CMD_CHIP_ERASE、这也会擦除 CCFG。    如果 CCFG 无效(例如引导加载程序序列期间的下电上电)、则无法阻止 BLDR_CMD_CHIP_ERASE 擦除 CCFG、这意味着串行索引将为零(即 FCFG 设置)。  FCFG 是 TI 工厂为所有器件建立的、不能由用户修改。  鉴于 ROM 串行引导加载程序的局限性、您可以考虑创建用户定义的引导加载程序(请参阅 TRM 的第 8.4.3 节)并可以从 MCUBoot 启动、但这将需要用户进一步开发。

    此致、
    Ryan

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

    您好、Ryan、

    感谢您的宝贵反馈。

    我想除了实现次级引导加载程序之外、没有其他选项可供我选择。

    就在这种情况下、如果我在不使用芯片擦除的情况下执行 ROM 引导加载程序固件刷写序列、并直接从所需位置开始刷写固件、会怎样?

    我的意思是、是否允许从 ROM 引导加载程序进行此操作?

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

    如果您尝试在不首先执行批量擦除的情况下执行下载、则 ROM 引导加载程序将收到错误返回状态。

    此致、
    Ryan