工具/软件:
团队、
我们的客户正在使用适用于 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)中的代码更改
- 启用 i2c EEPROM 驱动程序
- 从 EEPROM 读取 dtb 文件名
- 将 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