ZHCABB1B August   2021  – January 2023 AM68 , AM68A , AM69 , AM69A , DRA821U , DRA829V , TDA4VM

 

  1.   摘要
  2.   商标
  3. 1引言
    1. 1.1 特性
      1. 1.1.1 支持的特性(版本 0.10.0)
      2. 1.1.2 不支持的特性(版本 0.10.0)
    2. 1.2 电子表格概述
      1. 1.2.1 输入工作表
      2. 1.2.2 输出工作表
      3. 1.2.3 其他工作表
    3. 1.3 默认 SDK 配置
  4. 2定制 DDR 配置
    1. 2.1 Config 工作表
      1. 2.1.1 系统配置
      2. 2.1.2 存储器突发配置
    2. 2.2 DRAMTiming 工作表
      1. 2.2.1 延迟参数
      2. 2.2.2 非延迟参数
    3. 2.3 IO 控制工作表
      1. 2.3.1 确定 IO 设置
      2. 2.3.2 处理器/DDR 控制器 IO
      3. 2.3.3 DRAM I/O
  5. 3软件注意事项
    1. 3.1 更新 U-Boot
      1. 3.1.1 更新 DDR 寄存器设置
      2. 3.1.2 更新源以设置可用存储器大小
    2. 3.2 更新 RTOS PDK
      1. 3.2.1 更新 DDR 寄存器设置
  6. 4疑难解答指南
    1. 4.1 主题/问题
      1. 4.1.1 主题 1
      2. 4.1.2 主题 2
      3. 4.1.3 主题 3
  7. 5参考文献
  8.   修订历史记录

更新源以设置可用存储器大小

除了更新 DDRSS 寄存器,可能还需要更新 u-boot 中的其他源文件,以便系统按预期工作。

例如,定制电路板上可用存储器总大小与 TI EVM 相比可能不相同。SDK 中的默认软件使用 u-boot 全局数据和电路板信息结构,特别是 ram_size 变量,该变量应当配置为与 DDR 存储器的总大小相匹配,以及 bi_dram 结构的 start (开始)size大小) 参数,他们将处理器相应的地址空间映射到 DDR 存储器区域。但是,这些参数并非根据寄存器设置或 Jacinto 7 DDRSS 寄存器配置工具的输出进行配置的。因此,必须更新这些变量,以确保当定制电路板的存储器比 EVM 的少时,系统不会尝试访问不可用的物理存储器;当定制电路板的存储器比 EVM 的多时,允许系统使用全部 DDR 存储器空间。

在默认的 SDK 源代码中,ram_sizebi_dram 结构变量在函数 dram_initdram_init_banksize 中进行配置,这些函数位于相应的处理器板级配置文件中。下方提供了示例:

board/ti/j721e/evm.c

如下所示,函数 dram_init 对全局数据变量 ram_size 进行配置。应当在自定义代码中修改此函数,ram_size 应当配置为与可用的 DDR 存储器总大小相匹配。

int dram_init(void)
{
#ifdef CONFIG_PHYS_64BIT
	gd->ram_size = 0x100000000;
#else
	gd->ram_size = 0x80000000;
#endif

	return 0;
}

如下所示,函数 dram_init_banksize 对全局数据变量 ram_size 以及电路板信息 bi_dram 进行配置。应当在自定义代码中修改此函数。变量 ram_size 应当配置为与可用的 DDR 存储器总大小相匹配。bi_dram 结构的 start (开始)size大小)参数应当配置为与每个 DDR 段的可用存储器相匹配。对于 Jacinto 7 处理器,DDR 存储器分为低电平区域和高电平区域。低电平区域的寻址空间为 32 位,但大小限制在 2GB。在下面的例子中,4GB 分为低电平区域和高电平区域,使得每个区域被映射到 2GB。


int dram_init_banksize(void)
{
	/* Bank 0 声明在 DDR 低电平区域中可用的存储器 */
	gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
	gd->bd->bi_dram[0].size = 0x80000000;
	gd->ram_size = 0x80000000;

#ifdef CONFIG_PHYS_64BIT
	/* Bank 1 声明在 DDR 高电平区域中可用的存储器 */
	gd->bd->bi_dram[1].start = CONFIG_SYS_SDRAM_BASE1;
	gd->bd->bi_dram[1].size = 0x80000000;
	gd->ram_size = 0x100000000;
#endif

	return 0;
}