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.

[参考译文] AM243X-AM243X:如何在引导失败后更改引导部分 MCU-PLUS-SDK

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1517966/mcu-plus-sdk-am243x-how-to-change-the-boot-section-after-a-boot-failure

器件型号:AM243X - MCU-PLUS-SDK

工具/软件:

您好的团队、

我开发 mcu_plus_sdk_am243x 的 sbl_ospi。

如果引导失败、 我正在考虑从另一个部分引导的方法。

目前、如果身份验证失败、引导段会按如下方式更改。

但是,由于 Bootloader_parseMultiCoreAppImage ()通常只使用一次,

我担心多次使用它可能会导致变量初始化等问题

像这样使用它有什么问题吗?

    /* Initialize PRU Cores if applicable */
    Bootloader_Config *cfg = (Bootloader_Config *)bootHandle;
    bootConfig = (Bootloader_Config *)bootHandle;
    bootConfig->scratchMemPtr = gAppimage;
    if(TRUE == cfg->initICSSCores)
    {
        status = Bootloader_socEnableICSSCores(BOOTLOADER_ICSS_CORE_DEFAULT_FREQUENCY);
        DebugP_assert(status == SystemP_SUCCESS);
    }
    
    /* If booting from 0x100000 fails, switch to 0x200000 */
    uint32_t BootSelect=0;
    if(BootSelect==0){
        ((Bootloader_FlashArgs *)(cfg->args))->appImageOffset = 0x100000;
        DebugP_log("Change boot section to 0x100000\r\n");
        status = Bootloader_parseMultiCoreAppImage(bootHandle, &bootImageInfo);
        if(status != SystemP_SUCCESS){
            BootSelect = 1;
        }
    }
    if(BootSelect==1){
        ((Bootloader_FlashArgs *)(cfg->args))->appImageOffset = 0x200000;
        DebugP_log("Change boot section to 0x200000\r\n");
        status = Bootloader_parseMultiCoreAppImage(bootHandle, &bootImageInfo);
        if(status != SystemP_SUCCESS){
        }
    }

最好的考虑

