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:在工程中添加 OAD 函数后、该应用在上电后运行大约需要 4 秒。 如何快速进入应用程序?

Guru**** 2419530 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1540138/cc2340r5-after-adding-the-oad-function-in-the-project-it-takes-about-4-seconds-for-the-app-to-run-after-power-on-how-can-i-quickly-enter-the-app-program

器件型号:CC2340R5


工具/软件:

在工程中添加 OAD 函数后、该应用程序在上电后运行大约需要 4 秒。 如何快速进入应用程序?从文档中我了解到、设备通电后、mcuboot 程序将验证应用程序的完整性。 那么、如何跳过特定要求下的验证?

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

    您好、

    您使用的是哪个 SDK?

    9.10 F3 SDK 中的默认 mcuboot 似乎已经绕过映像验证、这会使加电和应用程序启动之间间隔几秒钟: MCUBOOT_VALIDATE_PRIMARY_SLOT

    请参阅一些相关主题:

    1. CC2340R5:MCUBoot 验证延迟到启动应用程序 — 蓝牙论坛- BluetoothRegistered︎ — TI E2E 支持论坛
    2. CC2340R5:MCUBoot 速度优化 — 蓝牙论坛- BluetoothRegistered︎ — TI E2E 支持论坛

    谢谢、
    Toby

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

    我使用的版本是 SDK。在这个版本中、似乎没有启用 simplelink_lowpower_f3_SDK_8_10_01_02。MCUBOOT_VALIDATE_PRIMARY_SLOT

    2.定义 slot 时、主 slot 不应该是一个 app 程序吗?第二个插槽是持久性程序吗?因此、我将它的宏定义修改为

    然而、经过这样的修改后、没有任何效果。从待机模式运行到 app 程序仍然需要大约 4 秒。

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

    我现在已经使用新的 SDK 版本 (9_11_00_18) 构建了 MCUBoot 工程。 编译工程从待机模式唤醒并运行到应用程序所需的时间似乎仍在 4 秒左右、没有任何加速度。 此外、我发现在构建 MCUBoot 工程时没有 Build method、仅限 Build method。

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

    您好、

    您也可以先禁用 LED 功能。 LED 功能也需要大约 1.5 秒。 尝试注释掉所有 LED 功能。

    您可以设置一个标志并将其存储在内部闪存中。  
    根据标志值、您可以决定是否必须执行影像验证。

    下面显示的“mcuboot_flag"可“可在 OAD 一次期间设置、并可从主应用程序代码中清除为零。

    boot_image_check(struct boot_loader_state *state, struct image_header *hdr,
                     const struct flash_area *fap, struct boot_status *bs)
    {
        TARGET_STATIC uint8_t tmpbuf[BOOT_TMPBUF_SZ];
        uint8_t image_index;
        int rc;
        FIH_DECLARE(fih_rc, FIH_FAILURE);
    
    #if (BOOT_IMAGE_NUMBER == 1)
        (void)state;
    #endif
    
        (void)bs;
        (void)rc;
    
        image_index = BOOT_CURR_IMG(state);
    
    #ifdef MCUBOOT_ENC_IMAGES
        if (MUST_DECRYPT(fap, image_index, hdr)) {
            rc = boot_enc_load(BOOT_CURR_ENC(state), image_index, hdr, fap, bs);
            if (rc < 0) {
                FIH_RET(fih_rc);
            }
            if (rc == 0 && boot_enc_set_key(BOOT_CURR_ENC(state), 1, bs)) {
                FIH_RET(fih_rc);
            }
        }
    #endif
    
        if(mcuboot_flag[0] == 0x01)
        {
            fih_rc = FIH_SUCCESS;
            FIH_RET(fih_rc);
        }
        else
        {
        FIH_CALL(bootutil_img_validate, fih_rc, BOOT_CURR_ENC(state), image_index,
                 hdr, fap, tmpbuf, BOOT_TMPBUF_SZ, NULL, 0, NULL);
    
        FIH_RET(fih_rc);
        }
    }

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

    感谢 Sandeep 分享您的见解!

    您好 Cherry、

    要从待机模式唤醒并运行到应用程序的构建工程

    您能澄清一件事让我们更好地帮助您吗?
    根据您在此处的陈述、似乎 4 秒是从待机到唤醒的测量值。 请注意、MCUBoot 仅在复位(上电或 RST 的低电平信号输入)后运行。  

    谢谢、
    Toby

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

    抱歉、我的陈述不正确。 确切地说、唤醒应用程序后、从关闭模式运行大约需要 4 秒。 通过观察电流可以发现、当从 SHUTDOWN 模式唤醒时、唤醒时的电流约为 2 –3mA、运行到应用程序大约需要 4 秒。 通过测试、我发现从关断状态唤醒时、mcuboot 既不运行、也不运行 persistent。 因此、很难理解它开始运行的位置、也无法精确找到问题。

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

    这实际上是一种通过设置内部闪存中的标志位来确定是否跳过验证的好方法。 但是、也许我的发言不是很正确。 关于 CC2340 在加电后从 mcuboot 运行到应用程序所需的时间、我更担心如何缩短从关断模式唤醒到应用程序的 4 秒时间。 因为当我从关断模式唤醒时、CC2340 无法运行 mcuboot。 持久性程序也没有运行、这使我不确定在添加 OAD 函数后唤醒程序时程序会从哪里开始运行。 因为当我不添加 OAD 功能时、该程序是一个从关断模式唤醒后立即运行的应用程序。

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

    在 mcuboot 程序中添加标志位后、模块从关断唤醒到应用程序运行所需的时间从 4 秒缩短到大约 1.8 秒。 但这段时间能更短吗? 从 mcuboot 程序中的 LED 现象来看、如果不加标志位、加电时红色指示灯将首先闪烁。 大约 2 秒后,在成功验证应用程序后,绿色指示灯将闪烁三次。 添加标记位时、上电后、它会直接跳过红灯约 2 秒、并使绿灯闪烁三次。 我想、添加标志位后、缩短的时间是红灯亮起所需的 2 秒、也就是验证应用程序所需的时间。 稍后,我会尝试评论绿色指示灯闪烁三次的说法,以验证时间是否可以更短。

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

    非常感谢、Sandeep 和 Toby。

    添加标志位并禁用 LED 后、从上电到应用程序(包括从关断唤醒到应用程序)的时间都达到了理想情况。

    总结一下该问题、加电或复位时、mcuboot 程序将正常运行(即 LED 点亮)、但从关断模式唤醒时、运行 mcuboot 程序时 LED 灯不会点亮。 目前尚不清楚导致这种情况的原因。 由于上述问题,当我从关机模式醒来, LED 指示灯没有亮起,这导致我错误地认为程序运行不正常,导致我无法理解程序的运行模式。

    谢谢、

    樱桃