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:禁用引导加载程序暂存存储器 — bootloader_scratch_MEM_ENABLE 定义 MCU-PLUS-SDK

Guru**** 2482105 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1555998/mcu-plus-sdk-am243x-disable-bootloader-scratch-memory---bootloader_scratch_mem_enable-define

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


工具/软件:

您好:
我 在 AM243X-LP 上将 AM243x MCU+ SDK 11.01.00 与 SYSCFG 1.22 一起使用。 我的应用的调试构建已达到“临界质量“、几乎无法容纳可用的 RAM 存储器。 我注意到我的引导加载程序(主要基于 examples\drivers\boot\sbl_ospi_multi_partition\am243x-lp)开始失败、因此 Bootloader_verifyMulticoreImage() 我正在调试问题、并注意到在 SDK 中 (source\drivers\bootloader\bootloader.c 行 595)、由于启用了暂存存储器、整个映像被复制到 RAM 中以进行映像验证、这对我来说是个问题。

首先、我是否错过了 SYSCFG 中用于禁用引导加载程序暂存存储器的设置?

我继续 BOOTLOADER_SCRATCH_MEM_ENABLE在 SDK 中设置为 0 source\drivers\bootloader.h、重新编译 SDK、没有发生任何变化。 因此、我做了更多挖掘工作、在我的引导加载程序源文件 (ti-arm-clang\generated\ti_drivers_config.c) 中、 gBootloaderConfig数组中填充了 Bootloader_Config用于 BOOTLOADER_SCRATCH_MEM_ENABLE enableScratchMem成员的初始化。 因此、中 SDK 中的以下代码 bootloader.c 595

// config->enableScratchMem is set to BOOTLOADER_SCRATCH_MEM_ENABLE by SysCfg
if(config->enableScratchMem == BOOTLOADER_SCRATCH_MEM_ENABLE){

有一些 0U == 0U 或 1U == 1U 正在进行,我发现有趣的是,当我发现了 Slight smile

这对我来说似乎是一个错误,除非我错过了一些东西。 我有一些变通办法、例如使用不同的 BOOTLOADER_SCRATCH_MEM_ENABLE 值编译 SDK 和引导加载程序、或者更好地将上面的 if 语句更改为 config->enableScratchMem == 1U。  这一切都 是假设禁用暂存存储器是可能的吗?

谢谢、
Vaclav

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

    尊敬的 Vaclav:

    您可以通过在 bootloader_soc.h 中删除以下宏定义来禁用暂存存储器支持: https://github.com/TexasInstruments/mcupsdk-core/blob/next/source/drivers/bootloader/bootloader_soc.h/am64x_am243x/bootloader_soc.h#l45 soc

    此致、

    会面。

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

    感谢您的快速回复会面,
    //#define BOOTLOADER_SCRATCH_MEM_SUPPORT在 https://github.com/TexasInstruments/mcupsdk-core/blob/next/source/drivers/bootloader/sdk/am64x_am243x/bootloader_soc.h#l45 中禁用 不会在我的 soc 版本 gMemBootloaderArgs BOOTLOADER_SCRATCH_MEM_SUPPORT 中编译 、因为现在不可用的功能正在 github.com/.../bootloader.c 中“无保护“使用。 注意: DRV_VERSION_MMCSD_V0在 https://github.com/TexasInstruments/mcupsdk-core/blob/next/source/drivers/hw_include/am64x_am243x/soc_config.h#L96 中启用了环绕宏。 编译器输出:

     Compiling: drivers.am243x.r5f.ti-arm-clang.release.lib: bootloader/bootloader_flash.c
    bootloader/bootloader.c:753:21: error: use of undeclared identifier 'gMemBootloaderArgs'
      753 |                     gMemBootloaderArgs.appImageBaseAddr = (uint32_t)(config->scratchMemPtr) + certLen;
          |                     ^
    bootloader/bootloader.c:754:21: error: use of undeclared identifier 'gMemBootloaderArgs'
      754 |                     gMemBootloaderArgs.curOffset = 0U;
          |                     ^
    bootloader/bootloader.c:757:37: error: use of undeclared identifier 'gMemBootloaderArgs'
      757 |                     config->args = &gMemBootloaderArgs;
          |



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

    此错误是由于以下代码段导致的: https://github.com/TexasInstruments/mcupsdk-core/blob/next/source/drivers/bootloader/bootloader.c#L87

    禁用此功能的更好方法是在 bootConfig 中将 enableScratch Mem 设置为 0、并在 SBL OSPI MULTISTARTITION 的 main.c 中将 scratchMemPtr 设置为 NULL。 请参阅以下补丁:

    diff --git a/examples/drivers/boot/sbl_ospi_multi_partition/am243x-evm/r5fss0-0_nortos/main.c b/examples/drivers/boot/sbl_ospi_multi_partition/am243x-evm/r5fss0-0_nortos/main.c
    index e1a6d835..975cdd90 100644
    --- a/examples/drivers/boot/sbl_ospi_multi_partition/am243x-evm/r5fss0-0_nortos/main.c
    +++ b/examples/drivers/boot/sbl_ospi_multi_partition/am243x-evm/r5fss0-0_nortos/main.c
    @@ -91,7 +91,8 @@ int32_t App_bootCpu(uint32_t bootDrvInstanceId, uint32_t cpuId)
     
         bootHandle = Bootloader_open(bootDrvInstanceId, &bootParams);
         bootConfig = (Bootloader_Config *)bootHandle;
    -    bootConfig->scratchMemPtr = gAppimage;
    +    bootConfig->enableScratchMem = 0;
    +    bootConfig->scratchMemPtr = NULL;
     
         if(bootHandle != NULL)
         {
    @@ -120,7 +121,9 @@ int32_t App_bootLoadSelfCpu(uint32_t bootDrvInstanceId, uint32_t cpuId)
     
         bootHandle = Bootloader_open(bootDrvInstanceId, &bootParams);
         bootConfig = (Bootloader_Config *)bootHandle;
    -    bootConfig->scratchMemPtr = gAppimage;
    +    bootConfig->enableScratchMem = 0;
    +    bootConfig->scratchMemPtr = NULL;
    +    
         if(bootHandle != NULL)
         {
             status = Bootloader_parseMultiCoreAppImage(bootHandle, &bootImageInfo);

    请保持宏定义 of BOOTLOADER_SCRATCH_MEM_SUPPORT 不变。

    此致、

    会面。

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

    效果很好。 我应该已经意识到Bootloader_Config我可以访问引导加载程序代码中的结构。 TI SDK 中的宏定义没有什么可疑之处、但我现在有一个很好的解决方案。 非常感谢!