一、硬件描述
硬件配置:5颗ddr4,其中一颗作为ecc。
1、DDR问题会导致uboot无法加载运行。所以RCW配置完后最重要的就是调试DDR。首先检查ddr硬件上的设计,DQ信号设计应该是4位交叉(swap),主要原因是CW软件DQ mapping是按照4位配置的,没有8位的swap配置,如果硬件不是按照4位swizzled的,ddr的参数校准会通不过。我们的项目第一版即使因为硬件DQ信号是按照8位设计的,DQ参数无法正确配置,从而ddr校准不过,不得已最后改版成4位swpa,才成功了。DQ mapping参数由硬件提供,然后再cw上对应填写就行。DQ_MAP原理图:
Codewarrior DQ mapping配置-4位swap,根据实际电路调整:
2、在创建ddr配置工程的时候,需要填写的clk to dqs由硬件提供,要正确填写。其他的值按照ddr手册配置好就行
二、参数介绍
1、DRAM type: 颗粒的配置成NoDimm
2、使用CW做validation参数校准,这个比较费时。
3、校准完毕后,和RCW一样,点击生成代码按钮,会生成ddr_init1.c,找到ddr_raw_timing结构体,复制到自己的ddr_init.c中替代。
struct dimm_params ddr_raw_timing = {
.n_ranks = 1,
.rank_density = 8589934592u,
.capacity = 8589934592u,
.primary_sdram_width = 64,
.ec_sdram_width = 8,
.device_width = 8,
.die_density = 0x08,
.rdimm = 0,
.mirrored_dimm = 0,
.n_row_addr = 16,
.n_col_addr = 10,
.bank_addr_bits = 0,
.bank_group_bits = 2,
.edc_config = 2,
.burst_lengths_bitmask = 0x0c,
.tckmin_x_ps = 625,
.tckmax_ps = 1600,
.caslat_x = 0x00FFFC00,
.taa_ps = 18800,
.trcd_ps = 18800,
.trp_ps = 18800,
.tras_ps = 43800,
.trc_ps = 37600,
.twr_ps = 20000,
.trfc1_ps = 350000,
.trfc2_ps = 260000,
.trfc4_ps = 160000,
.tfaw_ps = 25000,
.trrds_ps = 25000,
.trrdl_ps = 6200,
.tccdl_ps = 6200,
.refresh_rate_ps = 10237500
};
4、在packages/firmware/atf/plat/nxp/soc-lx2160/lx2160ardb/platform_def.h中定义下面的宏:
#define CONFIG_DDR_NODIMM
flex-builder -c atf -m lx2160ardb_rev2 -b xspi 生成fip.bin文件,使用codewarrior tap下载到flash。建议先下载一个官方的复合固件,然后替换自己的fip.bin和fip_uboot.bin。
三、开启DDR Log
修改文件:flexbuild_lsdk2108/components/firmware/atf$ vim Makefile
修改内容:
修改文件:flexbuild_lsdk2108/components/firmware/atf/plat/nxp/soc-lx2160a/lx2160ardb/platform.mk
修改内容:增加DDR_DEBUG := yes
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。