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.

[参考译文] SK-AM62-LP:关于在 OSPI NOR 引导模式下可由 SBL 加载的应用程序映像创建

Guru**** 2538930 points
Other Parts Discussed in Thread: SK-AM62-LP, UNIFLASH, AM625

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1565731/sk-am62-lp-regarding-application-image-creation-which-is-loadable-by-sbl-in-ospi-nor-boot-mode

器件型号:SK-AM62-LP
Thread 中讨论的其他器件: UNIFLASH

工具/软件:

您好团队:

我们对 SK-AM62-LP 板使用 OSPI NOR 引导模式。

我们需要在 R5 内核中以独立模式运行我们的应用。

您能不能告诉我们 SBL 和应用程序之间的存储器处理方式、因为我们在 OSPI NOR 引导模式下使用 SBL。 我们需要应用程序矢量表的地址、还要在 SBL 引导时将应用程序复制到哪个 DDR 地址、以及将矢量表复制到哪个 TCM 存储器。

根据 TI 文档、我们需要知道、对于 SK-AM62-LP 板、我们需要生成 hs_fs 映像。

我们尝试将应用程序 elf 转换为 rprc 映像、然后将 rprc 映像转换为 hs_fs 映像。

您能否告诉我们转换为这些图像的步骤。

我们有用于 OSPI NOR 模式的默认 SBL cfg 文件、其中包含以下各映像

#第一个指向 sbl_uart_uniflash_stage1 二进制文件,它初始化 DDR 并接收 sbl_uart_uniflash_stage2 二进制文件
-- flash-writer=image/sbl_uart_uniflash_stage1.Release.hs_fs.tiimage

#指向 sbl_uart_uniflash_stage2 二进制文件,它作为一个服务器来刷写一个或多个文件
#请注意、该二进制文件由 SBL_UART_uniflash_stage1 复制到 DDR、不会写入闪存或 eMMC 等任何引导介质
--file=image/sbl_uart_uniflash_stage2_am62x-sk-LP_r5fss0-0_nortos_ti-arm-clang.appimage.hs_fs --operation=flash --flash-offset=0x0

#现在发送一个或多个文件到闪存或 flashverify 根据需要。 发送文件的顺序无关紧要

#发送引导加载程序时、请确保闪存偏移为 0x0。 ROM 期望引导加载程序位于偏移量 0x0 处
-file=image/sbl_ospi_nor_stage1.Release.hs_fs.tiimage --option=flash --flash-offset=0x0

# DM 映像会在 0xa00000 处或引导加载程序配置的任何偏移处刷新
-file=image/Application.appimage.hs_fs --operation=flash --flash-offset=0xA0000         ----- >在我们的应用中用于 R5 内核

在 OSPI NOR 模式下、使用应用映像引导多个内核时、该 Cfg 文件是否正确?

对于 rprc 生成:  

cd ${SDK_INSTALL_PATH}/tools/boot/out2rprc
${node}elf2rprc.js{input application executable file (.out)}此处应为 Node 的值
对于 HS_FS 映像生成:
cd ${SDK_INSTALL_PATH}/tools/boot/signing
$(Python) appimage_x509_cert_gen.py --bin --authtype 0 --loadaddr 84000000 --key ——输出 --键版本 1.5
我们应在什么基础上选择加载地址以及如何选择内核名称或内核 ID
您能否就上述问题提供反馈?
谢谢你。

此致、

