兼容DDR不同size的COMPAT功能说明文档¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 10/29/2025 |
1. 功能简介¶
1.1 功能背景¶
对于相同ddr type、频率、封装,不同dram size、厂商的ddr来说,脚本上可以支持除了trfc设定外,其余设定都使用同一份,因此软件上适配了两种flow用于兼容不同dram size、厂商的DDR。一种是类OTT flow,使用默认设定init后,将dram size信息存储在ENV分区和DRAMINFO分区,两个分区的dram size信息互为备份,后续开机都会使用和板子上DDR容量适配的trfc设定启动。另一种为二次init flow,在第一次ddr init后,根据计算的dram size加载对应的trfc设定,而后再次进行ddr init,每次开机都会执行两次ddr init。
Compat功能只适用于AC timing一致的不同型号DDR。
2. 功能实现¶
2.1 类OTT flow¶

g_get_size_flag含义:
- = 0: 从ENV/DRAMINFO分区load到的dram size信息是无效的,比如和实际的dram size不符合、checksum fail;
- = 1: 从ENV分区 load到的dram size信息是有效的(与实际的dram size符合 or checksum pass);
- = 2: 从DRAMINFO分区 load到的dram size信息是有效的(与实际的dram size符合 or checksum pass);
- = 3: 从ENV/DRAMINFO分区load到的dram size信息都是有效的(与实际的dram size符合 or checksum pass);
2.2 二次init flow¶

2.3 两种flow的差异¶
类OTT flow:
- 支持str,resume script前会从ENV/DRAMINFO分区load正确的trfc设定;
- 理想状态下(分区内没有任何的数据错误),除了重烧image后第一次开机,后续开机都可以用正确的trfc设定,不会有少量bw损耗,第一次开机的bw损耗只有两次init间隔的时间;
- 流程复杂,需要新增分区;
二次init flow:
- 不支持str,因为ddr已经可以正常访问后,再次加载trfc设定的话一定要重新执行ddr init,二次init flow resume时只重新跑了resume script,有风险;
- 每次开机都会有两次init间隔时间的少量bw损耗
- 流程简单;
3.使用说明¶
3.1 支持兼容不同size、厂商的DDR¶
目前支持兼容不同size、厂商的DDR脚本:
DDR4_3200_COMPAT_BGA2
DDR3_2133_COMPAT_BGA2
DDR3_1866_COMPAT_BGA2
如名称所示,厂商和容量都由COMPAT替换,表示不关心这两方面,另外三项dram type、dram freq、package必须一致。
3.2 选择flow¶
如果不想新增分区,又不用str,就选择二次init flow,否则使用类ott flow。关闭SUSPEND或者ENV/DRAMINFO分区访问失败时走二次init flow。
3.3 如何新增分区¶
env和emmc不需要像flash一样配置新增分区,emmc会固定保留一块block,env则是会存储变量dram_size,DDR size = 2^dram_size MB。
3.3.1 env¶

3.3.2 emmc¶
emmc reserved的block,offset为0x478,大小为512 bytes。
3.3.3 flash¶
flash新增分区需要修改partition.config,draminfo分区一般跟在ddrtrain后,大小为128 bytes,具体可参考:
