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.

[参考译文] LP-EM-CC1314R10:无法从引导加载程序跳转到应用

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1401395/lp-em-cc1314r10-cant-jump-to-app-from-bootloader

器件型号:LP-EM-CC1314R10
主题中讨论的其他器件:UNIFLASH

工具与软件:

大家好、  

我最近使用 cc1314系列启动了一个项目、并尝试实现引导加载程序。 现在我只是使用 MCUboot 和 Sensor_oad_offchip 作为我的项目。 最后、我希望创建自定义引导加载程序、因为不需要 mcuboot 复杂性。  

现在我们来看看这个问题、因为标题提示我无法从 mcuboot 跳到我的 sensor_oad_offchip 应用。  

我已将 mcuboot 代码修改为只需简单地跳转到 OAD 标头中给出的应用程序的假地址、但它不起作用。 我以前在 cc1357上完成过此过程、还在该 MCU 上使用 BIM 创建了自定义引导加载程序、但从未遇到过此问题。  

这是 mcuboot 代码

如您所见、我已注释掉了与 mcuboot 相关的所有器件并直接跳转到 sensor_oad_offchip 应用的矢量表、但它无法正常工作。

我的最终目标是使用 mcuboot 和 sensor_oad_offchip 项目作为参考、并创建我自己的标头及其他所有项目。  

int main(void)
{
    fih_int bootStatus;
    struct boot_rsp bootRsp;

#ifndef EXCLUDE_GPIOS
    powerUpGpio();
    lightRedLed();
#endif //EXCLUDE_GPIOS

//    trace_init();
//    MCUBOOT_LOG_INF("mcuboot_app");
//
//#ifdef MCUBOOT_HW_ROLLBACK_PROT
//
//    if (FIH_SUCCESS != boot_nv_security_counter_init()) {
//        MCUBOOT_LOG_INF("bootRsp: failed to initialize secure counter page");
//        mcubootFail();
//    }
//
//#endif
//    bootStatus = boot_go(&bootRsp);
//
//#ifdef MCUBOOT_HW_ROLLBACK_PROT
//    lockBimSector();
//#endif
//
//    if ((0 == bootStatus) && (IMAGE_MAGIC == bootRsp.br_hdr->ih_magic))
//    {
//        blinkLed(GREEN_LED, 3, 500);
//        MCUBOOT_LOG_INF("bootRsp: slot = %x, offset = %x, ver=%d.%d.%d.%d",
//                            bootStatus,
//                            bootRsp.br_image_off,
//                            bootRsp.br_hdr->ih_ver.iv_major,
//                            bootRsp.br_hdr->ih_ver.iv_minor,
//                            bootRsp.br_hdr->ih_ver.iv_revision,
//                            bootRsp.br_hdr->ih_ver.iv_build_num);
//
//        do_boot(&bootRsp);
//    }
//    else
//    {
//        MCUBOOT_LOG_INF("bootRsp: no image found");
//        mcubootFail();
//    }

    start_app((uint32_t *)0x00006000);


    mcubootFail();
}

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

    我还注意到实际矢量表地址是0x6080、我甚至尝试了该地址、但仍然无法引导到应用中。

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

    尊敬的 Hamza:

    默认情况下、MCU 具有多项检查、包括在跳转到映像之前进行的 CRC 校验。

    您是否 直接对 sensor_oad_offchip 应用进行了编程、或者您是否首先通过 OAD 映像工具运行了该应用? (您得到一个.bin 文件。) 在开始实施引导加载程序之前、通过默认示例浏览 OAD 或许是一个很好的第一步?

    https://dev.ti.com/tirex/explore/node?node=A__ABnTV9fKzF7fIRlG.Xe6BQ__com.ti.SIMPLELINK_CC13XX_CC26XX_SDK_TI154STACK_MODULE__BSEc4rl__LATEST&placeholder=true 

    我们提供了这个 SimpleLink Academy 实验、可指导您完成一些 OAD 调试。 请参阅任务3。

    https://dev.ti.com/tirex/explore/node?node=A__AdzaR5YxHU3-EzX70EuRBg__com.ti.SIMPLELINK_ACADEMY_CC13XX_CC26XX_SDK__AfkT0vQ__LATEST&placeholder=true 

    谢谢、

    Marie H.

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

    您好、感谢您的答复。

    我之前已经使用 sensor_oad_offchip 和 BIM 图像在 cc1357上测试了该设置、它的工作原理是这样的、我有一些想法、但不太清楚。

    无论怎样。 我使用 uniflash 直接上传了 sensor_oad_offchip 示例和 MCUboot 示例。 首先、sensor_oad_offchip 应用被正常加载、输出显示在串行监视器上、但当我复位时、由于 MCUboot 未跳转到所需的地址、我无法返回到应用程序。

    根据我的理解、只有在您执行 OAD 时才需要 OAD 标头、除了通过简单地跳转到已加载的示例而不需要标头、因为我们要跳转到矢量表地址、这是我在 cc1357中实现它的方式。  

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

    尊敬的 Hamza:

    MCUBoot 将在每次唤醒时检查 OAD 映像标头。 我不知道您是否在您的实现中考虑过这一点。 但是、如果您使用的 MCUboot 实现、则需要一个有效的 CRC、以便 MCUBoot 跳转到映像。

    谢谢、

    Marie H.

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

    是的、我明白了、并且把它取出了、我注释掉了所有内容  、只保留了 start_app ((uint32_t *) 0x00006000);