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.

[参考译文] 编译器/处理器 SDK-DRA8X:需要有关从 SPL 和 SBL 引导应用的帮助

Guru**** 2589300 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/975865/compiler-processor-sdk-dra8x-need-help-to-boot-application-from-spl-and-sbl

器件型号:PROCESSOR-SDK-DRA8X

工具/软件:TI C/C++编译器

您好、Karan、

我已经完成了查询 https://e2e.ti.com/support/processors/f/791/p/903161/3351424?tisearch=e2e-quicksearch&keymatch=ipc_echo_testb#pi320966filter=all&pi320966scroll=false

我们也面临着类似的问题。

我们有第三方供应商提供的二进制 application.out。 我们希望从 SD 卡(使用 SBL)引导 application.out。 为了使用 SBL 引导二进制文件、我们将复位矢量保留为 BTCM (在链接器文件中)、但它仍然无法按预期工作。

工作方案:在 SDCard 中保留二进制文件[SBL (tidboot3.bin)、sysfw.bin、app (TI 提供)]、然后从 CCS 加载 application.out。

非工作场景:我们保留第三方 application.out (重命名为应用)、而不是 TI 提供的应用程序。

我没有 TI 提供的应用程序源代码和链接器文件。 但我从 mcusw 演示中了解到、我们必须将复位矢量保持在 BTCM。 我尝试了这些更改、但没有工作。

在与 SBL 配合使用后、我们需要在 A72上运行 Linux 的情况下从 SPL 引导 application.out。

如果您可以在此处提供帮助、那将会很好。

谢谢、