Pradeep R

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

    您好 Pradeep、

    我们想要应用程序的矢量表地址、以及当 SBL 引导时、应用程序将复制到哪个 DDR 地址、以及将向量表复制到哪个 TCM 存储器。

    这通常在应用程序的链接器文件中定义: mcupsdk-core-k3/examples/hello_world/am62x-sk-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd·、位于 k3_main TexasInstruments/mcupsdk-core-k3·GitHub

    我们尝试将应用程序 elf 转换为 rprc 映像、然后将 rprc 映像转换为 hs_fs 映像。

    您可以在此处使用 MCU+SDK 工具:

    因此、步骤是将.out 转换为.rprc:AM62x MCU+ SDK:Boot Tools

    然后生成多核 appimage: AM62x MCU+ SDK:引导工具

    对于 HS-SDK/HS-SE 器件、您还必须使用 MCU+SDK:FS MCU+ SDK:引导工具中提供的签名脚本对映像进行签名

    我们应该根据什么来选择加载地址以及如何选择核心名称或核心标识

    该加载地址是 SBL 临时加载用于身份验证的 appimage 的地址: k3_coore-k3/examples/drivers/boot/sbl_ospi_nand_multist/sbl_ospi_nand_stage2/am62x-sk-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd、位于 k3_main TexasInstruments/k3-mcupk3-mcupk3-core ··

    无需更改此地址、应按原样保留。

    您可以在我之前分享的多核 Appimage Gen 指南中找到内核 ID。

    此致、

    会面。

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

    大家好、

    感谢您的反馈。

    我们还有几个问题

    1 我们是否需要 SBL 阶段 2 tii 映像来实现此目的?

    2 我们是否也可以对 OSPI NOR 闪存使用相同的 SBL NAND tiimages?

    此致、

    Pradeep R

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1 我们是否需要 SBL Stage 2 tii 映像来实现此目的?

    是的、您需要 SBL stage-1 和 stage-2 用于: AM62x MCU+ SDK:SBL 从 OSPI 引导 Linux

    2 我们是否可以对 OSPI NOR 闪存使用相同的 SBL NAND tiimages?

    不、这将不起作用。 SBL OSPI NAND 示例是针对具有 NAND 闪存的 am62x-sk-LP 板制作的、因此它具有不同的闪存配置以支持该板上的 NAND 闪存、这同样不适用于 OSPI NOR 闪存。

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

    大家好、

    您能给我们分享阶段 1 和阶段 2 的 SBL OSPI NOR 闪存 ti 映像吗?

    此致、

    Pradeep R

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

    它作为 MCU+SDK 的一部分提供、您在使用哪个 EVM?

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

    大家好、

    我们正在使用 MCU_PLUS_SDK_am62x_10_01_00_33

    我们未找到任何 SBL OSPI NOR 映像

    EVM: SK-AM62-LP 板

    此致、

    Pradeep R

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

    SK-AM62-LP 具有一个 NAND 闪存、而不是 NOR 闪存、因此只有 SBL OSPI NAND 示例可用于此电路板。

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

    大家好、

    我们的客户在此电路板上焊接了 OSPI NOR 闪存。  

    那么我们应该要求我们的客户也分享这个,或者我们可以生成这个吗?

    此致、

    Pradeep R

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

    您可以要求他们将 SBL OSPI 示例用于 am62x-sk、该示例基于 OSPI NOR 闪存 S28HS512T。 如果他们使用的是不同的闪存、您可以要求他们参阅此指南、了解如何添加对自定义闪存的支持: https://software-dl.ti.com/mcu-plus-sdk/esd/AM62X/11_01_00_16/exports/docs/api_guide_am62x/CUSTOM_FLASH_SUPPORT_GUIDE.html

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

    大家好、

    当然、感谢您的反馈

    此致、

    Pradeep R

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

    大家好、

    另一个问题是、对于 hs_fs 图像、我们是否应使用多核图像生成器或签名图像生成器

    此致、

    Pradeep R

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

    您好 Pradeep、

    若要生成 FS 多核应用映像、必须按照这两个步骤操作。 首先、您为不同的内核生成包含 rprc 的.appimage、然后使用签名脚本对该 appimage 进行签名以生成.appimage.hs_fs 二进制文件。

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

    大家好、

    当然、感谢您的反馈

    此致、

    Pradeep R

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

    大家好、

    对于由 SBL 加载的 SBL 映像或示例、我们使用不同的签名脚本。 这完全是因为 ROM 和 SYSFW 之间存在 x509 证书模板差异。 在 GP 器件中、应用映像不签名。 仅在 HS 器件中进行签名。 脚本用法为:

    cd ${SDK_INSTALL_PATH}/tools/boot/signing
    $(Python) appimage_x509_cert_gen.py --bin --authtype 0 --loadaddr 84000000 --key ——输出 --键版本 1.5
    这里应该是什么  signing-key-derived-from-devconfig ,它是 在 HS 器件的情况 BOOTIMAGE_CERT_KEY 下,是 custMpk_am62x .pem

    此致、

    Pradeep R

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“551053" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1565731/sk-am62-lp-regarding-application-image-creation-which-is-loadable-by-sbl-in-ospi-nor-boot-mode/6029627
    这里应该是什么  signing-key-derived-from-devconfig ,它是 在 HS 器件的情况 BOOTIMAGE_CERT_KEY 下,是 custMpk_am62x .pem

    此致、

    [/报价]

    是的、正确。

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

    大家好、

    当然、感谢您的反馈

    此致、

    Pradeep R

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

    大家好、

    我们已按照以下步骤为 R5 内核的 SK-AM62-LP 板生成最终的 HS_FS 应用映像  

    1 ELF 到 RPRC
    C:\ti\mcu_plus_sdk_am62x_10_01_00_33\tools\boot\out2rprc>“C:\ti\ccs1281\ccs\tools\node\node.exe“ elf2rprc.js “C:\projects\workspace\simple_demo_rte_pv6\out\out\tools\arm\rthe_cnode.exe“ elf2rprc.elf2rprc.xelf_exe“

    这里为 rprc :它是问节点,所以我给了从 CCS 的节点 exe 的路径。 这是正确的吗?


    2 RPRC 到 APP_image
    C:\ti\mcu_plus_sdk_am62x_10_01_00_33\tools\boot\multicoreImageGen>“C:\ti\ccs1281\ccs\tools\node\node.exe“ multicoreImageGen.js -AM62ID 55 -out “C:\projects\workspace\simple_demo_eth_rte@


    3 个 APP_image 到 HS_FS_Image
    C:\ti\mcu_plus_sdk_am62x_10_01_00_33\tools\boot\signing>python appimage_x509_cert_gen.py --bin “C:\projects\workspace\simple_demo_eth_rte_pv6te_pv6\output\bin\arm_AM625_simple_demo_demo_

    这些步骤是否正确?

    此致、

    Pradeep R

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

    您好 Pradeep、

    这些步骤看起来是正确的、如果您尝试使用默认的 makefile 来生成映像、则不需要明确执行这些步骤、因为已经处理了这些步骤、请参阅 hello world 的 makefile 示例: https://github.com/TexasInstruments/mcupsdk-core-k3/blob/k3_main/examples/hello_world/am62x-sk/r5fss0-0_freertos/ti-arm-clang/makefile

    您可以将其作为参考进行检查。

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

    大家好、

    将此 makefile 包含在我们的应用程序环境中需要花费一定的时间。

    即使在创建了所有必需的更改后、我们也无法看到应用程序正在运行。

    SBL NOR ti 映像由我们的客户共享、它同时执行阶段 1 和阶段 2

    如何知道为什么我们的应用程序未成功运行。 我们还需要将应用异常表放置在何处。 根据 hello world 示例、处理方式有所不同。

    此致、

    Pradeep R

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

    您好 Pradeep、

    请与我共享引导日志。

    SBL NOR ti 映像由我们的客户共享、它同时执行阶段 1 和阶段 2

    这是什么意思? SBL stage-1 和 stage-2 通常是两个不同的二进制文件、您能对此进行详细说明吗?  

    即使创建了所有必需的更改、我们也无法看到应用程序正在运行。

    请与我共享引导日志。

    如何知道为什么我们的应用程序未成功运行。 我们还需要将应用异常表放置在何处。 根据 hello world 示例、处理方式有所不同。

    对于 SBL 阶段和应用程序、.vectors 和入口点的放置方式都不同、  

    第 1 阶段: https://github.com/TexasInstruments/mcupsdk-core-k3/blob/k3_main/examples/drivers/boot/sbl_ospi_multistage/sbl_ospi_stage1/am62x-sk/r5fss0-0_nortos/ti-arm-clang/linker.cmd#L17

    第 2 阶段: https://github.com/TexasInstruments/mcupsdk-core-k3/blob/k3_main/examples/drivers/boot/sbl_ospi_multistage/sbl_ospi_stage2/am62x-sk/r5fss0-0_nortos/ti-arm-clang/linker.cmd#L17

    应用程序: https://github.com/TexasInstruments/mcupsdk-core-k3/blob/k3_main/examples/hello_world/am62x-sk-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd#L45

    此外、我不确定客户正在使用哪个电路板。 是 am62x-sk-LP、am62x-SK 还是定制电路板?  

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

    大家好、

    请查找作为 Reference.zip 的一部分共享的 SBL 映像和错误映像。 还添加了所用应用的链接器文件

    e2e.ti.com/.../Reference.zip

    此致、

    Pradeep R

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

    客户似乎已在 stage-1 中集成了加载 A53。

    我在这里没有看到任何错误、我看到 SBL 成功运行并且日志符合预期:

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

    大家好、

    但我们的测试范围是 R5 内核。

    我们需要从 R5 内核为应用执行

    此致、

    Pradeep R

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

    我检查了您共享的链接器、您没有使用 --entry_point 设置入口点、如下所示: https://github.com/TexasInstruments/mcupsdk-core-k3/blob/k3_main/examples/hello_world/am62x-sk-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd#L20

    此外、您没有将矢量表放置在正确的部分、正如我提到的、您可以参考 DM R5 的 hello world 的链接器并检查 DM R5 的异常表在何处放置并在链接器文件中执行相同的操作、请检查此: https://github.com/TexasInstruments/mcupsdk-core-k3/blob/k3_main/examples/hello_world/am62x-sk-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd#L45

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

    大家好、

    我们正在设置 -entry_point =“boardResetStart",“,这、这是我们的启动函数、但您希望我将其设置为“_self_reset_start"</s>“

    我们是否应该将.vectors 替换为矢量表名称?

    此致、

    Pradeep R

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

    看起来您正在使用一些自定义的 makefile/编译过程。 我在您共享的链接器文件 (Application.ldscript) 中看不到 — entry_point 定义 、在我们的 SDK 中、默认入口点为_self_reset_start、boardResetStart 看起来像 一个自定义函数、不是来自默认 SDK 的函数、我不确定它在做什么、您可以通过将_self_reset_start 设置为入口点来尝试一次。

    我们是否应该用矢量表名称替换.vectors?

    我不确定您的意思、我没有看到您分享的链接器中定义了.vectors 我看到了 EXCTABLE 定义、如果这应该是向量表、那么它应该放置在 Default hello_world 示例中.vectors 放置的位置。 在 MCU+SDK 中、矢量表位于.vectors 部分中:

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

    大家好、

    我们有矢量表“.EXCTABLE  “、它与“.vectors"执行“执行相同的操作

    但现在如果我们将入口点设置为_self_reset_start、则自行复位函数将复制.vectors、而不是.EXCTABLE

    即使我们尝试设置入口点“ARM 异常表“、但随后也不会复制来自 DDR 的数据。

    我们可以在这里继续。

    请找到随附的 LD 脚本 e2e.ti.com/.../8103.Application.zip

    此致、

    Pradeep R  

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

    我认为 您的这个 boardResetStart 与 _self_reset_start 执行相同的函数、其中包括将矢量表从.vectors(在您的例子中为.EXCTABLE)复制到 TCM、如果我错了、请纠正我。

    在本例中、我们可以尝试以下操作、 像以前一样将入口点设置为 boardResetStart、并将.EXCTABLE 放入 DDR 存储器中、这种组合应该符合我的理解。

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

    大家好、

    当前否、仍没有添加此实现“将矢量表从.vectors(在本例中为.EXCTABLE)从 DDR 复制到 TCM “。  

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

    您能否详细说明 boardResetStart 的功能以及为什么将其设置为入口点?

    问题的主要原因是矢量表未放置在正确的地址、请检查 _self_reset_start、它将矢量表复制到适当的地址的 TCM、并对 DM R5 内核执行自复位功能、这是从 _self_reset_start 中复制到 TCM 的矢量表:

    https://github.com/TexasInstruments/mcupsdk-core-k3/blob/k3_main/source/drivers/device_manager/self_reset/dm_self_reset.c#L154

    以下是在 MCU+SDK 中定义矢量表并放置在.vector 部分中: https://github.com/TexasInstruments/mcupsdk-core-k3/blob/k3_main/source/kernel/nortos/dpl/r5/HwiP_armv7r_vectors_nortos_asm.S#L39

    我希望这能让您了解 R5 固件需要做什么。

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

    大家好、

    boardResetStart 执行 MPU 初始化、初始化寄存器、然后调用电路板启动(在其中进行存储器和时钟初始化)

    OS_ASM_LABEL (boardResetStart)
    /*无需对 PLL 和时钟进行设置、因为这是在 Cortex-R5 中完成的
    *在 CMM 脚本中启动。
    */

    bl __mpu_init /* MPU Init AN=d 由 TI 库处理的缓存初始化*/

    OS_CPSID_SVC /*切换到 SVC 模式、将 I 位设置为可禁用中断*/

    /*初始化所有 CPU 寄存器*/
    MOV r0、#0x00
    MOV R1、#0x00
    MOV R2、#0x00
    MOV R3、#0x00
    MOV R4、#0x00
    MOV R5、#0x00
    MOV R6、#0x00
    MOV r7、#0x00
    MOV R8、#0x00
    MOV R9、#0x00
    MOV R10、#0x00
    MOV r11、#0x00
    MOV R12、#0x00
    MOV r14、#0x00
    /*设置堆栈指针*/
    LDR R13、OS_iSpInitialAddr /*用于启动的设置堆栈*/
    LDR R13、[R13]

    /*初始化所有 vFPU 寄存器*/
    BL OS_ARM_EnableVFPCoprocessor /*启用 FPU 协处理器*/
    VMov D1、R1、R1
    VMov D2、R1、R1
    VMov D3、R1、R1
    VMov D4、R1、R1
    VMov D5、R1、R1
    vmov d6、r1、r1
    VMov D7、R1、R1
    VMov D8、R1、R1
    VMov D9、R1、R1
    vmov d10、r1、r1
    VMov D11、R1、R1
    vmov d12、r1、r1
    VMov D13、R1、R1
    VMov D14、R1、R1
    VMov D15、R1、R1

    BL boardStart /*调用 C 例程、从不返回*/

    OS_ASM_END_FUNC (boardResetStart)
    os_asm_section_text

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

    您好 Pradeep、

    似乎您将该函数用作启动函数而不是_c_int00、但请注意、您需要将入口点设置为 _self_reset_start、如果您对_vectors 使用其他名称、则可以在我之前对该名称的响应中共享的位置修改该函数、以便将向量表复制到 TCM。

    现在、对于将由复位处理程序 (reset_addr) 调用的启动函数、 如果将其用作软件中的启动函数、则可以放置此 boardResetStart 函数而不是_c_int00、您需要在以下位置进行此更改:https://github.com/TexasInstruments/mcupsdk-core-k3/blob/k3_main/source/kernel/nortos/dpl/r5/HwiP_armv7r_vectors_nortos_asm.S#L49