Oyama

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

    您好、Oyama、

    Unknown 说:
    但是、由于 Bootloader_parseMultiCoreAppImage ()通常只使用一次、

    我看不到这种方法有任何问题、对只调用此 API 一次没有限制。

    Unknown 说:
    我担心多次使用它可能会导致变量初始化等问题。

    如果映像在身份验证阶段失败、这不会导致问题、但如果您发现此问题、则可以尝试为不同的部分使用不同的变量。

    此致、

    会面。

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

    尊敬的会议:

    您可以尝试对不同的部分使用不同的变量

    做了什么 成正比 请参阅?

    读取一个填充了0xFF 的空段后、

    bootloader_parseMultiCoreAppImage ()总是返回错误,即使它读取的段是正确的。

    是否有办法避免这种情况?

        /* From offset 0x100000, it is filled with "0xFF"*/
        uint32_t BootSelect=0;
        if(BootSelect==0){
            ((Bootloader_FlashArgs *)(cfg->args))->appImageOffset = 0x100000;
            DebugP_log("Change boot section to 0x100000\r\n");
            status = Bootloader_parseMultiCoreAppImage(bootHandle, &bootImageInfo);
            if(status != SystemP_SUCCESS){
                BootSelect = 1;
            }
        }
         /* From offset 0x200000, it is Normal image data*/
        if(BootSelect==1){
            ((Bootloader_FlashArgs *)(cfg->args))->appImageOffset = 0x200000;
            DebugP_log("Change boot section to 0x200000\r\n");
            status = Bootloader_parseMultiCoreAppImage(bootHandle, &bootImageInfo);
            if(status != SystemP_SUCCESS){
                //It will reach this section
            }
        }

    最好的考虑

    Oyama

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="633815" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1517966/mcu-plus-sdk-am243x-how-to-change-the-boot-section-after-a-boot-failure/5842846 #5842846"]

    读取一个填充了0xFF 的空段后、

    bootloader_parseMultiCoreAppImage ()总是返回错误,即使它读取的段是正确的。

    [/报价]

    您能详细说明一下、我无法完全理解这一点。 使用 Bootloader_parseMultiCoreAppImage 读取空段背后的用例是什么、此 API 用于读取 appimage、该 API 需要以特定格式读取 appimage、标头中包含 x509证书、如果您尝试读取存储器的任何随机部分、则预计此 API 会给出错误。

    What does 成正比 请参阅?

    bootHandle:https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/11_00_00_15/exports/docs/api_guide_am243x/group__DRV__BOOTLOADER__MODULE.html#ga8c2fc1e55aeabdc0aeb19b979fa8d662

    这是通过 syscfg 生成的 gBootloaderConfig 变量进行配置的。

    BootImageInfo: https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/11_00_00_15/exports/docs/api_guide_am243x/structBootloader__CpuInfo.html

    此数据结构包含与所有 CPU 相关的信息、由 Bootloader_parseMultiCoreAppImage 填充。

    此致、

    会面。

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

    尊敬的会议:

    即使它无法在偏移0x100000处引导、我也希望它从0x200000引导。

    但是、如果偏移量0x100000处的数据是未经认证的随机数据、

    它不仅会返回错误、而且后续从0x200000启动也可能失败。

    最好的考虑

    Oyama

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

    您好、Oyama、

    它不仅会返回一个错误、但随后从0x200000启动也可能失败。

    能否解释一下引导表单0x200000时出现的问题? 日志中是否有任何错误消息、或者程序卡在某个位置? 您能从 UART 终端共享引导日志吗?

    此致、

    会面。

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

    尊敬的会议:

    我 在 AM243x-LP 上进行了尝试。

    我将此代码添加到了 sbl_ospi_am243x-lp 中。

                /* Initialize PRU Cores if applicable */
                Bootloader_Config *cfg = (Bootloader_Config *)bootHandle;
                bootConfig = (Bootloader_Config *)bootHandle;
                bootConfig->scratchMemPtr = gAppimage;
                if(TRUE == cfg->initICSSCores)
                {
                    status = Bootloader_socEnableICSSCores(BOOTLOADER_ICSS_CORE_DEFAULT_FREQUENCY);
                    DebugP_assert(status == SystemP_SUCCESS);
                }
    
                uint32_t ImageOffset=0;
    
                ImageOffset=0x200000;
                ((Bootloader_FlashArgs *)(cfg->args))->appImageOffset = ImageOffset;
                DebugP_log("Change boot section from 0x200000\r\n");
                DebugP_log("There is no data in this section\r\n");
                status = Bootloader_parseMultiCoreAppImage(bootHandle, &bootImageInfo);
                if(status==SystemP_SUCCESS){
                    DebugP_log("Success boot from 0x%x\r\n",ImageOffset);
                }
                else{
                    DebugP_log("False boot from 0x%x : status=0x%x\r\n",ImageOffset,status);
                }
    
                ImageOffset=0x80000;
                ((Bootloader_FlashArgs *)(cfg->args))->appImageOffset = ImageOffset;
                DebugP_log("Change boot section from 0x80000\r\n");
                DebugP_log("This section contains the default hs_fs applications\r\n");
                status = Bootloader_parseMultiCoreAppImage(bootHandle, &bootImageInfo);
                if(status==SystemP_SUCCESS){
                    DebugP_log("Success boot from 0x%x\r\n",ImageOffset);
                }
                else{
                    DebugP_log("False boot from 0x%x : status=0x%x\r\n",ImageOffset,status);
                }
    
                ImageOffset=0x80000;
                ((Bootloader_FlashArgs *)(cfg->args))->appImageOffset = ImageOffset;
                DebugP_log("Try again boot section from 0x80000\r\n");
                DebugP_log("This section contains the default hs_fs applications\r\n");
                status = Bootloader_parseMultiCoreAppImage(bootHandle, &bootImageInfo);
                if(status==SystemP_SUCCESS){
                    DebugP_log("Success boot from 0x%x\r\n",ImageOffset);
                }
                else{
                    DebugP_log("False boot from 0x%x : status=0x%x\r\n",ImageOffset,status);
                }
            
    
                uint32_t coreVariant = Bootloader_socGetCoreVariant();
                /*Checks the core variant(Dual/Quad) */

    引导日志如下所示

    DMSC Firmware Version 11.0.7--v11.00.07 (Fancy Rat)
    DMSC Firmware revision 0xb
    DMSC ABI revision 4.0
    
    Change boot section from 0x200000
    There is no data in this section
    False boot from 0x200000 : status=0xffffffff
    Change boot section from 0x80000
    This section contains the default hs_fs applications
    False boot from 0x80000 : status=0xffffffff
    Try again boot section from 0x80000
    This section contains the default hs_fs applications
    Success boot from 0x80000
    KPI_DATA: [BOOTLOADER_PROFILE] Boot Media       : NOR SPI FLASH
    KPI_DATA: [BOOTLOADER_PROFILE] Boot Media Clock : 100.000 MHz
    KPI_DATA: [BOOTLOADER_PROFILE] Boot Image Size  : 272 KB
    KPI_DATA: [BOOTLOADER_PROFILE] Cores present    :
    r5f0-0

    最好的考虑

    Oyama

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

    您好、Oyama、

    我从日志中可以看到、当您为偏移量0x80000运行两次引导加载程序后、引导会成功、下面我尝试看看这里可能有什么问题。 我将尝试在我结束时重现此内容、并向您更新结果。

    此致、

    会面。