Makani

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

    您好、Makani、

    -0-

    我想问的第一个问题是、您尝试使用的是哪个 SDK?

    -1-

    使用 BTCM 的限制是针对 SPL 而非 SBL

    使用 SBL、您可以使用不一定在 BTCM 中的复位矢量加载应用。 SBL 还启用了 ATCM。

    -2-

    现在、您的 application.out 无法加载 SBL 的原因可能是 SBL 可能无法为 application.out 中使用的模块设置正确的环境。 这意味着可能有一些模块未由 SBL 通电、而这些模块正在应用程序.out 中使用。

    更可能的原因可能是 application.out 的存储器映射不正确。 如果不正确、我意味着应用程序的存储器.out 会覆盖 SBL 存储器空间和/或 R5F MPU 未正确设置以运行应用程序.out。

    您能否查看从 SBL 成功加载的 SDK 应用程序的映射/链接器文件。 这也可以是 MCUSW 应用。 (示例- CAN_PROFILE_APP)

    此致、

    Karan

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

    您好、Makani、

    此外、让我们讨论在您能够使用 SBL 成功加载 SPL/u-boot 后在另一个线程上使用 SPL/u-boot 加载。

    此致、

    Karan

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

    您好、Karan、

    感谢您的支持。

    -0-

    我想问的第一个问题是、您尝试使用的是哪个 SDK?

    [Makani]-->我使用的是 PSK7.0

    -1-

    使用 BTCM 的限制是针对 SPL 而非 SBL。

    使用 SBL、您可以使用不一定在 BTCM 中的复位矢量加载应用。 SBL 还启用了 ATCM。

    [Makani]-->好的,我误解了 SBL 代码中的宏定义,我认为-DDISABLE_ATCM 在 SBL 代码中启用,但该宏处于 am64x 的条件下。 你是对的。

    -2-

    更可能的原因可能是 application.out 的存储器映射不正确。 如果不正确、我意味着应用程序的存储器.out 会覆盖 SBL 存储器空间和/或 R5F MPU 未正确设置以运行应用程序.out。

    [Makani]-->我确认了 application.out 的存储器映射不会覆盖 SBL 存储器空间。 实际上、我们的起始地址是0x41C3F000。

    =========== CAN_PROFILE_DEMO 的存储器映射===========
    ================================================================================================================
    /* 1MB MCU 域 MSRAM 拆分如下所示*/
    /*大小使用 的 F0000层数4 */
    /*                                 舍入偏移*/
    /*SBL?      启动  41C00000   245760 0  */
    /*         结束    41C3C000               */
    /*MCU 10   Start  41C3C100   245760 100 */
    /*         结束    41C78100               */
    /*MCU 11   开始  41C78200   245760 100 */
    /*         结束    41CB4200               */
    ================================================================================================================

    =========== application.out 的存储器映射===========
    ================================================================================================================
    存储器配置

            名称           源   长度     使用    未使用  的属性   填充
    ------------  ----  ------  ----  ----  --------  
     BTCM 存储器          41010000  0000c000 000001e8 0000be18 RWIX
     OCMCRAM_Common       41c3f000  0000c000 00001f40 0000a0c0 RWIX
     OCMCRAM_Common_NonCac 41c4b000  00000400 00000020 000003e0 RWIX
     OCMCRAM_Core0        41c4b400  00000400 000001d8 00000228 RWIX
     OCMCRAM_Core1        41c4b800  00000400 00000000 00000400 RWIX
     OCMCRAM_Core2        41c4bc00  00000400 00000000 00000400 RWIX
     OCMCRAM_Core3        41c4c000  00000400 00000000 00000400 RWIX
     OCMCRAM_Core4        41c4c400  00000400 00000000 00000400 RWIX
     OCMCRAM_Core5        41c4c800  00000400 00000000 00000400 RWIX
     DDR0                 97000000  01000000 0006ba5a 00f945a6 RWIX
    ================================================================================================================

    我漏掉了提到我可以从 CCS 加载符号、并在以下函数中看到它停留在 while (1)处。 基本上 Sciclient_rmIrqSet()失败。
    您已经提到、可能有一些模块未由 SBL 上电、而这些模块正在应用程序.out 中使用。 是否会导致这种情况?


    您能提供您的意见/建议吗?

    void I2C_InterruptConfig (void)

     struct tisci_msg_rm_irq_set_req rmIrqReq;
     struct tisci_msg_rm_IRQ_SET_RESP rmIrqResp;
     uint32 RetVal;

     /*
     *使用 DMSC 固件建立中断路径
     *表示主域上的 I2C 实例1
     *
     rmIrqReq.valid_params          = TISCI_MSG_value_RM_DST_ID_VALID;
     rmIrqReq.valid_params         |= TISCI_MSG_value_RM_DST_HOST_IRQ_VALID;
     rmIrqReq.src_id                = TISCI_DEV_I2C1;
     rmIrqReq.global_event          = 0U;
     rmIrqReq.src_index             = 0U;
     rmIrqReq.dst_id                = TISCI_DEV_MCU_R5FSS0_CORE0;
     rmIrqReq.dst_host_IRQ          = CSLR_MCU_R5FSS0_CORE0_INTR_MAIN2MCU_LVL_INTR0_OUTL_0 + 4;
     rmIrqReq.ia_id                 = 0U;
     rmIrqReq.vint                  = 0U;
     rmIrqReq.vint_status_bit_index = 0U;
     rmIrqReq.secondary_host        = TISCI_MSG_VALUE RM 未使用次要主机;
     RetVal = Sciclient_rmIrqSet (&rmIrqReq、&rmIrqResp、SCICLIENT_SERVICE_WAIT_FOREVY);
     if ((uint32) 0!= RetVal)
     {
       while (1);
     }

    如果您能在 I2C 问题上提供帮助、那将会很好。 无论如何、我将使用 SBL 引导并卡在应用程序中的某个位置(i2c 问题)。

    是的、我将使用 SPL/u-boot 创建另一个要加载的线程。

    再次感谢你。

    此致、

    Makani

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

    您好、Makani、

    在 https://e2e.ti.com/support/tools/ccs/f/81/t/976495线程中 、我看到您提到-"我能够使用 SBL 进行引导、现在相同的应用程序.out 无法使用 SPL 进行引导。 (使用 PSDK7.0)"、您能否确认您是否能够解决此问题?

    此致、

    Karan