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.

[参考译文] AM62A7:从 SBL 中的 EMMC BOOT1加载程序

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1434026/am62a7-load-programs-from-emmc-boot1-in-sbl

器件型号:AM62A7

工具与软件:

尊敬的 TI 专家:

客户正在使用 AM62A SDK9.2。

我们知道我们有 EMMC boot 0和 boot 1、默认情况下、我们在 SDK 中使用 boot 0在 SBL 中加载程序。

客户尝试改为使用 EMMC boot 1在 SBL 中加载程序。

但是、他们似乎无法做到这一点、引导加载程序驱动程序代码将强制将其配置为 EMMC boot 0、如果客户将其修改为1、则会生成 CPU 释放错误。

因此、客户想知道我们是否计划支持使用  EMMC 引导1在 SBL 中加载程序、我们如何实现?

非常感谢、

Kevin

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

    您好!

    因此、客户想知道我们是否计划支持使用  EMMC 引导1在 SBL 中加载程序、该怎么做?

    目前还没有计划支持它。 我现在能做的最好的事情就是检查客户的更改是否有任何错误。

    您能否让客户分享他们到目前为止所做的更改以及引导日志、以便更好地了解问题?

    谢谢!  

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

    我想通过 MMCSD_enableBootPartition 函数在 SBL 用户应用中切换 EMMC 引导分区、但我发现切换失败。

    不过、MMCSDRaw_imgRead 函数会被强制为 EMMC BOOT0。  MMCSDRaw_imgRead 函数代码:

    static int32_t MMCSDRaw_imgRead(void *dst, uint32_t len, void *args)
    {
        int32_t status = SystemP_SUCCESS;
    
        Bootloader_MmcsdArgs *MMCSDArgs = (Bootloader_MmcsdArgs *)args;
        MMCSD_Handle handle = MMCSD_getHandle(MMCSDArgs->MMCSDIndex);
    
        if(handle == NULL)
    	{
    	   status = SystemP_FAILURE;
    	}
    
        if(status == SystemP_SUCCESS)
        {
            status = MMCSD_enableBootPartition(handle, 1);
    
            if(status != SystemP_SUCCESS)
            {
    
            }
            else
            {
                status = Bootloader_MmcsdRaw_readFromOffset(handle, dst, len, MMCSDArgs->curOffset);
    
                if(status != SystemP_SUCCESS)
                {
                    DebugP_log("[MMCSDRaw_imgRead] Failed \r\n");
                }
                else
                {
                    DebugP_log("[MMCSDRaw_imgRead] Sucess \r\n");
                    CacheP_wb(dst, len, CacheP_TYPE_ALL);
                    MMCSDArgs->curOffset += len;
                }
            }
        }
    
        return status;
    }

     我尝试删除的行  

    状态= MMCSD_enableBootPartition (句柄1);
    但程序有报告错误、错误日志如下:
    ERROR: Bootloader_socCpuResetRelease:861: CPU set boot address failed for a530-0
    ERROR: Bootloader_socCpuRelease:496: CPU release failed for a530-0
    
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="590305" url="~/support/processors-group/processors/f/processors-forum/1434026/am62a7-load-programs-from-emmc-boot1-in-sbl/5499480 #5499480"]

     我尝试删除的行  

    状态= MMCSD_enableBootPartition (句柄1);
    [报价]

    要启用对 eMMC boot1分区的访问、相应的调用将是`MMCSD_enableBootPartition (handle、2)`。

    根据特定的逻辑、您可以修改`MMCSDRaw_imgRead`以启用 Boot0 (partitionNum = 1)或 boot1 (partitionNum = 2)分区、从而从已启用的分区进行读取。

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

    那么、我们可以编写一个 API 来读取当前的引导分区编号?

    但为什么删除该行、它会报告错误。

    我认为、当 ROM 引导加载程序加载 SBL 时、这意味着来自 BOOT0或 BOOT1的代码

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    所以我们可以编写一个 API 来读取当前引导分区编号?

    此逻辑应涉及根据要引导的映像的位置启用 Boot0/1分区。

    但为什么删除该行、IT 报告错误。

    如果删除该行、则未启用引导分区、并且未读取、解析和加载映像。

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

    是的、我需要该 API。TI 会实施该 API 吗? 或者我们进行开发?

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

    不需要 API。 您应该有一个使用引导分区编号初始化的变量、用于引导要引导的映像、并将该变量(而不是硬编码值1)传递给 MMCSDRaw_imgRead 函数中的 MMCDS_enableBootPartition 函数调用。

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

    不需要、我们需要从 EMMC 哪个 BOOT0或 boot1读取寄存器。 我们需要使用 API 来读取 EMMC 当前分区。

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

    我认为这不是必需的。 要启用的引导分区事先已知、并且无论当前活动的引导分区如何、都可以启用。