我想问下,为什么我的ddr在MLO运行的时候表现出内存数据被清除的现象;(从SD卡启动)
具体表现为:
int omap_mmc_init(int dev_index)
{
struct mmc *mmc; mmc = &hsmmc_dev[dev_index];
//Sam
printf("#Sam %s %d %d %X %X %X\n",__func__,__LINE__,dev_index,mmc_init_setup,hsmmc_dev,mmc);
sprintf(mmc->name, "OMAP SD/MMC");
printf("#Sam %s %d mmc_send_cmd =%x\n",__func__,__LINE__,mmc_send_cmd);
mmc->send_cmd = mmc_send_cmd; mmc->set_ios = mmc_set_ios; mmc->init = mmc_init_setup;
printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init);//第一行
printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init);//第二行
printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init);
printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init);
……….
}
这是在uboot里面注册mmc的代码,每次运行到第一行打印的时候,地址打印正确,但是运行到第二行的时候,地址打印出来就全为0了;
或者在第一行的前面加个打印消息,然后现在的第一行也就全是0了,所以我认为这个地方是时序造成的问题;
我们的电路设计现在是没有PMU是直接从主电源引的电源,测量过电压正常;
软件寄存器配置:
SDRAM_CONFIG:0x61C04B32;
SDRAM_REF_CTRL:0x10000C30;
请帮忙看下或者给点意见,谢谢各位
Jian Zhou:
可以在U-boot下先测试下整个DDR3空间的读写。
shan xu2:
回复 Jian Zhou:
dear jian zhou:
ddr的读写我有测试过,下面是测试代码,测试是读出的数据是没问题的
int *p = 0,i = 0;
for(i=0;i<0x4000;i=i+4)
{
p = 0x80000000+i;
*p = i;
printf("->%x\n",i);
}
shan xu2:
回复 Jian Zhou:
int omap_mmc_init(int dev_index){ struct mmc *mmc; mmc = &hsmmc_dev[dev_index]; int i = 0; sprintf(mmc->name, "OMAP SD/MMC"); mmc->send_cmd = mmc_send_cmd; mmc->set_ios = mmc_set_ios; mmc->init = mmc_init_setup; for(i=0;i<10;i++) { printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init); printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init); printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init); printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init); }
….
}
换了块板,打印的时候:
#mmc_initialize 80000c78 80000c78 80000c78#Sam omap_mmc_init 468 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 469 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 470 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 471 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 468 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 469 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 470 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 471 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 468 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 469 0 0 0 402F4974#Sam omap_mmc_init 470 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 471 0 0 0 0#Sam omap_mmc_init 468 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 469 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 470 0 402F2C6C 402F3C78 402F4974
这是怎么回事?
Jian Zhou:
回复 shan xu2:
你这个问题是随机的,还是每次必现?
你的内存读写测试是循环测了整个DDR3的空间么?
shan xu2:
回复 Jian Zhou:
没有循环读写整个ddr,因为太大,时间会太长;
从现象上来看,数据没有丢失,但是读取的时候有时错误或者是读不到;
请问下,大概会有什么原因导致这样的问题呢?
Jian Zhou:
回复 shan xu2:
不知道你有没有做过DDR3的software leveling :
http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/53263.aspx
shan xu2:
回复 Jian Zhou:
做了software leveling后确实OK了,只是改了ddr的time1,time2,time3的配置和相关的几个寄存器,SDRAM_CONFIG寄存器还是和楼上的配置一样
只是现在第一次烧录后开机,会在
UBIFS: start fixing up free space
这个阶段停留稍微长点,几秒钟的样子
Jian Zhou:
回复 shan xu2:
之后就没有那么长的时间了么?一般烧录后第一次启动文件系统都会慢一些。
这个DDR3数据清空的问题算是解决了么?