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.

[参考译文] AM623:适用于 AM62x 的 TI SDK、为定制电路板定制 Tiboot3.bin

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1515230/am623-ti-sdk-for-am62x-customizing-tiboot3-bin-for-a-custom-board

器件型号:AM623

工具/软件:

团队、

我们的客户正在使用适用于 AM62x 的 TI SDK、为定制电路板定制 Tiboot3.bin。

"

 要求:
我们计划使用 AM62x 来创建包含多个不同 DDR 大小型号的定制电路板。

DDR 配置位于 dtsi 文件中、例如"k3-am62x-sk-DDR4-1600MTs.dtsi"、因此我们需要为每个电路板型号提供唯一的 dtb 文件。

所有这些 DTB 文件都以独特的偏移量保存在 EMMC 原始分区中。 我需要在 R5 SPL 中更改代码以加载相应的 DTB 文件并初始化 DDR。

我们计划从 I2C<->EEPROM 读取唯一的 DTB 文件名、每个电路板都有一个编程到 EEPROM 中的唯一文件名。

 

例如: 如果我们有三种不同的板型号、分别为1GB、512MB 和256MB DDR 部件、则每个板上的 EMMC 都有三种型号的 DTB 闪存在原始分区中。

对于1GB DDR 型号、EEPROM 编程为文件名"DTB1_1Gb_DDR"字符串。 0x9000处的 eMMC 具有50KB DTB 文件。

我们计划为全部三种电路板型号(提供相同的、为单个 dtb 文件生成相同的 u-boot-spl.bin)保留相同的 tiboot3.bin、并在运行时将相应的 dtb 文件从 EMMC 加载到同一个 FDT_blob 地址。

 

eMMC 分区:  

eMMC 原始偏移地址

EMMC 中刷写的工程文件

0x0

TIBOOT3

0x1024

TIPSL

0x6000

U-Boot

0x9000

DTB1_1Gb_DDR

0x9400

DTB2_512MB_DDR

0x9800

DTB3_256MB_DDR

 

我们喜欢 禁用"config_multi_DTB_FIT" 以避免增加 u-boot-spl.bin 文件大小。

 

TIboot3 (R5 SPL)中的代码更改

  1. 启用 i2c EEPROM 驱动程序
  2. 从 EEPROM 读取 dtb 文件名
  3. 将 dtb 文件从 MMC 原始分区加载到 SRAM

 

当前代码流程:

 

ROM 引导加载程序将 r5-spl.bin (spl elf + dtb FIT)加载到 SRAM。 DTB 时基故障加载在 SRAM 地址 FDT_blob "&_end"处。

 

我的实验更改:

我添加了从 EMMC 加载的代码、并 通过更改为 void *FDT_blob、重写到 FDT_blob 的同一地址、即指向常量(const void *FDT_blob)的指针。

这样同一个地址重复用于加载不同的 DTB。

 

目前更改了代码后、我无法将新的 DTB 文件加载到同一个 FDT_blob 地址、R5滞留在这里。

 

您发现该设计有任何问题吗?

 

请对设计和我的代码更改进行注释。

 

谢谢、此致

"

的确欢迎大家的评论。

CY、

CY

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

    尊敬的 CY:

    很抱歉、但我认为我们对此没有意见。 它基本上改变了 R5 SPL 在 U-Boot 中的工作方式。

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

    尊敬的 Bin:

    没问题。  我已让客户考虑重新提出问题、以便我们可以尽可能在不同的回答上达成一致。

    下面是-->

    "

    是的、需要在 TIboot3代码中根据我们的要求进行更改、并且我们在 R5 SPL 中有一些问题。

    1. 如何将 DTB 与 u-boot-spl.bin 分离(R5 SPL)
    2. 用于加载 dtb 文件的 SRAM 位置是什么?

     

    我们正在制定一项要求、即启用具有不同 DDR 型号的 AM62x 板使用相同的 tiboot3.bin 文件进行引导。 下面是我们目前的理解以及实现这一目标的拟议方法。

     

    理解电流

    1. DDR4配置在 .dtsi 文件中定义、并为每个电路板型号生成一个唯一的 DTB。
    2. dtb 包含在 u-boot-spl.bin 中、后者又是 tiboot3.bin 的一部分。
    3. ROM 引导  加载程序从引导介质读取 tiboot3.bin、并将 u-boot-spl.bin (包括 DTB 和 ELF 文本)加载到 SRAM 中。

     

    要求

    我们目标是使用单个 tiboot3.bin 来引导多个 AM62x 电路板型号。 以下是我们考虑的两种方法:

     

    方法1:使用 CONFIG_SPL_MULTI_DTB_FIT

    • 在 u-boot-spl.bin 中嵌入多个 DTB。
    • 在运行时使用现有的配置选项选择合适的 DTB。

    挑战:  由于 SRAM 大小限制、嵌入多个 DTB 是不可行的。

     

    方法2:基于 EEPROM 数据从 eMMC 加载 DTB

    由于 SRAM 限制、我们倾向于采用这种方法。

    实现详细信息:

    • 电路板名称存储在 EEPROM 中(通过 I2C)。
    • 在 SPL 引导期间、从 EEPROM 读取电路板名称。
    • 根据电路板名称、选择相应的 DTB、从已知的 eMMC 偏移量加载到 SRAM (由 FDT_blob 指向)中。

    映射示例:

    板类型

    EEPROM 数据

    DTB 文件名

    eMMC 原始偏移

    1GB 板

    "1GB 板"

    am62x_board_1GB.dtb

    0x9000

    512MB 电路板

    "512MB 板卡"

    am62x_board_512MB.dtb

    0x9400

    256MB 主板

    "256MB 主板"

    am62x_board_256MB.dtb

    0x9800

     

    方法的挑战2.

    1. 如何将 DTB 与 u-boot-spl.bin (R5 SPL)分开?
    2. 应使用哪个 SRAM 位置来加载 DTB?

     

    请求提供建议

    我们感谢您就方法2的可行性提出意见以及您为应对上述挑战可能提出的任何建议。

    期待您的指导。

     

    此致、

    Chris

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

    您好、Chris、

    很明显客户已经做了很深入的分析。 我同意、由于 SRAM 大小限制、方法1不可行。

    方法2是可行的、但它需要更改 U-Boot 代码。 目前、R5 SPL DTB 与 R5 SPL 二进制文件相结合、并由 ROM 自动加载到 SRAM 中。 但是、如果不深入研究 U-Boot 源代码、我无法判断 R5 SPL 如何定位并解析其 DTB。

    底线是、我在方法2中没有看到任何设计问题、只需要一些具有 U-Boot 专业知识的人员进行开发工作。

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

    尊敬的 Bin:

    我同意。  感谢您的意见。

    客户已通过电子邮件离线回复、我希望在跟进中向您强调。  如果我们需要联系 Sitara 团队的其他成员、请随时联系。

    "

    根据我们的电流要求、   在 R5 SPL 中进行 DDR 初始化之前、我们需要启用 MMC 驱动程序功能。

    我们非常感谢您提供为实现这一目标所需的配置或代码更改方面的指导。

     

    发现的问题:

    我尝试  在 DDR 初始化之前调用 MMC_init (0)、但失败、错误代码为 -70。

     

    当前状态:

    • 设备树 Blob (DTB)当前加载在 "gd->FDT_blob"  中、它指向链接器脚本中定义的"_image_binary_end"。
    • 我们能够将 dtb 文件从 MMC 替换为 "_image_binary_end" 地址处的 SRAM、然后完全启动、但是  仅在 DDR 初始化之后
    • 但是、我们  的要求是为维护一个 tiboot3.bin  多种 DDR 型号 这需要启用 MMC 访问  解决方案  DDR 被初始化。

     

    您能否建议支持此功能所需的适当方法或修改?

    期待您的见解。

     "

    此致、

    Chris

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

    您好、Chris、

    这一要求是 U-Boot 自定义、这超出了我们的支持范围。 我们尚未进行此类 U-Boot 更改、因此无法在 DDR 初始化之前判断导致 MMC init 失败的原因。

    客户是否调试了函数 MMC_init ()以了解哪个子例程返回错误-70?

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

    BIN 和团队、

    来自客户、通过离线电子邮件共享、也可:

    "

    我们调试代码并发现,由于内存内存 malloc 内存限制, mmc_init ()失败。

    我们增加了 spl 配置中的 malloc LEN 并使其正常工作。

    "

    CY、
    Chris